它主要监视每个受监视设备上以每个受监视值的Timestamp:Value形式传递的数据。它经常通过许多设备和许多监控值收集。
此外,它具有许多这些数据值的奇特特征,这些数据值是在源处导出的,计算时间会不断变化。这意味着我的数据有效版本化,我需要能够只调用最新版本的计算数据。 注意:这不是旧值被覆盖的版本控制。我只是有时间戳截止,超出该截止时数据会改变其含义。
下游,我将对数据进行各种未定义的数据挖掘/机器学习用途。目前尚不清楚这些用途是什么,但很明显我将用Python编写所有下游代码。此外,我们是一个非常小的商店,所以我真的只能处理下游应用程序的设置,维护和接口这么多的复杂性。我们没有那么多人。
我不允许使用SQL RDBMS来存储这些数据,所以我必须找到合适的NoSQL解决方案。这是我到目前为止所发现的:
那么,NoSQL数据库实际上可以帮我解决我的需求呢?它可以是我的清单中的任何东西。我只是想了解哪个平台实际上有代码,而不仅仅是使用模式,这些代码支持我的超级特定,易于理解的需求。我不是问哪一个最好或哪一个更酷。我试图了解哪种技术可以最本地存储和操作此类数据。
有什么想法吗?
答案 0 :(得分:6)
听起来您正在描述Cassandra最常见的用例之一。时间序列数据通常非常适合cassandra数据模型。更具体地说,许多人存储您所描述的度量/传感器数据。参见:
至于你对社区的担忧,我不确定是什么给你这种印象,但是有相当大的社区(参见irc,邮件列表)以及越来越多的cassandra用户。
http://www.datastax.com/cassandrausers
关于您的标准:
我还会注意到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)
开源
有免费的社区版
适用于Python
https://github.com/axibase/atsd-api-python。还有其他语言包装器,例如ATSD R客户端。
适合小团队
内置图形和规则引擎可以高效地构建内部报告,仪表板或监控解决方案,而且编码更少。
记录很清楚
很难击败IBM红皮书,但我们正在努力。详细记录了API,配置和管理以及示例。
具有利用有序时间序列数据的特定功能
这是一个从头开始的时间序列数据库,因此可以使用聚合,过滤和非参数ARIMA和HW预测。
帮助我解决一些版本化数据问题
ATSD在SE和EE版本中原生支持版本化的时间序列数据。版本跟踪审计跟踪和对帐的相同时间戳的状态,更改时间和源更改。如果您需要带有跟踪的干净,经过验证的数据,这是一个非常有用的功能。想想能量计量,PHMR记录。 ATSD模式还支持系列标记,如果您使用的是CE版本,则可以手动存储版本控制列,或者需要扩展默认版本控制列:状态,来源,更改时间。
披露 - 我为开发ATSD的公司工作。