|
Как лучше организовать структуру очень большой таблицы?
|
|||
---|---|---|---|
#18+
Очередной вопрос новичка. Имеется таблица. В перспективе очень большая - несколько миллиардов строк(прирост от 7 до 20 млн в день) Структура таблицы: id bigserial BIGSERIAL NOT NULL, num int NOT NULL, phrase1 varchar(255) NOT NULL, phrase2 varchar(255) DEFAULT NULL, phrase3 varchar(255) DEFAULT NULL, phrase4 varchar(125) DEFAULT NULL, Нагрузка на таблицу - запись. Раз в неделю поиск по каждому столбцу phrase по всей таблице. Как лучше организовать таблицу? Имеет ли смысл включить секционирование RANGE id, скажем по 50 млн записей(в Mysql секционирование вроде бы немного ускоряло инсерт на больших таблицах). содержимое фраз - по сути хэши, так что секционирование возможно только по id. Индексы вешать на каждый столбец отдельно или один на все четыре? Может еще что посоветуете? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2021, 11:39 |
|
Как лучше организовать структуру очень большой таблицы?
|
|||
---|---|---|---|
#18+
Pitrovich Нагрузка на таблицу - запись. Раз в неделю поиск по каждому столбцу phrase по всей таблице. Pitrovich Индексы вешать на каждый столбец отдельно или один на все четыре? Вообще не делать индексы за отсутствием необходимости в них. range всего лишь по 50млн строк вам даст больше проблем, чем пользы. Как будут удаляться более ненужные старые данные? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2021, 13:36 |
|
Как лучше организовать структуру очень большой таблицы?
|
|||
---|---|---|---|
#18+
Melkij range всего лишь по 50млн строк вам даст больше проблем, чем пользы. Как будут удаляться более ненужные старые данные? То есть не делать секции вообще или делать больше, по 500 млн или 1 млрд? Данные удаляться не будут вообще. Максимальное количество возможных строк не превышает 5 млрд. Melkij Вообще не делать индексы за отсутствием необходимости в них. Если вообще не делать, запрос сильно тормозным не получится? Он и с индексом-то будет не шибко быстрый, на несколько часов, вероятно. Планируется запрос типа SELECT t1.id, t,1.num FROM table1 t1 INNER JOIN table2 t2 ON t1.phrase1 = t2.str Во второй таблице записей порядка миллиона. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2021, 13:54 |
|
Как лучше организовать структуру очень большой таблицы?
|
|||
---|---|---|---|
#18+
Филфактор на 100%. По идеи если будут патриции и запись будет вестись только в новую партицую, то автовакуум-у будет легче. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2021, 17:25 |
|
Как лучше организовать структуру очень большой таблицы?
|
|||
---|---|---|---|
#18+
Pitrovich, Для запроса раз в неделю что вы написали скорее всего индексы не нужны. Причина в том что они занимают кучу места, работ с ними идёт через случайное чтение и они замедляют запись в таблице, суммарно будет потеря а не выйгрыш. Партиционирование (ну где то по 100M строк) оправдано в такой ситуации будет как минимум для одной задачи - сильного ускорения pg_dump/pg_restore да и статистика по партициям адекватнее будет. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2021, 21:52 |
|
Как лучше организовать структуру очень большой таблицы?
|
|||
---|---|---|---|
#18+
Pitrovich Очередной вопрос новичка. Имеется таблица. В перспективе очень большая - несколько миллиардов строк(прирост от 7 до 20 млн в день) Структура таблицы: id bigserial BIGSERIAL NOT NULL, num int NOT NULL, phrase1 varchar(255) NOT NULL, phrase2 varchar(255) DEFAULT NULL, phrase3 varchar(255) DEFAULT NULL, phrase4 varchar(125) DEFAULT NULL, Нагрузка на таблицу - запись. Раз в неделю поиск по каждому столбцу phrase по всей таблице. Очень странная задача. Она тяготеет не к базам данным а к bigdata. Я-бы накапливал в течение недели данные в таблице и в конце - сбрасывал в файлы типа в формате Apache Orc. Код: sql 1. 2. 3.
В каждом файле будет примерно по 20 * 7 = 140 млн строк. Для поиска можно брать любые биг-датавские двигатели. Hive, Presto, Amazon Athena. Тут индексов не будет, но можно сыграть на свойствах самих данных. Если там лежат MD5 хеши то ввести синтетическое поле SUBSTR(phrase1,1,1) то это будет первая hex буква которая даст равномерное распределение на 16 партишенов для всех 140 млн строк. Для пущей скорости сравнения - добавить фильтры Блума на все phrases. Джойн со второй таблицей можно делать уже по факту завершения поиска по всему хранилищу. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2021, 00:01 |
|
Как лучше организовать структуру очень большой таблицы?
|
|||
---|---|---|---|
#18+
mayton Очень странная задача. Она тяготеет не к базам данным а к bigdata. Я-бы накапливал в течение недели данные в таблице и в конце - сбрасывал в файлы типа в формате Apache Orc. Спасибо. Дали очень много новой и полезной информации. С бигдата никогда не работал. Пошел читать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2021, 12:48 |
|
Как лучше организовать структуру очень большой таблицы?
|
|||
---|---|---|---|
#18+
Спросите у вашего провадера сразу есть такая услуга или нет. Я знаю что Google/Azure/Amazon продает такие штуки. В 2 мышко-клика можно поднять кластер. Если у вас - просто самодельная серверная стойка - то лучше наверное оставаться на постгресе. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2021, 13:33 |
|
Как лучше организовать структуру очень большой таблицы?
|
|||
---|---|---|---|
#18+
mayton, ну стойка-то самодельная, и запустил пока на постргрес. Но про бигдату уже читаю, местами грустно, местами захватывающе :) Скорее всего буду использовать, если не в этой задаче, то в других. Настроить что-то у себя не проблема, самое сложное пока-что - правильно применить. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2021, 18:37 |
|
|
start [/forum/topic.php?fid=53&msg=40095366&tid=1993876]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 248ms |
total: | 385ms |
0 / 0 |