powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Можно ли генерировать последовательные UUID?
10 сообщений из 10, страница 1 из 1
Можно ли генерировать последовательные UUID?
    #39295409
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В таблице поле UUID - первичный ключ.
Можно ли генерировать последовательные значения UUID?
Есть ли в этом смысл с точки зрения производительности при INSERT?
...
Рейтинг: 0 / 0
Можно ли генерировать последовательные UUID?
    #39295510
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во всяком случае очевидной возможности генерировать uuid последовательно нет.

Производительность insert - в postgresql данные не кластеризованы. Поэтому монотонная или случайная последовательность записываемых значений - значения не имеет.
...
Рейтинг: 0 / 0
Можно ли генерировать последовательные UUID?
    #39295516
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkijВо всяком случае очевидной возможности генерировать uuid последовательно нет.

Производительность insert - в postgresql данные не кластеризованы. Поэтому монотонная или случайная последовательность записываемых значений - значения не имеет.

ясно,

а на перестройку индекса первичного ключа не влияет упорядочена последовательность значений ключей или нет?
...
Рейтинг: 0 / 0
Можно ли генерировать последовательные UUID?
    #39295564
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин, по индексам я немного задумался ещё когда предыдущее сообщение писал. К сожалению, не могу точно ответить, что именно представлено в postgresql под названием B-tree.

Классическая структура b-tree, если правильно помню, оптимально работает только со случайным заполнением данными. Возрастающая последовательность превращает дерево в простой неэффективный список. Производные от b-tree структуры (вроде красно-чёрных деревьев) с этим борются. Но что используется в реальном нынешнем мире и какие дополнительные внесены оптимизации в узкие места - я не знаю.
...
Рейтинг: 0 / 0
Можно ли генерировать последовательные UUID?
    #39295572
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинМожно ли генерировать последовательные значения UUID?Можно: lpad(to_hex(123), 32, '0')::uuid
Но это уже будет NU-uid
...
Рейтинг: 0 / 0
Можно ли генерировать последовательные UUID?
    #39295975
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вставка строк в таблицу с индексами может серьезно замедлиться на больших объемах, когда данные не влезают в память.

Например, массированная вставка 1000 строк с использованием copy в большую таблицу без индексов запишет несколько дисковых страниц в табличный файл.

При наличии индекса важно, чтобы 1000 ссылок были записаны рядом в несколько дисковых страниц индексного файла.
Например, первое поле в индексе event_time, и мы вставляем 1000 строк, относящихся к одному моменту времени.

Иначе придется записать более 1000 дисковых страниц индексного файла. Это работает на порядок медленнее.
...
Рейтинг: 0 / 0
Можно ли генерировать последовательные UUID?
    #39296001
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBatПри наличии индекса важно, чтобы 1000 ссылок были записаны рядом в несколько дисковых страниц индексного файла.
Например, первое поле в индексе event_time, и мы вставляем 1000 строк, относящихся к одному моменту времени.

Иначе придется записать более 1000 дисковых страниц индексного файла. Это работает на порядок медленнее.
А можно спросить — почему при разном времени будет записано “более 1000 индексных страниц”?

Разве страницы-листья не будут заполняться в порядке следования значений event_time, которое имеет тенденцию коррелировать с порядком добавления записей?
И учитывая, что timestamptz == 8байт, а ctid==6 байт, то все 1000 значений должны были бы влезть в пару страниц, нет?
...
Рейтинг: 0 / 0
Можно ли генерировать последовательные UUID?
    #39296016
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorovА можно спросить — почему при разном времени будет записано “более 1000 индексных страниц”?

Разве страницы-листья не будут заполняться в порядке следования значений event_time, которое имеет тенденцию коррелировать с порядком добавления записей?
И учитывая, что timestamptz == 8байт, а ctid==6 байт, то все 1000 значений должны были бы влезть в пару страниц, нет?Мое последнее предложение "иначе придется записать более 1000 дисковых страниц индексного файла" относится к иному случаю.
Например, когда новые 1000 строк имеют одно значение event_time и разные значения user_id, а по таблице построен индекс (user_id, event_time).
В этом случае 1000 ссылок будут записаны на разные дисковые страницы индексного файла.
...
Рейтинг: 0 / 0
Можно ли генерировать последовательные UUID?
    #39296050
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkijКлассическая структура b-tree, если правильно помню, оптимально работает только со случайным заполнением данными. Возрастающая последовательность превращает дерево в простой неэффективный список.
Зачем писать, если не знаешь? Первая ссылка в google про b-tree.
...
Рейтинг: 0 / 0
Можно ли генерировать последовательные UUID?
    #39296184
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк, мне гугл выдал первой статью, на одну из которых ваша ссылка на вики и ссылается: http://algolist.manual.ru/ds/
авторМожно доказать, что при последовательном включении в дерево случайных данных получается именно среднее время выполнения операций. Однако, если входные данные, например, образуют возрастающую последовательность, то получается список и все преимущество дерева потеряно.
Да, память и внимательность таки подвели, только не с той стороны, откуда ждал. Это сказано про binary tree, а b-tree - именно уже сбалансированное дерево. Надо будет перечитать алгоритмы и структуры.

LeXa NalBat, то есть в менее экстремальной варианте, когда индексы и новые данные помещаются в shared buffers, стоимость вставки одной записи будет одинаковая и для случайного и для нового последовательного значения, правильно? Стоимость вставки группы записей (но ещё влезаем в память) - случайное распределение создаст больше грязных страничек и больше работы чекпойнту.
Что-нибудь критичное изменится, если говорить не про два copy (один со случайными, второй с последовательными ключами), а про конкурентные транзакции? Для простоты, транзакции делают только один insert в табличку, где есть только primary key, других индексов и FK нет. На сколько понимаю, последовательные ключи будут сильнее драться за блокировки на странички индекса, но это short-term локи и заметным образом влиять не будут.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Можно ли генерировать последовательные UUID?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]