Задать вопрос

Какую СУБД лучше выбрать?

Что есть:
Имею прайс лист бесконечной длины (нужен шардинг). В качестве первичного ключа используется unsigned int64, который является некоторой хеш-суммой всей записи (для уникальности). Он всегда известен заранее (перед вставкой/обновлением).
Что нужно с этим делать:
Очень много вставлять/обновлять, выбирать записи по ПК. Разбивать на шарды, реплицировать мастер-слейв. СУБД должна иметь клиентские либы для C/C++.

Когда проект начинался, над большими объёмами данных никто особо не задумывался, используется Mysql (innodb). Теперь система кряхтит под нагрузкой, надо менять архитектуру.
Я понимаю, что в данной ситуации нужно использовать NoSQL, и большинство будет мне рекомендовать MongoDB. С этой СУБД я немного работал. Но меня очень не порадовали скорости её работы. Возможно, я не умею её настраивать. Тогда дополнительный вопрос: где можно почитать о настройке?

И ещё буду очень благодарен, если примерно (хотя бы порядок) сориентируете меня по цифрам скорости вставки и выборки, которых можно достичь (VPS Xeon 4 Core, 64 GB DDR4 ECC, SSD RAID-1)

Сейчас вставка/обновление 5000 записей занимает от 5 до 30 секунд! Это очень долго!

Спасибо!
  • Вопрос задан
  • 1436 просмотров
Подписаться 8 Оценить Комментировать
Решения вопроса 1
voidnugget
@voidnugget
Программист-прагматик
Эмм... для начала нужно выучить мат часть и разобраться что такое B-tree и R-tree и как они фигурируют в современных СУБД, разобраться что такое "6ая нормальная форма" (второй курс универа).

Если это мускуль у которого "бесконечная длинна" таблички - от 200Гб и до 1Тб, то достаточно просто использовать ENGINE ARCHIVE c R-tree индексом. В противном случае (если меньше 200Гб) нужно (учить мат часть и вправлять мозги) рефакторить базу. Лучше слезть с MySQL на PostgreSQL, а вот c MongoDB - куча проблем. Стандартные СУБД на основе B-tree для баз от 200Гб+ не подходят. MySQL исключение из-за модульности системы хранения, имеется ввиду ENGINE ARCHIVE, но так как там нет T-tree - нужен нормальный кэш. PostgreSQL даже похуже будет - нужно ковырять различные расширения типа cstore_fdw и т.п.

uint64 ID'шник в виде хэша - очень спорное решение, даже если и предположить что в какой-то вселенной нет коллизий, то точно не в этой, и дополнительно нужно прогонять фильтр Блума. Хотя, лучше всего, просто использовать композитные ключи и не заморачиваться.

Можно ещё попробовать HBase в Apache Phoenix обернуть, там уже есть всё готовое - и фильтр Блума и индексация, можно даже X-tree оформить. HBase, кстати, хорошо масштабируется на запись, а Cassandra, наоборот, - на чтение.

Шардинг (партицирование) и репликацию нужно оформлять когда схема хорошо нормализирована, и когда более-менее ясно какие таблички нужно масштабировать на запись, а какие на чтение - где-то нужен CA, где-то CP, а где-то AP... (CAP теорема)

Очень весело в PostgeSQL писать сишные функции для агрегации в материализованные представления, особенно весело с GPGPU.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
TheCreator
@TheCreator
Бездельник
У вас есть уникальный айди сущности, у вас нет работы с записями (только получение/вставка по айди), что тут можно использовать кроме redis? Который спокойно обрабатывает сотни тысяч запросов в секунду?
try.redis.io - посмотрите и восхититесь.
redis.io/clients - клиенты тут, подо что хотите.
redis.io/documentation - много и интересно, как настраивать.
Ответ написан
@beduin01
Попробуйте ArangoDB, я на нее с MySQL перешел. Пока очень доволен.
Ответ написан
Комментировать
Соглашусь с Дмитрий Авилов - если выборка по единственному ключу, то рел. СУБД ни к чему. Монга не единственное возможное решение, поэкспериментируйте с другими NoSQL базами.
Ответ написан
opium
@opium
Просто люблю качественно работать
Вставляйте скопом а не по одной записи ну и если по одной то выключайте индексы а потом включайте
Ответ написан
@napolskih
Попробуйте tarantool. Это очень перспективная субд похожая на редис, но с очень широкими возможностями. Из минусов - не такая популярная и широкоиспользуемая.
Ответ написан
Ваш ответ на вопрос

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

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