NoSQL用于时间序列/记录的仪器读取数据,也是版本化的

时间:2012-06-23 02:59:33

标签: mongodb cassandra hbase accumulo nosql

我的数据

它主要监视每个受监视设备上以每个受监视值的Timestamp:Value形式传递的数据。它经常通过许多设备和许多监控值收集。

此外,它具有许多这些数据值的奇特特征,这些数据值是在源处导出的,计算时间会不断变化。这意味着我的数据有效版本化,我需要能够只调用最新版本的计算数据。 注意:这不是旧值被覆盖的版本控制。我只是有时间戳截止,超出该截止时数据会改变其含义。

我的用法

下游,我将对数据进行各种未定义的数据挖掘/机器学习用途。目前尚不清楚这些用途是什么,但很明显我将用Python编写所有下游代码。此外,我们是一个非常小的商店,所以我真的只能处理下游应用程序的设置,维护和接口这么多的复杂性。我们没有那么多人。

选择

我不允许使用SQL RDBMS来存储这些数据,所以我必须找到合适的NoSQL解决方案。这是我到目前为止所发现的:

  1. 卡桑德拉
    • 对我来说看起来很好,但似乎有些主要用户已经转移。这让我想知道它是不会成为一个充满活力的生态系统。这篇SE帖子似乎有好话要说:Cassandra time series data
  2. Accumulo
    • 同样,这似乎很好,但我担心这不是一个主要的,积极开发的平台。看起来这会让我对工具和文档感到匮乏。
  3. 的MongoDB
    • 我对Mongo人群有一种,也许是非理性的,强烈的厌恶,我正在寻找任何理由将其作为一种解决方案。在我看来,Mongo的数据模型对于具有这种静态,规则结构的东西来说都是错误的。我的数据甚至进入(并且必须保持)订单。也就是说,每个人和他们的母亲似乎都喜欢这个东西,所以我真的想评估它的适用性。请参阅此帖和许多其他SE帖子:What NoSQL DB to use for sparse Time Series like data?
  4. HBase的
    • 这是我目前正在倾向的地方。它似乎是Cassandra的继任者,对我的问题有一个完全可用的方法。也就是说,这是一项很重要的技术,如果我选择的话,我很关心真正知道我要注册的是什么。
  5. OpenTSDB
    • 这基本上是一个基于HBase的时间序列特定数据库。完美,对吗?我不知道。我正在试图找出另一层抽象给我买的东西。
  6. 我的标准

    • 开源
    • 适用于Python
    • 适合小团队
    • 记录良好
    • 具有利用有序时间序列数据的特定功能
    • 帮助我解决一些版本化数据问题

    那么,NoSQL数据库实际上可以帮我解决我的需求呢?它可以是我的清单中的任何东西。我只是想了解哪个平台实际上有代码,而不仅仅是使用模式,这些代码支持我的超级特定,易于理解的需求。我不是问哪一个最好或哪一个更酷。我试图了解哪种技术可以最本地存储和操作此类数据。

    有什么想法吗?

4 个答案:

答案 0 :(得分:6)

听起来您正在描述Cassandra最常见的用例之一。时间序列数据通常非常适合cassandra数据模型。更具体地说,许多人存储您所描述的度量/传感器数据。参见:

至于你对社区的担忧,我不确定是什么给你这种印象,但是有相当大的社区(参见irc,邮件列表)以及越来越多的cassandra用户。

http://www.datastax.com/cassandrausers

关于您的标准:

  • 开源
  • 适用于Python
  • 适合小团队
  • 记录很清楚
  • 具有利用有序时间序列数据的特定功能
    • 见上面的链接
  • 帮助我解决一些版本化的数据问题
    • 如果我正确理解您的描述,您可以通过多种方式解决。您可以在版本更改时开始编写新行。或者,您可以使用复合列来存储版本以及时间戳/值对。

我还会注意到Accumulo,HBase和Cassandra都具有基本相同的数据模型。对于每个数据库提供的特定功能,您仍会发现有关数据模型的细微差别,但基础知识将相同。

三者之间的更大差异将是系统的架构。 Cassandra从亚马逊的Dynamo中获取其架构。群集中的每个服务器都是相同的,并且设置起来非常简单。 HBase和Accumulo或更多BigTable的直接克隆。它们具有更多移动部件,并且需要更多设置/类型的服务器。例如,设置HDFS,Zookeeper和HBase / Accumulo特定服务器类型。

免责声明:我为DataStax工作(我们与Cassandra合作)

答案 1 :(得分:2)

我只有Cassandra和MongoDB的经验,但我的经验可能会增加一些东西。

那么你基本上是基于时间的指标吗?

好的,如果我理解正确的话,你可以使用时间戳作为版本控制机制,这样你就可以按照某个时间戳进行查询,比如说要获得最新的计算结果,你可以根据度量标准ID或者其他任何内容来获取ts DESC并取消第一个行?

有时听起来像是一个版本化的键值存储。

考虑到这一点,我可能不会推荐我用过的两个中的任何一个。

Cassandra过于刻板而且太过层次,也是基于你如何查询到你只能制作一个图形数据的一个点(我认为你想要绘制这些指标的图形)这个columfamily的基础。疯了,为什么我放弃它。至于搜索(Facebook使用它,只有那个)它也不是那么令人印象深刻。

MongoDB,我喜欢MongoDB,我是用户组的精英,如果你没有使用密钥值存储策略,它可以在这里工作,但如果你的思想没有设置,那么在一天结束时它可以工作。你不喜欢这种技术,那就让我成为第一个说出来的人:不要使用它!你不会擅长一种你不喜欢的技术,所以远离它。

虽然我会想象在Mongo中发生这种情况很像:

{
_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();

哪个会输出您在上面看到的doc结构。我不知道你想要查询的更多内容以及一般的服务和应用场景等,这是我能想到的最好的。

我喜欢HBase上的这个帖子:http://mail-archives.apache.org/mod_mbox/hbase-user/201011.mbox/%3C5A76F6CE309AD049AAF9A039A39242820F0C20E5@sc-mbx04.TheFacebook.com%3E

这可能是有意义的,似乎支持HBase是一个基于时间的关键值存储的论点。

我没有亲自使用HBase,所以不要认真对待我说的任何事情......

我希望我添加了一些内容,如果没有,你可以尝试缩小标准,以便我们回答更多专门的问题。

希望它有所帮助,

答案 2 :(得分:0)

不是任何特定技术的插件,但是使用MongoDB的关于时间序列存储的这篇文章可能提供另一种思考存储大量“传感器”数据的方法。

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

答案 3 :(得分:0)

Axibase Time-Series Database

  • 开源

    有免费的社区版

  • 适用于Python

    https://github.com/axibase/atsd-api-python。还有其他语言包装器,例如ATSD R客户端。

  • 适合小团队

    内置图形和规则引擎可以高效地构建内部报告,仪表板或监控解决方案,而且编码更少。

  • 记录很清楚

    很难击败IBM红皮书,但我们正在努力。详细记录了API,配置和管理以及示例。

  • 具有利用有序时间序列数据的特定功能

    这是一个从头开始的时间序列数据库,因此可以使用聚合,过滤和非参数ARIMA和HW预测。

  • 帮助我解决一些版本化数据问题

    ATSD在SE和EE版本中原生支持版本化的时间序列数据。版本跟踪审计跟踪和对帐的相同时间戳的状态,更改时间和源更改。如果您需要带有跟踪的干净,经过验证的数据,这是一个非常有用的功能。想想能量计量,PHMR记录。 ATSD模式还支持系列标记,如果您使用的是CE版本,则可以手动存储版本控制列,或者需要扩展默认版本控制列:状态,来源,更改时间。

披露 - 我为开发ATSD的公司工作。