powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
13 сообщений из 13, страница 1 из 1
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
    #40004404
buflefator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть табличка общим "сухим" весом под 30 Гб (если сложить все колонки всех строк, не считая индексов).
Схема таблички примитивна, вида:
Код: sql
1.
(INT, BIGINT, INT, BIGINT, VARCHAR(1024), BIGINT, INT)


primary key - первый INT, скажем.
Есть два-три B+-Tree индекса по каким-то из INT/BIGINT колонкам.
Никаких foreign key и вообще чего-то умнее тут сказанного. Одна таблица. Транзакций длиннее одного INSERT нет. Рассматриваем табличку буквально как key=value хранилку.

Нагрузка:
1. 100 insert/delete в секунду.
2. 8000 select в секунду.

SELECT-ы в тестах были примитивны и двух видов
Код: sql
1.
2.
1. WHERE id = 12345   // по id есть индекс)
2. WHERE id IN (1,3,5,7,9, ..., 1234) // штук по 10...150 значений



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, при которой новые туплы всегда добавляются в блок/страницу, а старые потом когда-нибудь вакууммируются, в результате если хватает апдейтов, то движок много перешагивает ненужных данных, а не занимается полезной работой, но когда апдейтов мало, может и пронесёт - такие слухи.

Просьба откомментировать техническую сторону вопроса (без обсуждения безумия самих задач).
Спасибо.
...
Рейтинг: 0 / 0
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
    #40004415
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buflefator, кмк, для таких узко специализированных задач (одна табличка фикс структуры - varchar на самом деле оно же, все в памяти) вундервафля на С++,Go,Rust и даже любом компилируемом языке будет работать на несколько порядков шустрее любой универсальной СУБД, хоть даже MyISAM.
К бабке не ходить. Вашей "вундервафле" даже индексация особо-то и не нужна при правильной вставке.

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

За универсальность надо платить. Порой дорого. И даже очень дорого.
...
Рейтинг: 0 / 0
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
    #40004417
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109, из обсуждения технической стороны, если таки НАДО перейти на универсальную СУБД, то смотреть в сторону оптимизации ключей и буферизаций так, чтобы типовые выборки оставались в ОЗУ. Тут в общем-то "оптимизировть" особо и нечего.
...
Рейтинг: 0 / 0
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
    #40004491
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПросьба откомментировать техническую сторону вопроса (без обсуждения безумия самих задач).
по идее постгрес будет лучше, у него hash индексы есть, что на ваших запросах критично.

сделать шардинг, чтобы глубина индексов была поменьше.

сделать репликацию и читать со слейвов.

выкрутить транзакционность в ноль.
...
Рейтинг: 0 / 0
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
    #40004492
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для mysql хорошо подойдет handler socket
...
Рейтинг: 0 / 0
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
    #40004497
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow, .. и получить реакцию в теже самые миллисекунды. Хеш-индексы есть и в Мускуле, там вопрос иной, кмк: что применить из типового, чтобы остались теже микросекунды и их доли .. кмк, ответ: вцндервафлю. ;)
...
Рейтинг: 0 / 0
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
    #40004503
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторХеш-индексы есть и в Мускуле
можно сказать что нету.
радикально короткие селекты ускоряет handler socket.
смешанную нагрузку ускоряет выкручивание в ноль транзакционности.

но как уже сказали под такие вырожденные случаи правильней брать инструмент заточенный под них.
...
Рейтинг: 0 / 0
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
    #40004540
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buflefator
Делаем транслятор запросов, который на лету пишет SELECT из меряет время ответа.

Дальше можно не читать, поскольку пойдёт сравнение скорости парсинга и оптимизации запроса с выполнением предварительно откомпилированного кода.
...
Рейтинг: 0 / 0
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
    #40004611
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buflefator

SELECT-ы в тестах были примитивны и двух видов
Код: sql
1.
2. WHERE id IN (1,3,5,7,9, ..., 1234) // штук по 10...150 значений



Вопрос чайника. Насколько эффективнее будет поместить список во временную таблицу и сджойнить ее с основной?
...
Рейтинг: 0 / 0
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
    #40004627
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paver,

ответ в вопросе насколько часто нужна именно эта строка. Как правило, а IN() попадает список внешнего ключа - "дай мне записи для этих пап" .. то есть практически разово. Но, если есть повторяемость, то да, можно ускорить. Зависит от длины перечисления и кол-ва повторов в среднем.
...
Рейтинг: 0 / 0
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
    #40005289
buflefator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
paver
buflefator

SELECT-ы в тестах были примитивны и двух видов
Код: sql
1.
2. WHERE id IN (1,3,5,7,9, ..., 1234) // штук по 10...150 значений



Вопрос чайника. Насколько эффективнее будет поместить список во временную таблицу и сджойнить ее с основной?

Абсолютно неэффективно, ведь список постоянно разный.
...
Рейтинг: 0 / 0
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
    #40005296
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buflefator,


Я думаю что вы убедитесь что ваше кастом решение будет быстрее. Если оно уже хорошо написано, изменений не просит, то вряд ли универсальный СУБД сравнится по скорости. Как у вас организована защита от потери данных?

С другой стороны, я слышал про оракл TimesTen, специализированную СУБД которая все делает в памяти и заточена на скоростные задачи. Сравнение с ней было бы интересней.

Когда речь о сотнях микротранзакций в секунду, скорость интерфейса имеет значение. Об этом, не дочитав до конца, выразился ув. Сибиряков.

Если ваше решение управляет таблицей в рамках одного процесса, стоимость интерфейса практически нулевая - вызов функции в компилированом коде без изменения контекста. С этим СУБД сравниться не могут.
...
Рейтинг: 0 / 0
MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
    #40005298
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если я правильно понял, ПК из INT, тогда индекс легко сводится к массиву с прямым выбором без поиска.

Если у вас так уже реализовано, быстрее этого ничего нет,
Селекты, вставка, удаление приравниваются к одному обращению к памяти, такое одноядерный Селерон 2010 года смог бы.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MySQL vs Postgres для простой SELECT-нагруженной highload таблички.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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