@pgsql

Страница 624 из 1062
Petr
06.01.2018
07:01:11
я забыл пока спал ? честно
началась всё с того, чтобы незаметно для юзера пересчитать индексы при вставке большой пачки данных сам юзер делает только селекты вставлять сразу в таблицу где индексы — дороговато (а у меня еще по определению импорт из csv идёт)

Andrey
06.01.2018
07:01:56
@pensnarik извиняюсь, вам известна постановка проблемы?
Из того, что я прочел, я понял, что надо вставлять много данных и искать по различным критериям, таким что партиционирование вам неподходит. Что я упустил?

Сергей
06.01.2018
07:01:59
а так называемый sharding key возможно извлечь из этих данных?

Google
Сергей
06.01.2018
07:02:16
о

еще вопрос

а ElasticSearch не рассматривали?

Petr
06.01.2018
07:02:30
А это тогда что ?
это причина по которой не подходит партицирование

Сергей
06.01.2018
07:02:38
ElasticSearch

Petr
06.01.2018
07:02:43
а ElasticSearch не рассматривали?
у меня точный поиск, нет смысла

Alex
06.01.2018
07:02:52
Наркомания какая то, извините

Сергей
06.01.2018
07:02:53
он точно ищет очень быстро

Andrey
06.01.2018
07:03:40
Я втавки данных вообще пока не касался. Я пока про поиск говорю.

Сергей
06.01.2018
07:03:44
вы сможете вставлять редко и пачками сразу на несколько машинах то есть мултимастер

Alex
06.01.2018
07:04:12
Petr
06.01.2018
07:04:25
Google
Petr
06.01.2018
07:04:52
Странно ).
отчего странно то?

Сергей
06.01.2018
07:05:15
надо требовать

либо скорость вставки не столь критична

Petr
06.01.2018
07:05:49
а так называемый sharding key возможно извлечь из этих данных?
не, это что-то типа внутреннего справочника

либо скорость вставки не столь критична
скорость вставки не критична

главное чтобы юзер её не заметил

Petr
06.01.2018
07:06:43
с него будет довольно данных, актуальных на прошлый месяц

Alex
06.01.2018
07:06:52
Это троллинг такой ?

Petr
06.01.2018
07:07:10
???
что именно вам не ясно?

Это троллинг такой ?
нет,это специфика данных они поступают не от пользователей

Alex
06.01.2018
07:07:52
Неважно откуда они поступают

Petr
06.01.2018
07:08:46
Неважно откуда они поступают
зато важно, что по определению для пользователя достаточно данных не самой первой актуальности

Petr
06.01.2018
07:09:35
Создавать индексы после тоже дорого, и нагрузка будет не так размазана. Уж лучше вставлять сразу туда, где индексы.
а никто не говорил что я буду их полностью рефрешить я говорил про позднюю вставку раз в месяц,с аккумулированием информации новой в течении собственно месяца

Google
Petr
06.01.2018
07:09:52
Партиции.
скорость поиска в моем случае упадет на два порядка и более

Alex
06.01.2018
07:10:12
Petr
06.01.2018
07:10:51
Значит вы неправильно что то делаете.
это по определению партиций, ведь у каждой свой индекс

Petr
06.01.2018
07:11:49
отчего же? 500 партиций — вот вам и 500 индексов

Alex
06.01.2018
07:11:58
И что ?

У вас скорее индексы в партициях не работали

Petr
06.01.2018
07:13:19
при равномерном распределении это O(log(N)) против O(K*log(N/K)), где K есть кол-во партиций

теперь представьте во сколько раз (≈) это медленнее

Petr
06.01.2018
07:15:32
У вас скорее индексы в партициях не работали
тогда бы поиск занимал чуть менее чем вечность

Ну так себе утверждение
оно достаточно примерное, да; но когда видно разницу на несколько порядков — становится очевидно, что это действительно гораздо (неприемлемо) медленнее

и это утверждение касательно select, кстати

Petr
06.01.2018
07:17:31
А вы сравнивали попадания в кеш в первом и во втором случае?
там абсолютно случайный доступ, к сожалению

Alex
06.01.2018
07:18:17
Может пересмотреть схему данных ?

Andrey
06.01.2018
07:18:18
Ну и что. Возможно, перед первым тестом база была прогрета (нужные блоки были в shared buffers), а второй раз все данные читались с диска.

там абсолютно случайный доступ, к сожалению
Абсолютно случайного ничего не бывает.

Petr
06.01.2018
07:20:02
под "абсолютным" разумеется я подразумевал прилагательное для усиления того факта, что данные из разных частей таблицы примерно одинаково в равной мере актуальны для селектов

Andrey
06.01.2018
07:20:28
И все-таки, сравнивали или нет?

Google
Petr
06.01.2018
07:20:44
Может пересмотреть схему данных ?
в силу заявленных требований по поиску это практически невозможно(

Alex
06.01.2018
07:21:31
Если смотреть в сторону какого нить data vault или anchor model

Andrey
06.01.2018
07:22:28
нет
Тогда что вы сравнивали? Просто время выполнения? Планы запросов то хоть смотрели?

Petr
06.01.2018
07:22:33
Андрей, немного не понимаю о чем вы намекаете в рамках сравнения скорости select между 500 партициями и одной — разница очевидна

Andrey
06.01.2018
07:28:32
Андрей, немного не понимаю о чем вы намекаете в рамках сравнения скорости select между 500 партициями и одной — разница очевидна
Все зависит от запроса. Если в его условии отсекаются лишние партиции, как я и писал выше, то это будет намного быстрее. Но это не ваш случай. Но даже в вашем случае не думаю, что разница может быть в два порядка, думаю, что жто ошибка измерения. Данных то надо прочитать столько же.

Petr
06.01.2018
07:29:59
как я писал выше, нельзя в данной задаче отсечь лишние партии из-за того что нужно обязательно заглянуть в каждую (и партиции никак нельзя разбить таким образом, чтобы достичь обратного эффекта)

данных надо прочитать не столько же, все таки это бинарное дерево (деревья)

Petr
06.01.2018
07:34:56
когда это btree (именно его используют сейчас в основном) перестало быть бинарным?

Alex
06.01.2018
07:35:14
Оно им и не было

Вроде

Petr
06.01.2018
07:35:49
ну вы что, господа тогда бы и логарифма по двойке не было разве что там может быть более чем два потомка, но суть это не меняет

Andrey
06.01.2018
07:39:07
Но суть не в этом. Я бы все равно сравнил чтения с диска.

Я попробую вечером это сделать, сейчас нет базы под рукой. Вы бы хоть намекнули на свою структуру данных. Ечли детали раскрывать нельзя, может хотя бы на аналогии какой-то.

Petr
06.01.2018
07:40:39
Но суть не в этом. Я бы все равно сравнил чтения с диска.
и то верно, сути это не меняет. тесты я все-таки проведу, на будущее будет полезно. спасибо)

Google
Alex
06.01.2018
07:41:22
Хотя бы типы по которым индексы

И примерную селективность данных

Andrey
06.01.2018
07:43:40
Строки все без ограничения длины?

Andrey
06.01.2018
07:45:29
верно
А в реальности максимальные длины какие?

Petr
06.01.2018
07:45:55
индексы: 1. A1+A2+A3 2. A1+B1+B2+B3 3. A4 4. A5 5. A6 6. A7 7. A8

Andrey
06.01.2018
07:45:59
Есть ли не ASCII символы?

Petr
06.01.2018
07:46:47
А в реальности максимальные длины какие?
в тех полях которые участвуют в индексации — не более 20-40

Есть ли не ASCII символы?
в тех полях которые участвуют в индексации — только ASCII

Andrey
06.01.2018
07:48:07
Поскольку у вас очень много строк, есть места, где стоит сэкономить: 1) почитайте про выравнивание данных в tuple 2) varchar длиной до 126 включительно экономит место в заголовке 3) collate C для строк экономит место в данных и в индексах

Petr
06.01.2018
07:49:55
да, еще в A5,...,A8 частенько бывают NULL это тоже надо учитывать

Andrey
06.01.2018
07:50:29
Yaroslav
06.01.2018
09:07:20
спасибо, попробую применить
А в чём у Вас _конкретно_ проблема? SELECT-ы проседают при заливке данных?

?
06.01.2018
09:30:20
Столбцы через андер или кэмэл? Сорри за холиварный вопрос

Yaroslav
06.01.2018
09:34:28
Столбцы через андер или кэмэл? Сорри за холиварный вопрос
snake_case, IMHO. Потому что CamelCase всё равно downcase-ится до camelcase, если без кавычек. К тому же, говорят, его труднее читать. И вообще, см. http://www.sqlstyle.guide/

Denis
06.01.2018
10:10:44
индексы: 1. A1+A2+A3 2. A1+B1+B2+B3 3. A4 4. A5 5. A6 6. A7 7. A8
Если у вас поиск по равенству, то посмотрите в сторону одного покрывающего bloom индекса.

Ну и ещё - вам может подойти brin индекс, раз у вас 1ккк записей. И обязательно учитывайте выравнивание и первыми пустите smallint, а потом уже varchar. Плюс вопрос - у вас когда проблемы возникают? При селектах? При вставке данных за месяц?

Страница 624 из 1062