|
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
|
|||
---|---|---|---|
#18+
Есть табличка общим "сухим" весом под 30 Гб (если сложить все колонки всех строк, не считая индексов). Схема таблички примитивна, вида: Код: sql 1.
primary key - первый INT, скажем. Есть два-три B+-Tree индекса по каким-то из INT/BIGINT колонкам. Никаких foreign key и вообще чего-то умнее тут сказанного. Одна таблица. Транзакций длиннее одного INSERT нет. Рассматриваем табличку буквально как key=value хранилку. Нагрузка: 1. 100 insert/delete в секунду. 2. 8000 select в секунду. SELECT-ы в тестах были примитивны и двух видов Код: sql 1. 2.
INSERT/UPDATE примерно похожи. Удалить что-то с данным id. Проапдейтить одну колонку у данного id. Сейчас данные хранятся совсем не в MySQL, а в какой-то космической фундервафле, реализованной давно на каком-то голом C++/Go/Rust и живёт inmemory, практически не потребляет проца и отвечает за пол микросекунды и потянет ещё примерно 1000-кратный рост нагрузки. Хотим эксперимент чтобы незнаю что. Поржать (над собой), поисследовать, посмотреть на мир шире, "нам сильно интересно и нечего делать", ваш вариант Заливаем эту "табличку" в реальную табличку MySQL (mariadb) с вышеописанной схемой и, например, в PostgreSQL. Делаем транслятор запросов, который на лету пишет SELECT из меряет время ответа. Если тестировать одни select, когда данные только что залиты и индексы никак не побиты рандомными изменениями и нет никаиких U-, D-операций, то оно медленнее текущего решения, но до одной миллисекунды чаще всего таки укладываются. Иногда что-то стреляет куда-то в небеса, но можно пренебречь, верю что можно положить всё в память, поиграться с параметрами, почитать пару десятков чужих диссертаций по настройке MySQL и сделать лучше. В связи с этим вопросы примерно такие: 1. Что на таком "селектном" сценарии из параметров полезно будет поизучать/покрутить? 2. Да, читал, что для чтений оптимален движок MyISAM. Стоит его пробовать или я читал что-то совсем древнее и современные InnoDB-версии сами умные и там сглажена эта разница? 3. Мы не пробовали PostgreSQL, но может ли кто-то наванговать что мы там увидим по latency нашего селекта в описанном сценарии? Знаю там все боятся разряженности из-за реализации MVCC, при которой новые туплы всегда добавляются в блок/страницу, а старые потом когда-нибудь вакууммируются, в результате если хватает апдейтов, то движок много перешагивает ненужных данных, а не занимается полезной работой, но когда апдейтов мало, может и пронесёт - такие слухи. Просьба откомментировать техническую сторону вопроса (без обсуждения безумия самих задач). Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2020, 03:24 |
|
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
|
|||
---|---|---|---|
#18+
buflefator, кмк, для таких узко специализированных задач (одна табличка фикс структуры - varchar на самом деле оно же, все в памяти) вундервафля на С++,Go,Rust и даже любом компилируемом языке будет работать на несколько порядков шустрее любой универсальной СУБД, хоть даже MyISAM. К бабке не ходить. Вашей "вундервафле" даже индексация особо-то и не нужна при правильной вставке. Иное дело, если задача предполагается к усложнению .. внешний ключ и пара таблиц, запросы где надо выдернуть результат из дочерней таблицы, а в этой только посмотреть условия и т.д. За универсальность надо платить. Порой дорого. И даже очень дорого. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2020, 06:33 |
|
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
|
|||
---|---|---|---|
#18+
Arhat109, из обсуждения технической стороны, если таки НАДО перейти на универсальную СУБД, то смотреть в сторону оптимизации ключей и буферизаций так, чтобы типовые выборки оставались в ОЗУ. Тут в общем-то "оптимизировть" особо и нечего. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2020, 06:35 |
|
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
|
|||
---|---|---|---|
#18+
авторПросьба откомментировать техническую сторону вопроса (без обсуждения безумия самих задач). по идее постгрес будет лучше, у него hash индексы есть, что на ваших запросах критично. сделать шардинг, чтобы глубина индексов была поменьше. сделать репликацию и читать со слейвов. выкрутить транзакционность в ноль. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2020, 11:52 |
|
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
|
|||
---|---|---|---|
#18+
для mysql хорошо подойдет handler socket ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2020, 11:53 |
|
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
|
|||
---|---|---|---|
#18+
ScareCrow, .. и получить реакцию в теже самые миллисекунды. Хеш-индексы есть и в Мускуле, там вопрос иной, кмк: что применить из типового, чтобы остались теже микросекунды и их доли .. кмк, ответ: вцндервафлю. ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2020, 12:07 |
|
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
|
|||
---|---|---|---|
#18+
авторХеш-индексы есть и в Мускуле можно сказать что нету. радикально короткие селекты ускоряет handler socket. смешанную нагрузку ускоряет выкручивание в ноль транзакционности. но как уже сказали под такие вырожденные случаи правильней брать инструмент заточенный под них. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2020, 12:20 |
|
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
|
|||
---|---|---|---|
#18+
buflefator Делаем транслятор запросов, который на лету пишет SELECT из меряет время ответа. Дальше можно не читать, поскольку пойдёт сравнение скорости парсинга и оптимизации запроса с выполнением предварительно откомпилированного кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2020, 13:47 |
|
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
|
|||
---|---|---|---|
#18+
buflefator SELECT-ы в тестах были примитивны и двух видов Код: sql 1.
Вопрос чайника. Насколько эффективнее будет поместить список во временную таблицу и сджойнить ее с основной? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2020, 16:53 |
|
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
|
|||
---|---|---|---|
#18+
paver, ответ в вопросе насколько часто нужна именно эта строка. Как правило, а IN() попадает список внешнего ключа - "дай мне записи для этих пап" .. то есть практически разово. Но, если есть повторяемость, то да, можно ускорить. Зависит от длины перечисления и кол-ва повторов в среднем. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2020, 17:34 |
|
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
|
|||
---|---|---|---|
#18+
paver buflefator SELECT-ы в тестах были примитивны и двух видов Код: sql 1.
Вопрос чайника. Насколько эффективнее будет поместить список во временную таблицу и сджойнить ее с основной? Абсолютно неэффективно, ведь список постоянно разный. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2020, 18:51 |
|
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
|
|||
---|---|---|---|
#18+
buflefator, Я думаю что вы убедитесь что ваше кастом решение будет быстрее. Если оно уже хорошо написано, изменений не просит, то вряд ли универсальный СУБД сравнится по скорости. Как у вас организована защита от потери данных? С другой стороны, я слышал про оракл TimesTen, специализированную СУБД которая все делает в памяти и заточена на скоростные задачи. Сравнение с ней было бы интересней. Когда речь о сотнях микротранзакций в секунду, скорость интерфейса имеет значение. Об этом, не дочитав до конца, выразился ув. Сибиряков. Если ваше решение управляет таблицей в рамках одного процесса, стоимость интерфейса практически нулевая - вызов функции в компилированом коде без изменения контекста. С этим СУБД сравниться не могут. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2020, 19:36 |
|
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
|
|||
---|---|---|---|
#18+
Если я правильно понял, ПК из INT, тогда индекс легко сводится к массиву с прямым выбором без поиска. Если у вас так уже реализовано, быстрее этого ничего нет, Селекты, вставка, удаление приравниваются к одному обращению к памяти, такое одноядерный Селерон 2010 года смог бы. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2020, 19:54 |
|
|
start [/forum/topic.php?fid=47&msg=40004491&tid=1828361]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
134ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 250ms |
0 / 0 |