@pgsql

Страница 620 из 1062
Petr
05.01.2018
14:41:07
вся проблема в том, что гипотетически может возникнуть ситуация когда пачку данных надо будет удалить — напрашивается партицирование сейчас тестировал удаление прямо в лоб — ну как критичная мера прокатит

Evgeniy
05.01.2018
14:42:16
а юзеры когда ищут данные, там есть более менее понимаение какой батч им нужен или всё рандомно абсолютно?

Petr
05.01.2018
14:42:34
и всё это на одном сервере живет?
на текущий момент — да

и что ты делаешь со старыми данными
они тоже необходимы постоянно

Google
Evgeniy
05.01.2018
14:44:10
а в семь раз больше серверов не хочешь?

Petr
05.01.2018
14:44:47
хочу, но возможности на текущий момент для этого нет

да и поиск "норм" проходит, где-то за 400-800мс посадка допустима до десятка секунд

В общем то мне не шибко охота вставлять данные по несколько суток, логически напрашивается именно какая-то работа с индексами, не знаю :(

Evgeniy
05.01.2018
14:49:44
а там есть какой-то автоинкремент у нового батча? или оно перемешивается всё?

Petr
05.01.2018
14:50:10
а там есть какой-то автоинкремент у нового батча? или оно перемешивается всё?
нету, у каждой пачки только есть колонка с ID, и он одинаков на всю пачку

Evgeniy
05.01.2018
14:52:14
но в поиске он потом не учавствует да?

Petr
05.01.2018
14:54:10
не участвует, нет

Evgeniy
05.01.2018
14:54:17
как вариант, попроси постгреспро сделать тебе билд с параллел аппенд патчем и сделать партишонинг

если бы еще хуйнуть блумфильтр сверху для секондари индексов, вообще пушка бы была

Google
Evgeniy
05.01.2018
14:57:27
ну у тебя будет скажем 1500 партиций, и ты не хочешь ходить в каждую из них когда ищешь чтото блум фильтр может сказать что данных для этого запроса точно нет в 1000 партиций, и ты пойдешь только в 500

Petr
05.01.2018
14:57:49
я не могу сказать что их нет в остальных 1000

Evgeniy
05.01.2018
14:58:18
а блумфильтр может

Petr
05.01.2018
14:58:39
даже наоборот, скорее всего они там есть

а блумфильтр может
каким образом?

к тому же, это все равно в 100 раз медленнее в моем случае относительно глобального индекса:(

Evgeniy
05.01.2018
14:59:45
параллел аппенд поможет

Petr
05.01.2018
15:01:34
как? ?

Evgeniy
05.01.2018
15:01:49
пойдет в партиции параллельно за твоими данными

раз они везде разбросаны

Petr
05.01.2018
15:03:26
чувствую себя глупцом, однако, пока еще не понял как это позволит затем делать поиск за логарифм

Evgeniy
05.01.2018
15:04:07
у тебя и так поиск за логарифм, просто N таблиц проверить

раньше была одна таблица, теперь будет на каждый батч

чтобы сканить быстрее - параллел аппенд чтобы сканить меньше таблиц - блум фильтр (такого патча нет)

ты даже на апликухе можешь сделать паралел аппенд, если очень хочется

Petr
05.01.2018
15:07:33
у тебя и так поиск за логарифм, просто N таблиц проверить
это тогда не логарифм, а O(K*log(N/K)), что в моем случае на два порядка медленнее

или я опять что-то не так понял?)

Evgeniy
05.01.2018
15:08:21
не, вроде все так понял

Google
Petr
05.01.2018
15:09:03
ну это будет 100 секунд и больше на запрос — не приемлемо (

Evgeniy
05.01.2018
15:09:03
я просто еще говорю что ты сможешь их параллельно просканить

Petr
05.01.2018
15:09:12
вчера уже тут обсуждали прелести партицирования как раз

Evgeniy
05.01.2018
15:10:22
еп, трейдоф между записью и чтением

Petr
05.01.2018
15:10:27
просто не вижу смысла это делать когда сейчас поиск работает за чистый логарифм

проблема в вставке новых данных

понятно, что придется идти на компромисс

Evgeniy
05.01.2018
15:11:07
ну у тебя этот чистый логарифм будет бесполезен, когда ты не сможешь индексы перестроить

если у тебя вставка 30 часов (а не пиздишь?) то как все данные перестроятся за 8

Petr
05.01.2018
15:13:40
если у тебя вставка 30 часов (а не пиздишь?) то как все данные перестроятся за 8
30 часов это если вставлять 40млн пачку туда где уже есть 1млрд В таблицу без индексов это делается​ за 1 час

Вот и выходит, что удалить индексы, вставить пачку, и построить индексы — выходит более интересный результ

Evgeniy
05.01.2018
15:14:44
ты не посчитал сколько они перестраиваться будут на 1ккк

Petr
05.01.2018
15:16:35
1 индекс у меня строился за 2 часа

7 будут за ≈14 надеюсь

Копирование таблицы где-то за 1 час

Evgeniy
05.01.2018
15:17:46
тогда не понимаю как так медленно вставляется

Petr
05.01.2018
15:17:55
Итого 1+1+17≈19-20 часов

честно говоря надо сделать более точные замеры

Google
Petr
05.01.2018
15:20:44
Иными словами весь вопрос в том, действительно ли в моем общем случае копирование+вставка+построение индексов быстрее чем просто вставка в таблицу с индексами

Известно, что вставка + построение точно быстрее

Evgeniy
05.01.2018
15:21:41
но и у тебя батч вставляющийся не маленький

ты ж не по одной строке вставляешь надеюсь

Petr
05.01.2018
15:23:15
а оперируя тем фактом что копирование — операция достаточно дешевая, то даже в случае просадки в другую сторону это не критично плюс в том что это "логически кажется более логичным"

ты ж не по одной строке вставляешь надеюсь
нет, конечно к слову, для заливки данных используется pgloader

Evgeniy
05.01.2018
15:24:16
и время мерил ты конечно же с его стороны

Petr
05.01.2018
15:25:14
конечно же :)

Evgeniy
05.01.2018
15:26:36
а загрузи плиз данные в пустую табличку и вставь из нее в рабочую сколько времени займет такая переливка

Petr
05.01.2018
15:26:36
там самый смак в том,что данные льются из csv и это аксиома

пустая без индексов, рабочая — с индексами, это же имеется в виду?

кстати, плюс работы с двумя копиями еще в том, что достаточно просто будет откатиться к старой версии если что-то сломалось впрочем, от этого и бэкапы защищают

Evgeniy
05.01.2018
15:31:50
да

Petr
05.01.2018
15:32:58
единственная проблемка — я сейчас дропнул все индексы в рабочей, придется построить :) по той причине что на текущий момент льется миллиард (кусками, еще около недели будут приходить пачки) новых строк "первоначальных", пока юзерам это недоступно

я её скопирую сейчас и построю все индексы на тест, сейчас там что-то около 750 000 000 строк

поставил на копирование :) заодно посмотрим за сколько скопируется

после построения индексов попробую вставить пачку 40 млн по указанной выше схеме в голую таблицу -> в рабочую(экспериментальную)

Evgeniy
05.01.2018
15:45:40
год назад Костя Книжников еще предлагал подходик [HACKERS] Batch update of indexes там патчик который никто не возьмет в ядро, но ты можешь ему написать

он в принципе как раз твою проблему решал

Google
Evgeniy
05.01.2018
15:55:02
судя по тому треду, у тебя вставка будет раз в 8 медленнее с индексами

то есть за 8 часов обернёшься, а не 30

но скоро узнаем

сможешь меня нотифайнуть?

Petr
05.01.2018
16:52:06
@netneladno копирование завершилось за 56 минут

Evgeniy
05.01.2018
16:52:52
кстати а какой у тебя меинтененс ворк мем?

Petr
05.01.2018
16:52:53
то есть за 8 часов обернёшься, а не 30
ого, вот это уже​ вполне приемлемо

ну это только в pgloader сессиях

Evgeniy
05.01.2018
16:55:33
оно там бесполезно же

Petr
05.01.2018
16:55:57
короче ставлю индексы делаться, заодно посмотрю точно за сколько они сейчас бахнуться

Evgeniy
05.01.2018
16:56:14
так сколько ты им памяти даешь пока они билдятся?

дай тоже 4

Petr
05.01.2018
16:56:29
оно там бесполезно же
я его эмпирически выставил)

Evgeniy
05.01.2018
16:57:30
так глядишь с параллельным созданием индекса через год, тебе реально будет быстрее ребилднуть за ночь

Petr
05.01.2018
16:57:57
не понял на счет "через год"

Evgeniy
05.01.2018
16:58:32
ну выйдет постгрес 11

Petr
05.01.2018
16:58:52
а, ну то через год...

Evgeniy
05.01.2018
16:58:53
create index будет параллелиться

Petr
05.01.2018
16:59:05
я немного не понимаю почему индексы нельзя кешировать

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