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

jsm*_*h54 10 hbase mongodb cassandra nosql accumulo

我的数据

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

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

我的用法

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

选择

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

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

我的标准

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

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

有什么想法吗?

nic*_*ley 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合作)


Sam*_*aye 2

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

那么您基本上是在做基于时间的指标吗?

好吧,如果我理解正确的话,您可以使用时间戳作为版本控制机制,以便您可以根据某个时间戳进行查询,比如说要获取最新的计算结果,您可以根据指标 ID 或其他内容获取 ts DESC 并去掉第一行?

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

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

Cassandra 太严格了,太传统了,太基于你的查询方式,以至于你只能从列族(我猜你想用图表来绘制这些指标)中创建一个图表数据枢轴,这太疯狂了,这就是为什么我放弃了它。至于搜索(Facebook 使用它,仅此而已),也没有那么令人印象深刻。

MongoDB,嗯,我喜欢 MongoDB,我是用户组中的精英,如果您没有使用键值存储策略,它可以在这里工作,但最终如果您没有下定决心并且您不喜欢那么让我第一个说:不要使用它!你不会擅长你不喜欢的技术,所以远离它。

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

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

您可以通过以下方式查询计算的最新版本:

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

这将输出您在上面看到的文档结构。在不了解更多具体信息的情况下,您希望如何查询以及一般服务器和应用程序场景等,这就是我能想到的最好的。

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

这可能会令人感兴趣,它似乎支持 HBase 是一个很好的基于时间的键值存储的论点。

我个人没有使用过 HBase,所以不要认真对待我所说的任何内容......

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

希望能有点帮助,