Кодовой Барабанщик
112 subscribers
304 photos
103 videos
175 links
БлогеРОК программиста-барабанщика 👨‍💻🥁
Telegram: @GranSteL
YouTube: https://youtube.com/@granstel
ВКВидео: https://vkvideo.ru/@drummer_programmer
Download Telegram
Сегодня тяжёлая среда, но ничего, потерпи: скоро уже пятница, а ещё видосики на подходе✨
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Forwarded from C# Short Posts 🔞
🌳 B+-tree: что значит буква B и что значит «+»
В прошлых постах мы с тобой разобрали страницы (👉 раз), увидели, как индекс спасает от Seq Scan (👉 два), и пощупали B-дерево изнутри — корень, разделители, листья (👉 три). Дальше разберёмся, что значит «B», чем B+-дерево отличается от B-дерева, как оно держит себя ровным, и какая сложность поиска по нему🔎

🔤 Что значит 🅱️
Точного ответа нет💁 Структуру B-дерева придумали Рудольф Байер и Эдвард МакКрейт в Boeing Research Labs в начале 70-х, но что означает B — авторы так и не объяснили. Варианты: Balanced, Bayer (фамилия), Boeing (фирма), а ещё broad, bushy, и даже between. По воспоминаниям МакКрейта, Байер шутил: «чем больше думаешь, что значит B в B-tree, тем лучше понимаешь B-tree» (по крайней мере, такая история в вики). Так что «B = balanced» — логичное предположение, но оно не подтверждено разработчиками¯\_(ツ)_/¯

➕ А вот «+» — уже не загадка
Это и есть главное отличие от классического B-дерева, в котором данные могут находиться как во внутренних узлах, так и в листовых. B+-tree, на котором основаны индексы в популярных СУБД (PostgreSQL, MySQL, MongoDB, SQL Server), устроено немного иначе:

🟢 Данные (в случае PostgreSQL, ctid — указатели на строки) живут только в листьях. Внутренние узлы хранят одни ключи-разделители: чистое «оглавление», маршрут до листа. Те самые «≥ 367 → блок 2» из #430.
🟢 Листья сцеплены в связный список. Поэтому поиск по диапазонам (>, <, BETWEEN) работает достаточно быстро: спустился до листьев и побежал по ним подряд, не возвращаясь наверх (см. дикпик 3). Тот же список бесплатно даёт и упорядоченный обход: ORDER BY может выполняться через последовательный обход индекса без дополнительной сортировки (но оптимизатор не всегда выбирает индексный проход).
В классическом B-дереве упорядоченный обход тоже возможен, но для перехода к следующему ключу приходится регулярно возвращаться к внутренним узлам дерева. В B+-дереве листья уже связаны между собой, поэтому диапазонные запросы и последовательный обход выполняются проще и эффективнее📈

И ещё 🅱️онус: благодаря тому, что внутренние узлы хранят только ключи-разделители, они компактнее → в страницу 8 KB влезает больше разделителей → ветвление выше → уровней дерева меньше → меньше чтений с диска.
Насколько степень ветвления выше? В 8 KB-страницу влезают сотни мелких элементов. В листе элемент — это «ключ + ctid» (для int их 366, #430). А во внутреннем узле элемент — «ключ-разделитель + ссылка на дочернюю страницу», и таких ссылок тоже сотни, то есть сотни веток к дочерним узлам (см. дикпик 2).
Для сравнения, двоичные деревья (AVL, красно-чёрные) имеют всего по две ветви, из-за чего они высокие и заточены скорее под оперативную память, а не под диск, поэтому как основу для дисковых индексов их обычно не используют.

🧰 Как это использовать
🔹 «B» — историческая загадка, а «+» — это «данные только в листьях + листья связаны в список».
🔹 Индекс по столбцу ускоряет не только поиск по равенству, но и диапазоны (>, <, BETWEEN): БД спускается к началу диапазона и идёт по связанным листьям. Часто фильтруешь по диапазону — индекс окупается.
🔹 ORDER BY по индексируемому столбцу может пройти без отдельной сортировки, если порядок в запросе совпадает с порядком индекса. Повод согласовать ORDER BY с порядком столбцов в индексе.
🔹 Один B+-tree-индекс закрывает сразу три сценария: точечный поиск, диапазон и сортировку — поэтому индекс по «горячему» столбцу часто полезнее, чем кажется.

#бд #postgresql #инженерныештучки
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥1
Приключения Электроников - Мы к вам приехали на час | 27.05.2026

📱 Ютубчик
📱 ВК Видео

#движ #пятый_угол
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Lenny Kravitz - Are You Gonna Go My Way | 27.05.2026

📱 Ютубчик
📱 ВК Видео

#движ #пятый_угол
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Это я год назад в Грузии 🇬🇪
Сейчас дома уже 👇
🔥2
This media is not supported in the widget
VIEW IN TELEGRAM
😁2❤1🔥1🌚1
Соблюдай правила, и сочиняй #ЗанимательныеИстории
😁2
Если твоя #ИИшница умеет генерировать картинки, попроси её "нарисуй картинку дня" и закидывай в комментарии👇
У меня сегодня вот такая👆
🔥2❤1
Зацени, я тут в соответствии со спецификой своего контента мини-видео-гайд запилил👇
❤1
Forwarded from C# Short Posts 🔞
Мы с тобой уже довольно сильно углубились в тему деревьев, главное - не забрести в дремучий лес (ба-дум-тсс🥁). Не переживай, скоро мы выберемся отсюда, а пока что:

🌳 Как B-дерево держит себя ровным и какая у него максимальная высота

⚖️ Balanced — это про что
Если помнишь, одно из толкований буквы B — Balanced, то есть их ещё называют сбалансированными деревьями. Эта сбалансированность заключается в том, что все листья лежат на одной глубине, любой путь от корня до листа одинаковой длины. Нет веток разной глубины, в которые можно надолго провалиться, — поэтому любой спуск к данным стоит одинаково 🟰

🤩 А как у других?
В двоичных деревьях (AVL, красно-чёрных) после вставки одна ветка может стать длиннее другой, и дерево «чинит» себя поворотом: берёт перекосившую тройку узлов и локально переставляет их — бывший потомок становится родителем, поддеревья перевешиваются, высоты выравниваются. Делает это сама структура, на каждой вставке и удалении. Поворот — это их способ оставаться ровными 🔁

🪨 Как поддерживается баланс (видео-дикпик 📱)
B-дерево балансируется без поворотов — делением переполненной страницы (split):
1️⃣ лист наполняется ключами, пока не переполнится;
2️⃣ переполнился — делится надвое (split), а пограничный ключ копируется наверх, к родителю, и становится новым разделителем (по нему потом и выбирают, в какую из половин спускаться);
3️⃣ если переполнился сам корень — он тоже делится на два узла, которые становятся внутренними, потому что сверху над ними встаёт НОВЫЙ корень (появляется новый уровень).
Таким образом дерево не удлиняет отдельные ветки, а растёт вверх равномерно. Возникает резонный вопрос:

📏 Сколько вообще может быть уровней?
Жёсткого лимита в Postgres нет, но из-за большого ветвления высота по int растёт еле-еле:
🔹 2 уровня — до ~100 тыс. строк
🔹 3 — до ~30 млн
🔹 4 — до ~8,5 млрд
🔹 5 — до ~2,4 трлн

А выше упирается в потолок физического хранения таблицы. У каждой строки есть физический адрес: номер блока + слот внутри блока. Номер блока 32-битный, значит блоков максимум ~4,3 млрд (2^32), а в один блок 8 KB влезает примерно 291 строка. Перемножаем 4,3 млрд страниц × 291 запись ≈ 1,2 трлн строк, и больше в таблицу не поместится: для новой строки просто не останется свободного адреса 📍

Пятиуровневое дерево может вместить до ~2,4 трлн ключей, а строк в таблице будет не больше ~1,2 трлн. Таблица кончится раньше, чем дерево заполнит пятый уровень и запросит шестой. Поэтому индекс по int на практике — это 2–5 уровней, и выше пяти не вырастет: столько строк в одну таблицу физически не положить 🛑

🔬 Посмотрим на живом примере (дикпик 1)
Растим таблицу с первичным ключом и смотрим высоту через bt_metap.

Рост в 10 000 раз добавил ровно ОДИН уровень. А точечный поиск всё ещё требует единицы чтений: «корень → ветвь → лист → строка». И столько будет как на тысяче строк, так и на десяти миллионах ✨

🎢 Что это даёт по скорости
Сложность поиска по такому дереву - O(log n), потому что поиск = спуск от корня до листа, то есть ровно столько шагов, сколько в дереве уровней (высота). А высота для дерева с ветвлением f и N записями — это примерно log по основанию f от N.
И в этом весь смысл баланса: если бы split не поддерживал все листья на одной глубине, дерево могло бы выродиться в почти линейную цепочку — и поиск стал бы O(n), то есть потребовались бы миллионы чтений, от которых индекс и спасает 🛟

🅰️ Что унести с собой
🔹 Поиск по индексу — O(log n), потому что большое ветвление держит дерево низким, а split гарантирует одинаковую глубину листьев.
🔹 Это гарантия худшего случая, а не «в среднем»: split держит все листья на одной глубине, поэтому длинных веток просто не бывает.
🔹 Точечный поиск по индексу почти «бесплатный» — что на тысяче строк, что на сотне миллионов это несколько уровней дерева.

Команды, чтобы самому замерить высоту на разных размерах, — в 👉 гисте 👈

🧑‍💻dp 🥁
#бд #postgresql #инженерныештучки #heavywednesday
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥1
Зацени дофаминовый маркетплейс:

👉https://dofamarket.granstel.ru/👈

Он доставит тебе дофамин от покупок без трат: оплаты и курьеров нет, деньги не списываются🤩

Зачем?
В Корее набирают популярность сайты для «фейкового» шоппинга, пишет The KoreaTimes.
На сайтах по доставке одежды или еды вы добавляете товары в корзину, вбиваете свой адрес и делаете «заказ». Курьер якобы выезжает по вашему адресу, его «передвижения» можно отслеживать на карте. По факту же вам ничего не везут, и деньги с карты тоже не списывают.
Говорят, таким образом можно получить заряд быстрого дофамина и, самое главное, сэкономить деньги💰

Мне понравилась идея, ведь в целом это довольно легко реализовать, и руководствуясь своей мыслью о пет-проектах, решил воплотить её ✨
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Этот маркетплейс 👆 был написан агентом, по сути, за пару часов, и был готов к публикации ещё в понедельник, а я опубликовал его только в четверг.

Почему?

Потому что надо было повозиться с хостингом, доменными именами, добавление секретов для автоматизированной публикации, и ещё всякие свои дела делать. Теперь агент сам пишет код и сам может публиковать, но на мне: указания, что надо сделать, а самое сложное - привлечь посетителей. Да, проект на проде, это уже круто (не каждый из них может по-настоящему сказать "Hello, world!"), но без пользователей от него теперь мало толку. Агент может автоматически настроить рекламу и делать рассылки, но для этого надо ещё всё настроить РУКАМИ🤯
Так что это правда👇 мы научились быстрее генерировать код, но ещё учимся быстрее поставлять его без потери качества
AI, похоже, реально ускоряет разработчиков. Но не так, как обычно продают в презентациях.

В новой статье от NBER "Writing Code vs. Shipping Code" исследователи посмотрели на 100 000+ GitHub-разработчиков и сравнили разные поколения AI coding tools: автокомплит, интерактивных агентов и автономных агентов.

Да, судя по тексту, AI резко увеличивает количество написанного кода. Автокомплит даёт примерно +40% к числу коммитов. Вместе с интерактивными агентами совокупный прирост доходит до +140%, а с автономными — до +180%. В отдельных местах цифры вообще безумные: sync-агенты дают +741% строк кода.

Но больше кода ≠ больше продукта.
Эти +741% строк превращаются всего в +65% pull requests и примерно в +20% релизов. А общий эффект +180% по commits сжимается до +50% по проектам и до +30% по настоящим релизам.

Почему? Потому что bottleneck переехал.
Раньше узким местом было написание кода. Теперь AI это резко удешевил. Но остались другие этапы: понять, что вообще строить (дискавери), проверить, интегрировать, отревьюить, зарелизить, довести до нужного качества, найти пользователей.

И вот эти этапы всё ещё человеческие, медленные и дорогие.
Самое забавное: авторы проверили 3 крупных marketplace приложений и увидели рост количества новых приложений, но не увидели роста их суммарного использования. То есть приложений стало больше, а внимания пользователей — нет.

По сути, AI сделал производство кода дешевле. Но не сделал дешевле доверие, дистрибуцию этого кода, продуктовый вкус, поддержку и market fit. Так что “AI пишет код” — правда. А вот довезти этот код до пользователей — всё ещё отдельная боль.
❤4🔥2
Добавил в #занимательныеистории страшилку, атмосферные звуки и внезапные повороты прилагаются👍
🔥2😁1
Король и шут - Лесник | 27.05.2026

📱 Ютубчик
📱 ВК Видео

#движ #пятый_угол
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7
Это я перекатился из Додо 🌯 в Юрент 🛴
Сейчас на работе уже ⚡

#офисныеистории теперь будут про новую компанию, так что
🟪🟪🟪🟪🟪

Если интересно, как я менял работу, ставь 🤟, расскажу👇
Please open Telegram to view this post
VIEW IN TELEGRAM
13🔥421