NoSQL DB用于稀疏时间序列如数据?

时间:2012-04-14 22:39:11

标签: mongodb cassandra riak nosql

我正在计划一个侧面项目,我将像数据一样处理时间序列,并希望尝试使用其中一个闪亮的新NoSQL数据库,我正在寻找推荐。

对于(增长的)symbols集合,我将列出(timevalue)元组(随着时间的推移而增加)。 并非所有symbols都会更新;某些symbols可能会更新而其他人可能不会更新,并且可能会添加全新symbols

因此,数据库应允许:

  • 使用初始的单元素(元组)列表添加符号。例如。答:[(2012-04-14 10:23,50)]
  • 使用新元组更新符号。 (将该元组附加到该符号列表中)。
  • 读取给定符号的数据。 (理想情况下,甚至让我指定应该返回数据的时间范围)

创建和更新操作应该是原子的。如果一次读取多个符号是可能的,那将是有趣的。

表现并不重要。更新/创建大约每隔几个小时发生一次。

2 个答案:

答案 0 :(得分:17)

我相信所有主要的NoSQL数据库都会支持这个要求,特别是如果你实际上没有大量的数据(这就引出了问题,为什么是NoSQL?)。

尽管如此,我最近不得不设计和使用NoSQL数据库来处理时间序列数据,因此可以对该设计提供一些输入,然后可以为所有其他设计进行推断。

我们选择的数据库是Cassandra,我们的设计如下:

  • 所有“符号”的单个键空间
  • 每个符号都是新行
  • 每次条目都是相关行的新列
  • 每个值(可以多于一个值)是时间条目的值部分

这使您可以实现所要求的一切,尤其是读取单个符号的数据,并在必要时使用范围(列范围调用)。虽然你说性能并不重要,但它对我们来说也是非常高效的 - 任何单个符号的所有数据都按照定义排序(列名排序)并始终存储在同一节点上(对于简单查询没有交叉节点通信) )。最后,这种设计很好地转换为具有动态列的其他NoSQL数据库。

除此之外,这里还有一些关于时间序列商店使用MongoDB(以及必要时的上限集合)的信息:MongoDB as a Time Series Database

最后,这里讨论SQL与NoSQL的时间序列:https://dba.stackexchange.com/questions/7634/timeseries-sql-or-nosql

我可以在以下讨论中添加以下内容:

  • NoSQL的学习曲线会更高,在“软成本”方面,您无法获得免费的额外灵活性和功能。谁将在操作上支持这个数据库?
  • 如果您希望此功能在未来增长(要么在每个时间条目中添加更多字段,要么在符号数量或符号时间序列大小方面更大容量),那么肯定会使用NoSQL。灵活性的好处是巨大的,你在'每个符号'和'符号数'基础上获得的可扩展性(使用上述设计)几乎是无限的(我说几乎无限制 - 每行最大列数十亿,最大每个密钥空间的行是无限的我相信)。

答案 1 :(得分:4)

查看opentsdb.org一个使用hbase的开源时间序列数据库。他们对如何存储TS非常聪明。这里有详细记录:http://opentsdb.net/misc/opentsdb-hbasecon.pdf