@zuart
... уже и не знаю, нуп, похоже ...

Какую БД использовать для проекта?

Приветствую местный народ.

В общем после сбора информации, проб и ошибок с использованием сторонних систем логгирования все-таки было принято решение попробовать собрать что-то более подходящее самостоятельно. На текущий момент получилось следующее:
- один инстанс логгера может принимать данные по любому из настроеных каналов: UnixSocket, WebSocket, HTTP
- в качестве БД для занесения информации для тестов использовали Монго в ее базовой настройке
- максимальную скорость принятия и внесения в БД поступающей информации получили через UnixSocket - около 100тыс записей в сек (причем есть все основания считать "узким местом" Монгу)
- клиентская библиотека в UnixSocket в пиковых тестах успевала "напихивать" до 500тыс событий в сек

В принципе скорость в штатном режиме будет гораздо ниже, думаю и до 20тыс в сек не дойдет (до 50тыс пиковые нагрузки). Но встал следующие вопросы, требующие решения (возможно, некоторые мои предположения будут нупскими):

1. Монго, конечно, быстро принимает записи, но работать потом по ней с выборками будет, наверное, очень проблематично, т.к. если хранить все данные в одной коллекции, она вырастет до неимоверных размеров. Рассматриваем вариант "посуточного" хранения информации - в 00:00 просто переименовать рабочую коллекцию в суточную. Но тут появляются сомнения, а можно ли потом эффективно работать по нескольким коллекциям с выборками/фильтрациями/слияниями?

2. Если отказаться от Монго, то какая из РСУБД в состоянии "принимать в себя" около 100тыс записей в сек? Речь не про инсерты, а именно про сами записи, т.к. вставка производится не "построчно", а блоками размер которых зависит от объема поступающей информации (если мало - малыми порциями, если поток выше - порции больше).

3. Может какой-то смешанный вариант реализовать, с системой переноса и "нормализации" из Монго в РСУБД. Но тут встает вопрос оперативности. Если сервис логгера будет писать в Монго, а некий переносчик раз в минуту будет все забирать из Монго и складировать в РСУБД, будет ли он успевать за минуту переносить все то, что будет накоплено в Монго, даже если брать большими блоками? Ну и плюс появится некоторая задержка с отображении поступающей информации, а иногда нужно "реалтайм" мониторить поступление информации от какого-то из клиентов и сразу же ее отображать в гуевке. Придется шаманить с межпроцессовым взаимодействием логгера и ГУИ.

Буду благодарен за любой совет/предложение по существу.

ЗЫ. Критика, конечно, тоже приветствуется, но в рамках приличия =))
  • Вопрос задан
  • 868 просмотров
Решения вопроса 1
dimonchik2013
@dimonchik2013
non progredi est regredi
Пригласить эксперта
Ответы на вопрос 4
2ord
@2ord
Cassandra хорошо работает в режиме массивной записи. CQL вместо SQL.
https://jaxenter.com/evaluating-nosql-performance-...
https://dzone.com/articles/efficient-cassandra-write
Есть также совместимая с ней ScyllaDB.
Хотя может это излишество.
Ответ написан
zoonman
@zoonman
⋆⋆⋆⋆⋆
1. MongoDB вам и миллион записей создаст в секунду, используйте шардинг и будет вам счастье.
2. Использование MongoDB для хранения логов так себе решение поскольку она придумана не для этого.
3. Смотрите в сторону ELK. Не нравится оно, есть https://prometheus.io/docs/introduction/overview/ + Graphana. Еще есть graylog.
Опций много.
Ответ написан
Монго, конечно, быстро принимает записи, но работать потом по ней с выборками будет, наверное, очень проблематично
Ага-ага блокировки всякие.

какая из РСУБД в состоянии "принимать в себя" около 100тыс записей в сек?
Правильно настроенный MySQL. Повторяю, не MariaDB, а MySQL.
Ещё в версии 5.7 можно было сделать так чтобы он работал почти как NoSQL база.

Если сервис логгера будет писать в Монго, а некий переносчик раз в минуту будет все забирать из Монго и складировать в РСУБД, будет ли он успевать за минуту переносить все то, что будет накоплено в Монго, даже если брать большими блоками?
Так и не нашёл такой переносчик. Разве что самому писать.

Буду благодарен за любой совет/предложение по существу.
arangodb
Ответ написан
@s4kro
Лучшим опен сорс решением будет, на мой взгляд, для данной задачи будет взять elastic стак + RabbitMQ/Kafka (гибкая фильтрация + симпотная вебмордашка прилагаются).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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