2015-05-06 3 views
0

Я пытаюсь создать создание облачной системы (IaaS), которая будет собирать данные от датчиков (деятельность, связанная с загрязнением воды), и при определенных событиях решает обработать данные для конкретный датчик. Характеристики данных: 1. Для каждого датчика данные отправляются один раз каждые пару дней (до 6 раз в месяц) 2. каждое считывание датчика содержит около 5000 событий, которые заключены в 50-100 сообщений, которые отправляются на сервер (такой «сеанс» занимает около 20 минут, когда сообщения отправляются каждые 5 секунд). 3. Я строю систему для обработки скорости 30 000 сообщений в секунду. 4. Обработка данных не должна быть в режиме реального времени, у меня есть около 10 минут, как только «сессия» будет завершена для обработки. 5. 90% сеансов не интересны и могут быть выброшены после их завершения. другие 10% имеют событие или событие, инкапсулированные в сообщениях, которые в соответствии с ними мне нужно решить, нужно ли мне обрабатывать все данные сеанса и отправлять предупреждение на датчик о наличии загрязнения.Я не уверен, какой NoSQL подходит для моего сценария

Я создал инструмент, который генерирует 5000 сообщений в секунду, и я пытаюсь выяснить, какая база данных будет наиболее оптимальной для моего сценария. Эти базы данных я имею в виду, чтобы попробовать:

  1. Cassandra - Я спасу для каждой сессии в сборе памяти ключей. ключи предназначены для сообщений, которые хранятся в cassandra. Как только я обнаруживаю сообщение, содержащее плохие показания, мне нужно будет вытащить все остальные сообщения в «сеансе» и обработать их (это означает, что 50-100 запросов к кассандре). Моя забота здесь о производительности записи (поскольку у меня много операций чтения и записи) + У меня нет хорошей стратегии для удаления 90% не необходимых сеансов.

  2. Couchbase - Я сохраню документ для каждой «сессии» в соответствии с идентификатором sensorID и добавит каждое сообщение в документ. Как только я обнаруживаю сообщение, содержащее плохие показания, мне нужно будет отправить только один запрос для документа. Моя забота здесь о производительности чтения.

  3. Redis - использовать его как cassandra. Я предполагаю, что производительность будет лучше, но мне нужно будет обрабатывать шардинг и репликацию данных себя, чтобы не достичь предела памяти

Я хотел бы услышать, какой вариант будет наиболее подходящим

спасибо

+1

Couchbase имеет большую производительность чтения (я думаю, что он превосходит Cassandra), см http://blog.couchbase.com/dissecting-nosql-benchmark – user1697575

ответ

-1

Это интересный вопрос. Если мы перейдем к основам теоремы CAP и попытаемся выбрать одну БД на основе необходимости согласованности, доступности и допустимости разделов.

Для высокой согласованности и доступности - выберите MySQL, PostgreSQL, Greenplum, Vertica, Neo4J.

Для обеспечения высокой доступности и раздела tolerance- использования Кассандры, Волдеморта, Динамо, CouchDB, Riak

Для высокой консистенции и раздела tolerance- использования HBase, Redis, MongoDB, BerkeleyDB, BigTable

Так мой Голосование за Кассандру здесь.

+1

Вы не упомянули Couchbase. CouchDB не является Couchbase. – user1697575

2

Рег. Redis - вы можете использовать DAAS (данные как услугу). Служба будет обслуживать для вас все экземпляры, кластеры, масштабирование, сохранение данных и настройки высокой доступности. Одним из примеров является Redis Cloud by Redis Labs