【问题标题】:What NoSQL DB to use for sparse Time Series like data?什么 NoSQL DB 用于稀疏时间序列(如数据)?
【发布时间】:2012-04-26 19:50:56
【问题描述】:

我正在计划一个业余项目,我将在其中处理时间序列之类的数据,并且想尝试其中一个闪亮的新 NoSQL DB,并正在寻找建议。

对于一组(不断增长的)symbols,我将有一个 (time,value) 元组列表(随着时间的推移而增加)。 并非所有symbols 都会更新;一些symbols 可能会更新而另一些可能不会更新,并且可能会添加全新的symbols

因此数据库应该允许:

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

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

性能并不重要。更新/创建大约每隔几个小时就会发生一次。

【问题讨论】:

标签: mongodb cassandra riak nosql


【解决方案1】:

我相信几乎所有主要的 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。灵活性的好处是巨大的,并且您在“每个符号”和“符号数量”的基础上获得的可扩展性(使用上述设计)几乎是无限的(我说几乎是无限的 - 每行的最大列数为数十亿,最大值我相信每个键空间的行数是无限的)。

【讨论】:

    【解决方案2】:

    看看 opentsdb.org 一个使用 hbase 的开源时间序列数据库。他们在如何存储 TS 方面很聪明。这里有很好的记录:http://opentsdb.net/misc/opentsdb-hbasecon.pdf

    【讨论】:

    • +1 for opentsdb :它是存储大量时间序列(如外汇报价数据)的完美 OSS 解决方案。设置 Hbase 可能很乏味,但 OpenTsdb 的 python 收集器(OpenTsdb 的排序事务器)使动态存储流数据变得非常容易。
    猜你喜欢
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多