10

我的数据

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

此外,它还有一个古怪的特点,即许多这些数据值是从源头导出的,计算会不时发生变化。这意味着我的数据被有效地版本化,并且我需要能够仅从最新版本的计算中调用数据。 注意:这不是覆盖旧值的版本控制。我只是有时间戳截止,超出了数据会改变它的含义。

我的使用

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

选择

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

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

我的标准

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

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

有什么想法吗?

4

4 回答 4

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 合作)

于 2012-06-23T18:06:57.943 回答
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();

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

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

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

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

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

希望有点帮助

于 2012-06-23T10:41:34.643 回答
0

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

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

于 2013-07-09T13:34:40.187 回答
0

Axibase 时间序列数据库

  • 开源

    有一个免费的社区版

  • 与 Python 配合得很好

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

  • 适合小团队

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

  • 非常有据可查

    很难击败 IBM 红皮书,但我们正在努力。API、配置和管理都有详细的文档和示例。

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

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

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

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

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

于 2015-08-06T19:03:23.317 回答