使用哪种NoSQL数据库适用于稀疏时间序列数据?

12

我正在计划一个侧项目,将要处理类似于时间序列的数据,并且想尝试其中的一种新型 NoSQL 数据库,并正在寻找建议。

对于一个(增长中的)symbols 集合,我将有一个(逐渐增加的)(time, value)元组列表。 并非所有的symbols都会被更新;有些symbols可能会被更新,而其他一些则可能不会被更新,并且可能会添加全新的symbols

因此,数据库应该允许:

  • 添加具有初始单元素(元组)列表的符号。例如:A: [(2012-04-14 10:23, 50)]
  • 使用新元组更新符号(将该元组附加到该符号的列表中)。
  • 为给定的符号读取数据。(最好能够指定要返回的数据的时间范围)

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

性能不是关键问题。更新/创建将每几个小时进行一次。


Stack Overflow不是一个推荐引擎。 - Brian Roach
2个回答

17
我相信所有主要的NoSQL数据库都将支持这个要求,特别是如果你实际上没有大量的数据(这就引出了一个问题,为什么使用NoSQL?)。
话虽如此,我最近不得不设计和使用一个用于时间序列数据的NoSQL数据库,因此可以对该设计提供一些输入,然后可以推广到其他所有数据库。
我们选择的数据库是Cassandra,我们的设计如下:
- 所有“符号”都有一个单独的键空间 - 每个符号都是一个新行 - 每个时间条目都是相关行的新列 - 每个值(可以是多个值)都是时间条目的值部分
这样可以实现您所要求的所有内容,尤其是读取单个符号的数据,并在必要时使用范围(列范围调用)。虽然您说性能并不重要,但对我们来说很重要,而且这也很有效 - 任何单个符号的所有数据都按定义排序(按列名排序),并始终存储在同一节点上(对于简单查询没有跨节点通信)。最后,这种设计对其他具有动态列的NoSQL数据库也很好地进行了转换。

以下是关于使用 MongoDB(以及必要时的封顶收集)作为时间序列存储的信息:MongoDB 作为时间序列数据库

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

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

  • NoSQL 的学习曲线会更高,您不会自动获得额外的灵活性和功能,而需要在“软成本”方面投入支持该数据库运营的人员。
  • 如果您预计未来此功能会增长(无论是为每个时间条目添加更多字段还是扩大符号数量或符号时间序列的大小),那么一定要选择 NoSQL。灵活性优势巨大,并且根据以上设计,您获得的可扩展性在“每个符号” 和 “符号数量”方面几乎是无限的(我说几乎是无限的 - 每行的最大列数可达数十亿,每个键空间的最大行数据我所知是无限的)。

4

+1 for OpenTSDB:它是储存大型时间序列数据(例如外汇点价数据)的完美开源解决方案。尽管设置Hbase可能有些繁琐,但OpenTSDB的Python收集器(即OpenTSDB的事务处理器)使得实时流数据的存储变得非常容易。 - Peter Host

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接