NoSQL 用于时间序列/记录的仪器读取数据,这些数据也经过版本控制



My Data

它主要是监视数据,以时间戳的形式传递:每个受监视值的值,在每个受监视的设备上。 它定期通过许多设备和许多受监控值收集。

此外,它还具有许多这些数据值在源头派生的古怪功能,计算会不时变化。 这意味着我的数据已有效地进行版本控制,并且我需要能够仅调用最新版本计算中的数据。 注意:这不是覆盖旧值的版本控制。 我只有时间戳截止值,超过时间戳,数据会改变其含义。

我的用法

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

抉择

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

  1. 卡珊德拉
    • 对我来说看起来完全没问题,但似乎一些主要用户已经离开了。 这让我想知道它是否会成为一个充满活力的生态系统。 这篇SE帖子似乎有好话要说:Cassandra时间序列数据
  2. 累积
    • 同样,这似乎很好,但我担心这不是一个主要的、积极开发的平台。 这似乎会让我有点渴望工具和文档。
  3. 蒙戈数据库
    • 我对Mongo人群有一种,也许是非理性的,强烈的厌恶,我正在寻找任何理由来放弃它作为解决方案。 在我看来,Mongo的数据模型对于具有如此静态,规则结构的东西都是错误的。 我的数据甚至按顺序排列(并且必须保持)顺序。 也就是说,每个人和他们的母亲似乎都喜欢这个东西,所以我真的在努力评估它的适用性。 请参阅此文章和许多其他 SE 帖子:将什么 NoSQL 数据库用于稀疏时间序列(如数据)?
  4. 乙肝酶
    • 这就是我目前倾向于的地方。 它似乎是Cassandra的继任者,为我的问题提供了一种完全可用的方法。 也就是说,这是一项重要的技术,如果我选择它,我担心的是真正知道我要注册的内容。
  5. 开放台数据库
    • 这基本上是一个特定于时间序列的数据库,建立在HBase之上。 完美,对吧? 我不知道。 我试图弄清楚另一层抽象给我带来了什么。

我的标准

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

那么,哪个NoSQL数据库实际上可以帮助我满足我的需求呢? 它可以是任何东西,无论是否来自我的列表。 我只是想了解什么平台实际上有代码,而不仅仅是使用模式,支持我的超级具体、很好理解的需求。 我不是在问哪一个最好或哪个更酷。 我试图了解哪种技术可以最原生地存储和操作此类数据。

有什么想法吗?

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

  • http://rubyscale.com/blog/2011/03/06/basic-time-series-with-cassandra/
  • http://www.datastax.com/dev/blog/advanced-time-series-with-cassandra
  • http://engineering.rockmelt.com/post/17229017779/modeling-time-series-data-on-top-of-cassandra

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

http://www.datastax.com/cassandrausers

关于您的标准:

  • 开源
    • 是的
  • 与 Python 配合良好
    • http://pycassa.github.com/pycassa/
  • 适合小型团队
    • 是的
  • 有据可查
    • http://www.datastax.com/docs/1.1/index
  • 具有利用有序时间序列数据的特定功能
    • 见上面的链接
  • 帮助我解决一些版本化数据问题
    • 如果我正确理解您的描述,您可以通过多种方式解决此问题。您可以在版本更改时开始编写新行。或者,您可以使用复合列来存储版本以及时间戳/值对。

我还要指出,Accumulo、HBase 和 Cassandra 基本上都具有相同的数据模型。您仍然会发现数据模型在每个数据库提供的特定功能方面存在细微差异,但基础知识将是相同的。

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

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

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

所以你基本上做基于时间的指标?

好吧,如果我理解正确,您将时间戳用作版本控制机制,以便您按某个时间戳进行查询,例如要获得使用的最新计算,您根据指标 ID 或其他任何东西去获取 ts DESC 并删除第一行?

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

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

Cassandra太死板了,它太继承了,太基于你如何查询到你只能从(我猜你想绘制这些指标)哥伦比亚家族中制作一个图形数据枢轴,这太疯狂了,这就是为什么我放弃了它。至于搜索(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,所以不要认真对待我所说的任何事情......

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

希望它有所帮助,

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

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

基时间序列数据库

  • 开源

    有一个免费的社区版

  • 与 Python 配合良好

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

  • 适合小型团队

    内置的图形和规则引擎使构建内部报告、仪表板或监控解决方案的效率更低,编码更少。

  • 有据可查

    很难

    击败IBM红皮书,但我们正在努力。API、配置和管理都详细记录并附有示例。

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新