Обновить

Комментарии 9

.. Если не читать Best practices, мир полон сюрпризов...

Согласен.

Крутой разбор, видно, что человек реально копал вглубь, а не пересказал доку. Особенно про параллельную вставку и атомарность полезно тем, кто работает с большими объёмами. Возьму на заметку COPY и unnest

Полностью согласен, нашел данный доклад на youtube. Рекомендую к просмотру. После доклада еще аудитория интересные вопросы задавали. Если нужно могу скинуть ссылку (можете поискать такое же название на youtube)

Спасибо за отзыв. Рад что понравилось.

Спасибо за ссылку.

Если интересно, вышла вторая статья. Она +- про тоже самое что и тут, только больше информации по спрингу. https://habr.com/ru/companies/gazprombank/articles/1010784/

Какая структура payment_document ? Какие индексы у payment_document? Как отсортированы исходные данные и отсортированы ли? Ладно, можно предположить, что индекс на account_id, и исходные данные отсортированы по account_id. Тогда при вставке данные ложатся по-порядку в индексы. Если account_id в исходных данных не по-порядку, то сервер будет будет складывать записи в разных местах индекса, подгружая страницы из разных мест. При этом будет большая деградация и ваши батчи будут бесполезны. Знакомая проблема с guid-ами в качестве ключей.

Также, если индекс содержи даты, а в исходных данных даты как попало.

Короче, надо исхитриться, чтобы при вставке записи вставлялись в последнюю страницу в дереве, и перебалансировок дерева не было.

Интересно также, секционирована ли таблица и как данные ложатся по секциям.

Вызывает скепсис, что многопоточность может увеличить скорость, при том, что данные по разным потокам будут иметь разные ключи payment_document, из-за чего (теоретически) строки от разных потоков будут писаться в страницы индекса вперемешку, что приведет к частым перебалансировкам дерева индекса. Разве что распределить данные по разным секциям и сделать, чтобы каждый поток писал в свою секцию.

Если индексов в таблице много, имеет ли смысл отключить их на момент массовой вставки, а потом пересоздать? Было ли это в данной работе сделано?

Структуру проекта можно посмотреть на гитхабе, его также можно запустить и произвести замеры на вашем оборудовании. Ссылка есть в начале статьи. Если коротко, там имеются индексы, но логику в них можно не искать. В данном случае они существуют только для того, чтобы мешать вставкам, симулируя работу реальной системы. В качестве ИД используется последовательность в постгресе, uuidv4 не используется. По последнему пункту (удаление индексов перед вставкой) есть исследование, но оно в другой статье, ссылку на которую дал LeshaRB.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
axiomjdk.ru
Дата регистрации
Численность
51–100 человек
Местоположение
Россия