TGViewer
technotrankov technotrankov @technotrankov · 339 subscribers
Post #15 579
Важно знание, которое надо знать: не все новшества требуют длительной обкатки практикой. Просто потому что обкатывать там иногда совершенно нечего.

До сих пор не все понимают, почему UUID7 это манна небесная.

Обычно, при выборках по LIMIT / OFFSET (а это основная масса всех выборок) мы упираемся в проблему однородности порядка выдачи — чтобы после первых 20 вернулись вторые 20 в том виде, в котором они были на момент на момент запроса первых, то есть, чтобы весь массив информации не менялся, пока мы его частями отдаём.

Конечно же, мы для этого весь массив при каждом запросе сортируем, при этом сортируем мы по created_at. А, так как created_at не гарантирует уникальности, мы добавлем ещё и id. А так как сортировать весь массив каждый раз долго, мы создаем составной индекс. Который составной индекс всегда большой и медленный на запись (потому что составной).

Теперь, что мы имеем в UUID7. Он велик тем, что уже содержит в себе created_at, и, более того, может по этому признаку быть отсортирован. А, кроме того, так как он UUID, он уникален.

То есть это и есть id+created_at, только в одном флаконе, и Postgres его умеет из коробки (и все последние версии Python тоже).

А ещё это означает, что если мы делаем UUID7 первичным ключом, то такие записи физически лежат на дисках последовательно. И это также значит, что мы — да, да — можем помимо основного индекса навесить на них индексацию BRIN, то есть блочную, то есть ту самую идеальную индексацию для LIMIT/OFFSET, и нам для этого даже ORDER_BY в теории писать не нужно (в теории не нужно, а на практике-то, естественно, нужно).

Естественно, это не подходит, если у вас кластеризованная БД, и вы завязались на обычный арифметический ID, который постоянно умножаете и делите на номер кластера (есть такие техники, я что-то про это слышал). Но если вы из тех крутых ребят, которые вертят на колене кластеризованные БД, зачем вы вообще это читаете? (над дураками посмеяться).

Ну так и вот казалось бы — а почему тогда все вокруг его не используют? Если он такой удобный и это вопрос всего одного дополнительного индекса (быстрого и компактного)?

Да потому что до сих пор воспринимается как «новшество», все боятся «новшеств». Все чего-то ждут. А не надо ждать, надо брать и пользоваться, там всё просто и ломаться нечему. Есть, конечно, обратные примеры — типа IPv6. Который давно принят, но никак что-то не взлетает. Потому что неудобный. Так вот, UUID7 — удобный.
  • 👍 3
  • ❤ 2
  • ❤‍🔥 2
  • 👏 1
  • 🙏 1
More from @technotrankov
  1. Sep 26, 2026https://t.me/ai_machinelearning_big_data/11019 В 2009, или в 2010, в эпоху Flash-баннеров…
  2. Sep 16, 2026Плеханов, Игнатов, Засулич, Дейч, Аксельрод
  3. Aug 27, 2026(ОКОНЧАНИЕ - НАЧАЛО СМ. ВЫШЕ) И вот я думаю, что если бы инженеры внимательно читали Досто…
  4. Aug 27, 2026Я не знаю, почему я так люблю Линкера, он же Иван Матвеев. Мы вроде никогда и большими дру…
  5. Aug 26, 2026Специальный человек из мира «интернет-маркетинга» немедленно забил тревогу в пустой таз и…
  6. Aug 26, 2026Ладно, в комментариях к прошлому посту всплыл закономерный вопрос — как же так можно рушит…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →