powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Большие таблицы и индексы
8 сообщений из 8, страница 1 из 1
Большие таблицы и индексы
    #39451373
snk002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
задача такая: среди прочего, есть таблица, потенциально на несколько млрд. записей. У нее 2 ключевых поля - IP (inet) и Port (integer), и еще одно текстовое (character varing 1000).
Выборка может быть по IP (или по маске), или по порту, или по обоим сразу. Вероятно, что потребуется еще и поиск по тексту. Я сделал индексы
CREATE UNIQUE INDEX ipport_idx ON tablex USING btree (ip, port)
CREATE INDEX txt1_idx ON tablex USING btree (txt1)
Собственно вопросы:
1. В таблице пока всего 250 млн. записей, но время вставки записей уже напрягает - пару миллионов добавляет минут 15-20. Думаю, дальше будет хуже, а потому вопрос, какие варианты индексов еще имеются? Будет ли быстрее, если создать на ip и port 2 отдельных индекса? И имеет ли смылс индекс на порт, где на весь миллиард записей будет несколько тыс. уникальных значений всего? В то же вреамя, для поля ip не лучше ли будет тип индекса gist?
2. Как дела с текстовым поиском? Есть ли вообще толк от btree? Просто в постгрес я пока не особо...
...
Рейтинг: 0 / 0
Большие таблицы и индексы
    #39451582
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
snk002,

как часто обновляются данные ?

или только вставляются ?
если да -- то вставка идёт диапазонами, или хаотично ?

на кой, простите , черт, индексируется текст(1000) б-тривом ?
может быть оно (индексирование) там совсем не надо ?
или индекс нужен, но, например, триграммный ?
каковы основные выборки по тексту из таблы ?
неужто по полной строке ?

и почему не партицировать табличку по диапазонам ip ?
...
Рейтинг: 0 / 0
Большие таблицы и индексы
    #39451902
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
snk002,

а на сколько быстрее вставка в таблицу без индексов? Вставляете с использованием COPY?

И, присоединяюсь к вопросу "вставка идёт диапазонами, или хаотично"? Кластеризована ли таблица по индексу?
...
Рейтинг: 0 / 0
Большие таблицы и индексы
    #39452033
snk002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,
1. Данные обновляются так: в ежедневно ручном реиме вливается по несколько кусков по несколько миллионов записей. Вставляются так: IP - хаотично, порт 1 на кусок.
2. Обновлений в данной таблице не предусмотрено. Разве что по какому-то случаю придется грохнуть ошибочно вставленный кусок в неск. миллионов разово
3. Текстовая выборка - тут я пока не очень в курсе. Но, судя по всему, будет выбираться как-то так:
like '%keyword%'
4. почему не партицировать табличку по диапазонам ip? Эм. не знаю. Не факт, что это правильно с т.з. использования. А где пр о партицирование
почитать?

LeXa NalBat,
Вставляю так: сначала COPY в однотипную таблицу без индексов, потом из нее insert select on conflict do nothing. Просто на случай кривых данных или внезапного появления дубля по уникальному индексу не хочется заново запускать.
Нет, не кластеризована. А чем мне это поможет? Я просто раньше преимущественно с MySQL/MyISAM работал, в основном, там много чего не было.
...
Рейтинг: 0 / 0
Большие таблицы и индексы
    #39452058
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
snk002,

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



про секционировани (оно же партицирование) много где. даже тут частенько (ищите поиском). есть даже тулза от поцгресс-про

в вашем случае напрашивается даже не просто партицирование, но шардинг. см. например . это, думаю, простейший пример.
...
Рейтинг: 0 / 0
Большие таблицы и индексы
    #39452085
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
snk002Вставляю так: сначала COPY в однотипную таблицу без индексов, потом из нее insert select on conflict do nothingЕсли на целевой таблице нет индексов, то такая вставка происходит быстрее? Намного?

snk002... в ежедневно ручном реиме вливается по несколько кусков по несколько миллионов записейТогда может быть при такой редкой массированной вставке индексы предварительно удалять и после - создавать?
...
Рейтинг: 0 / 0
Большие таблицы и индексы
    #39452192
snk002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,
А так понял, иаблицу надо создавать с OIDS? Я их не использовал. А стоит?
Шардинг зачем? Тут нет множества параллельных запросов. А вот про секционирование почитаю. кстати, еслть ли в реальности толк от pg_pathman?

LeXa NalBat
без - быстрее, конечно. но пересоздавать каждый раз индекс на миллиард записей - не вариант.
...
Рейтинг: 0 / 0
Большие таблицы и индексы
    #39452214
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
snk002qwwq,
А так понял, иаблицу надо создавать с OIDS?
не понял ход вашей мысли.

snk002Шардинг зачем? Тут нет множества параллельных запросов.можно распараллелить и 1 запрос. скажем по ип нельзя -- т.к. партиечка/шарда -- одна, но действительно тяжелые будут по тексту, для которых в любом случае придется поднимать множество индексов (или вообще сканить всё) по разным партициям. вот тут--то и будет распараллеливание(дисковой) шардами.
шардинг -- крайний случай партицирования.

snk002А вот про секционирование почитаю. кстати, еслть ли в реальности толк от pg_pathman? я обходился без него, своими силами. но при доступе по маскам , если партиций будет реально много -- pg_pathman, в теории, должен помогать.

или, возможно, придется написать хранимки -- динамически формировать запрос напрямую к партициям самостийно. в зависимости от сложности запросов по маскам.


но есть где-то тут и жалобы на более долгий старт процесса (соединения), при использовании pg_pathman, например.


партицирование позволит частично дропать/создавать индексы (только в "небольшой" партиции это будет не так дорого), приемлемо вакуумироваться, фризиться. и упростит прочее "обслуживание". но усложнит планирование развесистых запросов.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Большие таблицы и индексы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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