NoSQL для чтения временных рядов / зарегистрированных данных прибора, которые также версируются

Мои данные

В первую очередь это данные мониторинга, передаваемые в форме отметки времени: значение для каждого отслеживаемого значения на каждом отслеживаемом устройстве. Он регулярно собирается по разным устройствам и по множеству отслеживаемых значений.

Кроме того, у него есть необычная особенность, заключающаяся в том, что многие из этих значений данных извлекаются из источника, а вычисления время от времени меняются. Это означает, что мои данные эффективно версируются, и мне нужно иметь возможность просто вызывать только данные из самой последней версии расчета. Примечание. Это не версионирование, при котором старые значения перезаписываются. У меня просто есть временные отметки, после которых данные меняют свое значение.

Мое использование

В дальнейшем у меня будут различные варианты использования неопределенных данных / машинного обучения для данных. Пока не совсем ясно, каково это использование, но ясно, что я буду писать весь последующий код на Python. Кроме того, у нас очень маленький магазин, поэтому я действительно могу справиться только с такой большой сложностью в настройке, обслуживании и взаимодействии с нижележащими приложениями. У нас просто не так много людей.

Выбор

Мне не разрешено использовать СУБД SQL для хранения этих данных, поэтому мне нужно найти правильное решение NoSQL. Вот что я нашел на данный момент:

  1. Cassandra
    • Looks totally fine to me, but it seems like some of the major users have moved on. It makes me wonder if it's just not going to be that much of a vibrant ecosystem. This SE post seems to have good things to say: Cassandra time series data
  2. Accumulo
    • Again, this seems fine, but I'm concerned that this is not a major, actively developed platform. It seems like this would leave me a bit starved for tools and documentation.
  3. MongoDB
    • I have a, perhaps irrational, intense dislike for the Mongo crowd, and I'm looking for any reason to discard this as a solution. It seems to me like the data model of Mongo is all wrong for things with such a static, regular structure. My data even comes in (and has to stay in) order. That said, everybody and their mother seems to love this thing, so I'm really trying to evaluate its applicability. See this and many other SE posts: What NoSQL DB to use for sparse Time Series like data?
  4. HBase
    • This is where I'm currently leaning. It seems like the successor to Cassandra with a totally usable approach for my problem. That said, it is a big piece of technology, and I'm concerned about really knowing what it is I'm signing up for, if I choose it.
  5. OpenTSDB
    • This is basically a time-series specific database, built on top of HBase. Perfect, right? I don't know. I'm trying to figure out what another layer of abstraction buys me.

Мои критерии

  • Открытый источник
  • Хорошо работает с Python
  • Подходит для небольшой команды
  • Очень хорошо задокументировано
  • Имеет специальные функции для использования упорядоченных данных временных рядов
  • Помогает мне решить некоторые из моих проблем с версионными данными

Итак, какая база данных NoSQL действительно может помочь мне удовлетворить мои потребности? Это может быть что угодно, из моего списка или нет. Я просто пытаюсь понять, на какой платформе на самом деле есть код, а не только шаблоны использования, которые поддерживают мои сверхконкретные, хорошо понятые потребности. Я не спрашиваю, какой из них лучше, а какой круче. Я пытаюсь понять, какая технология может наиболее естественно хранить и обрабатывать этот тип данных.

Есть предположения?


person jsmith54    schedule 23.06.2012    source источник
comment
Похоже, у вас может возникнуть фундаментальная проблема, если мне не разрешено использовать СУБД SQL для хранения этих данных. Выбор технических решений должен быть свободным от предвзятости, а решения по технологическим продуктам / услугам должны приниматься на основе ценностного предложения для рассматриваемой проблемы.   -  person Norman H    schedule 06.08.2013


Ответы (4)


Похоже, вы описываете один из наиболее распространенных вариантов использования Cassandra. Данные временных рядов в целом часто очень хорошо подходят для модели данных cassandra. В частности, многие люди хранят данные метрик / датчиков, как вы описываете. Видеть:

Что касается вашего беспокойства по поводу сообщества, я не уверен, что производит у вас такое впечатление, но существует довольно большое сообщество (см. Irc, списки рассылки), а также растущее число пользователей cassandra.

http://www.datastax.com/cassandrausers

Что касается ваших критериев:

  • Open source
    • Yes
  • Works well with Python
  • Appropriate for a small team
    • Yes
  • Very well documented
  • Has specific features to take advantage of ordered time series data
    • See above links
  • Helps me solve some of my versioned data problems
    • If I understand your description correctly you could solve this multiple ways. You could start writing a new row when the version changes. Alternatively you could use composite columns to store the version along with the timestamp/value pair.

Я также отмечу, что Accumulo, HBase и Cassandra имеют по существу одинаковую модель данных. Вы по-прежнему обнаружите небольшие различия в модели данных в отношении конкретных функций, которые предлагает каждая база данных, но основы будут такими же.

Большей разницей между этими тремя будет архитектура системы. Cassandra заимствует свою архитектуру у Dynamo от Amazon. Все серверы в кластере одинаковы, и их довольно просто настроить. HBase и Accumulo или несколько прямых клонов BigTable. У них больше движущихся частей и потребуется больше настроек / типов серверов. Например, настройка серверов определенных типов HDFS, Zookeeper и HBase / Accumulo.

Отказ от ответственности: я работаю в DataStax (мы работаем с Cassandra)

person nickmbailey    schedule 23.06.2012
comment
Я ценю качественный ответ. Ваши ссылки действительно дают мне гораздо лучшее представление о том, как я бы использовал это, если бы я использовал Кассандру для этой проблемы. - person jsmith54; 24.06.2012

У меня есть опыт работы только с Cassandra и MongoDB, но мой опыт может кое-что добавить.

Так что вы в основном делаете метрики, основанные на времени?

Хорошо, если я правильно понимаю, вы используете временную метку в качестве механизма управления версиями, чтобы вы запрашивали определенную временную метку, скажем, чтобы получить последний расчет, который вы использовали на основе идентификатора метрики или чего-то еще, и получаете ts DESC и снимаете первую строку?

Иногда это звучит как версионное хранилище значений ключей.

Имея это в виду, я бы, вероятно, не рекомендовал ни один из двух, которые использовал.

Кассандра слишком жесткая и слишком наследственная, она также основана на том, как вы запрашиваете, до такой степени, что вы можете сделать только одну сводную диаграмму данных из (я полагаю, вы хотите построить график этих показателей) семейства столбцов, которое безумно, поэтому я отказался от него . Что касается поиска (для чего Facebook его использует и только), то он тоже не такой уж и впечатляющий.

MongoDB, ну, я люблю MongoDB, и я являюсь элитой группы пользователей, и он мог бы работать здесь, если бы вы не использовали политику хранения значений ключа, но, в конце концов, если вы не настроены, и вам не нравится технология тогда позвольте мне быть самым первым, кто скажет: не используйте ее! Вы не будете хороши в технологиях, которые вам не нравятся, поэтому держитесь от них подальше.

Хотя я бы представлял, как это происходит в Монго, примерно так:

{
_id: ObjectID(),
metricId: 'AvailableMessagesInQueue',
formula: '4+5/10.01',
result: NaN
ts: ISODate()
}

И вы запрашиваете последнюю версию своего расчета:

var results = db.metrics.find({ 'metricId': 'AvailableMessagesInQueue' }).sort({ ts: -1 });
var latest = results.getNext();

В результате будет выведена структура документа, которую вы видите выше. Не зная больше о том, как именно вы хотите запрашивать, об общем сценарии сервера, приложения и т. Д., Это лучшее, что я могу придумать.

Мне нравится эта ветка на HBase: http://mail-archives.apache.org/mod_mbox/hbase-user/201011.mbox/%3C5A76F6CE309AD049AAF9A039A39242820F0C20E5@sc-mbx04.TheFacebook.com%3E

Что может быть интересно, похоже, это подтверждает аргумент о том, что HBase - хорошее хранилище значений ключей, основанное на времени.

Я лично не использовал HBase, поэтому не принимайте всерьез то, что я говорю об этом ....

Надеюсь, я что-то добавил, в противном случае вы могли бы попытаться сузить критерии, чтобы мы могли ответить на более конкретные вопросы.

Надеюсь, это немного поможет,

person Sammaye    schedule 23.06.2012
comment
Отличный ответ в тех областях, которые вы знаете. Спасибо за ответ. Я думаю, что многие концепции управления версиями просто неприменимы к тому, над чем я работаю, включая ваш поток HBase. Я не уверен, почему мое использование так странно. Я не меняю существующие значения, я просто переключаюсь на новый поток вычислений. В любом случае, я ценю ваши взгляды, Кассандра и Монго. - person jsmith54; 23.06.2012

Это не плагин для какой-то конкретной технологии, но эта статья о хранилище временных рядов с использованием MongoDB может предоставить другой способ размышления о хранении больших объемов «сенсорных» данных.

http://www.10gen.com/presentations/mongodc-2011/time-series-data-storage-mongodb

person Norman H    schedule 09.07.2013

База данных временных рядов Axibase

  • Открытый источник

    Есть бесплатная Community Edition

  • Хорошо работает с Python

    https://github.com/axibase/atsd-api-python. Есть и другие языковые оболочки, например клиент ATSD R.

  • Подходит для небольшой команды

    Встроенная графика и механизм правил делают его продуктивным для создания собственных решений для создания отчетов, информационных панелей или мониторинга с меньшим количеством кода.

  • Очень хорошо задокументировано

    Трудно превзойти Redbooks IBM, но мы стараемся. API, настройка и администрирование подробно документированы с примерами.

  • Имеет специальные функции для использования упорядоченных данных временных рядов

    Это база данных временных рядов с нуля, поэтому доступны агрегирование, фильтрация и непараметрические прогнозы ARIMA и HW.

  • Помогает мне решить некоторые из моих проблем с версионными данными

    ATSD изначально поддерживает версионные данные временных рядов в редакциях SE и EE. Версии отслеживают статус, время изменения и изменения источника по одной и той же метке времени для контрольных журналов и согласований. Это полезная функция, если вам нужны чистые, проверенные данные с отслеживанием. Подумайте об измерении энергии, записи PHMR. Схема ATSD также поддерживает теги серий, которые вы можете использовать для хранения столбцов управления версиями вручную, если вы используете версию CE или вам нужно расширить столбцы управления версиями по умолчанию: статус, источник, время изменения.

Раскрытие информации - я работаю в компании, которая разрабатывает ATSD.

person Sergei Rodionov    schedule 06.08.2015