2013-06-12 1 views
0

я следующий сценарий:Какой подход и базы данных для использования в производительности критическое решение

  • Около 70 миллионов оборудования посылают сигнал каждые 3 ~ 5 минут до сервера, отправившего его идентификатор, статус (онлайн или оффлайне), IP, местоположение (широта и долгота), родительский узел и другая информация.

  • Другая информация может быть не в стандартном формате (поэтому для меня нет схемы), но мне все равно нужно ее запросить.

  • Оборудование может исчезнуть в течение некоторого времени (или навсегда), не отправив сигналы в процессе. Поэтому мне нужно «забыть» оборудование, если они не отправили сигнал за последние X дней. Также новое оборудование может выходить в интернет в любое время.

  • Мне нужно запросить все эти данные. Как знать, сколько оборудования находится в автономном режиме в определенном регионе или более диапазон IP. Одновременно будет запущено много запросов.

  • Некоторые из запросов должны выполняться быстро (менее 3 минут на запрос) и одновременно с обновлением базы данных. Поэтому мне нужны индексы на основных атрибутах (id, status, IP, location и parent node). Результаты запроса не должны быть на 100% точными, возможная консистенция хороша до тех пор, пока это не займет слишком много времени (более 20 минут на avarage), чтобы они отображались в результатах запросов.

  • Мне не нужен Настойчивость вообще, если питание гаснет, можно потерять все.

Учитывая все это, я думал, используя NoSQL подход может быть MongoDB или CouchDB, так как у меня есть опыт работы с MapReduce и Javascript, но я не знаю, какой из них лучше для моей проблемы (я тяготеющие к CouchDB) или если они подходят для решения этой огромной рабочей нагрузки. Я даже не знаю, действительно ли мне нужна «традиционная» база данных, так как мне не нужна постоянство на диске (может быть, подход с основной памятью будет лучше?), Но мне нужен способ легко создавать пользовательские запросы.

Основная проблема, которую я обнаружить следующие:

  • нужно вставить/обновить множество кортежей очень быстро, и я не знаю, заранее, если сигнал я получаю уже в базе данных или нет , Почти все сигналы будут в том же состоянии, в каком они были в последний раз, так что, возможно, запрос по id и проверить, изменился ли кортеж, если ничего не делать, если он обновил?

  • Формирование автономного оборудования. Пакетное задание, которое работает в ночное время , удаляет истекшие кортежи, решает эту проблему.

  • В то же время будет работать не так много запросов, но им нужно для быстрого запуска. Поэтому я предполагаю, что мне нужен кластер, который выполняет одиночный запрос на нескольких узлах кластера (делает ли CouchDB MapReduce разделение рабочей нагрузки на несколько узлов кластера?).Я не enterily уверен, что мне нужен кластер, хотя, может ли одна более дорогая машина обрабатывать всю нагрузку?

  • Раньше я никогда не использовал систему noSQL, но у меня есть теоретические знания предмета.

ответ

1

Имеет ли это смысл?

Apache Flume для сбора сигналов.

Это распределенная, надежная и доступная система для эффективного сбора, объединения и перемещения большого количества данных журнала из разных источников в централизованное хранилище данных. Простота настройки и масштабирования. Храните данные в HDFS в виде файлов с использованием Flume.

Hive для пакетных запросов.

Карта файлов данных в HDFS в качестве внешних таблиц в хранилище улья. Записывайте SQL-запросы с использованием HiveQL всякий раз, когда вам нужна автономная пакетная обработка.

HBase для случайных чтений/записи в режиме реального времени.

Поскольку HDFS, будучи FS, не имеет возможности для чтения/записи, вам понадобится DB для этой цели. Глядя на ваш случай использования, HBase кажется мне хорошим. Я бы не сказал MongoDB или CouchDB, так как вы не имеете дело с документами, и обе эти базы данных, ориентированные на документы.

Impala для быстрых интерактивных запросов.

Impala позволяет запускать быстрые интерактивные SQL-запросы непосредственно на ваших данных, хранящихся в HDFS или HBase. В отличие от Hive, он не использует MapReduce. Вместо этого он использует мощь MPP, поэтому он хорош для материалов в реальном времени. И он прост в использовании, поскольку он использует те же метаданные, синтаксис SQL (Hive SQL), драйвер ODBC и т. Д. Как Hive.

НТН

0

В зависимости от типа анализа, CouchDB, HBase из Flume может быть все, быть хорошим выбором. Для строго числовых данных «write-once» графит данных является очень популярным решением с открытым исходным кодом.

Смежные вопросы