atis2345
@atis2345
PHP developer

Какую БД выбрать для проекта с более чем 3 миллионами insert/update в час?

Всем привет.

Есть проект в котором регулярно обновляются/добавляются данные в количестве более 3 миллионов. Суть проблемы в том что необходимо обновлять данные как можно быстрее.
Mysql/PostgreSql работет вроде нормально но при добавлении 5-10 индексов скорость вставки падает кардинально. Сначала скорость вставки около 10к за минуту при вставке пакетами ( по 10к за пакет). Потом она падает в ноль... Как обновлять данные вообще не известно ведь все строки уникальные.

Сейчас прикручен MongoDB. Скорость вставки ~1к в секунду. С обновлениями тоже все норм.
Напрягает монго тем что он бесструктурный.

Что посоветуют знатоки?
  • Вопрос задан
  • 413 просмотров
Решения вопроса 1
MetaAbstract
@MetaAbstract
Архитектор информационных систем и баз данных. Ful
На таких объемах это вопрос скорее не базы данных, а архитектуры обработки, разложенной по системам хранения.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
Cassandra. Одна нода на 7200RPM HDD (дедик в хетцнере) без труда справлялась с 300 записей/с со средней задержкой 3 мс (размер записей от 1MB :) ).
Ответ написан
Комментировать
terrier
@terrier
Ну, тут, есть несколько моментов
- Сама по себе скорость 1k инсертов в секунду не является запредельной ни для какого хранилища на нормальном железе.
Ну вот, например, постгрес.
- Вопрос: что вы с этими данными потом делаете?
Судя по десяти индексам вы одновременно из этой же таблицы активно читаете и это, наверное, не совсем разумно.
Если у вас куча инсертов приходят всплесками, то проще сначала вставить данные в таблицу без индексов ( prepared statements, по X строк в стейтменте, Y стейтментов в транзакции, где X и Y надо твикать в зависимости от железа ), а потом уже построить индексы. Если возможно, может быть вообще сделать "COPY ... BINARY " вместо инсертов.

Можно также копировать в UNLOGGED таблицу без индексов, а потом либо сделать ее LOGGED, либо спокойненько скопировать уже в нормальные таблицы из которых уже читать.

>> Потом она падает в ноль

Чекпоинт видимо пришел. Его можно отложить в настройках
Ответ написан
safenoob
@safenoob
Советую писать в одну базу или текстовые документы, а из них постепенно подтягивать всё в другую базу для чтения (уже с индексами)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы