【问题标题】:NoSQL for time series/logged instrument reading data that is also versionedNoSQL 用于时间序列/记录的仪器读取数据,也是版本化的
【发布时间】:2012-06-25 08:34:17
【问题描述】:

我的数据

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

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

我的使用情况

在下游,我将对数据进行各种未定义的数据挖掘/机器学习用途。目前还不清楚这些用途是什么,但很明显我将用 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. OpenTSDB
    • 这基本上是一个时间序列特定的数据库,建立在 HBase 之上。完美,对吧?我不知道。我正试图弄清楚另一层抽象能给我带来什么。

我的标准

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

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

有什么想法吗?

【问题讨论】:

  • 如果“我不允许使用 SQL RDBMS 存储此数据”,您可能会遇到根本问题。选择技术解决方案应该没有偏见,并且应该根据手头问题的价值主张来做出技术产品/服务的决策。

标签: mongodb cassandra hbase accumulo nosql


【解决方案1】:

我只有 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,所以不要认真对待我所说的任何事情......

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

希望对你有所帮助,

【讨论】:

  • 您所知道的领域的好答案。感谢您的反馈。我认为很多版本控制的概念并不适用于我的工作,包括你的 HBase 线程。我不确定为什么我的用法如此奇怪。我不会更改现有值,我只是切换到新的计算流。不管怎样,我很欣赏你对 Cassandra 和 Mongo 的看法。
【解决方案2】:

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

至于您对社区的担忧,我不确定是什么给了您这样的印象,但是社区非常大(请参阅 irc、邮件列表)以及越来越多的 cassandra 用户。

http://www.datastax.com/cassandrausers

关于您的标准:

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

我还要注意 Accumulo、HBase 和 Cassandra 都具有基本相同的数据模型。您仍然会发现数据模型在每个数据库提供的特定功能方面存在细微差别,但基本内容是相同的。

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

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

【讨论】:

  • 我很欣赏高质量的答案。如果我使用 Cassandra 来解决这个问题,您的链接确实让我更好地了解如何使用它。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    Axibase Time-Series Database

    • 开源

      有一个免费的社区版

    • 适用于 Python

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

    • 适合小团队

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

    • 非常有据可查

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 2013-03-30
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      相关资源
      最近更新 更多