寻找时间序列数据库

时间:2013-12-19 20:28:09

标签: database performance architecture time-series

有几个SO questions about time series databases,但没有一个可以解决我的具体问题,尽管this one最接近,它已经3岁了。

要求:

  1. 多个数据集。它们的组织方式无关紧要(单独的表,数据库,进程,文件等)。
  2. 单主机操作(至少最初),因此我们限制在大约1TB磁盘和10GB RAM。
  3. 读取延迟/吞吐量是关键性能指标。
  4. 数据行为:

    1. 数据集仅附加,记录不可变。
    2. 每条记录(独立于数据集)都需要加上时间戳。
    3. “简单”数据集中的记录将是32位或64位整数,而更“复杂”的数据集将是每个32位和256位之间的整数向量,每个条目不超过大约1kb。 / LI>
    4. 将有一个主要的“大”表,持有200M或更多条目的“复杂”(见上一点)性质。
    5. 将会有许多(10

      收藏:

      1. 从单个主机开始,我们确实希望避免复杂的“大数据” - 后端的依赖关系(例如HBase),而考虑更简单的替代方案。这需要例如OpenTSBD脱离了桌面。
      2. 高级语言中的友好绑定。 Ruby,Python,PHP等,但如果我们无法避免,我们可以使用C,C ++,Java等。
      3. Streaming / pubsub / realtime API首选。
      4. 自定义查询 - 我们需要的不仅仅是简单的统计均值/中位数/模式/ std-dev操作,如果我们可以将分析编码为“本机”查询/命令/结构而不是读出来,那将会很棒所有数据只是为了计算应用程序代码中的所有内容。
      5. OpenTSBD基于HBase,TempoDB不会在成本/性能基础上工作,Redis,Mongo,CouchDB等似乎都会扼杀这一数据量,我们不知道我们是不是做梦。如果我低估任何提到的系统(或他们同时代的人),请纠正我。 是否存在这样的事情?如果没有,我们是否可以通过仅仅列出一项列出的要求或愿望来完成工作?

3 个答案:

答案 0 :(得分:2)

我使用hdf文件作为基础,在Python中为时间序列数据编写了一个不可变数据库。

所有这些可能都不是超快,但您可以从这段代码中获得想法

   def write_series(self, group, name, series):
        assert (group in self.groups)

        if not name in self.series(group):
            self.__create_table(group, name)

        table_hdf = self.__group__(group, name)

        times = [row["time"] for row in table_hdf]

        if not times:
            add = series.index
        else:
            add = series.index[series.index > max(times)]

        if len(add) > 0:
            add = sorted(add)
            table_hdf.append([x for x in it.izip(add, series[add])])
            table_hdf.flush()

现在所有这些都在Pandas开箱即用。 我的代码位于:

https://github.com/tschm/pycta

虽然我还没读过,但还有一本有趣的小书

http://www.amazon.co.uk/Python-HDF5-Andrew-Collette/dp/1449367836/ref=sr_1_1?ie=UTF8&qid=1387485396&sr=8-1&keywords=Python+hdf

快乐存储数据 托马斯

答案 1 :(得分:2)

你试过SciDB吗?它专为处理大规模科学数据而设计。此外,MonetDB的SciQL也声称支持这样的功能,但我还没有使用过MonetDB。

在您的情况下,SciDB中您需要的所有内容称为“窗口聚合”,它允许滑动窗口沿时间维度移动,并为每个窗口快照计算一些聚合统计信息。 SciDB可能对您有吸引力的原因如下:

  1. 安装单主机版本非常简单。如果你不想在设置中遇到任何问题,它已经安装在EC2上。

  2. SciDB主要支持两个接口:AFL和AQL。前者是一种函数式语言,后者是一种类似SQL的语言。两者都是非常高级和声明性的。此外,SciDB还有一个支持R语言的SciDB-R变体。

  3. SciDB支持用户定义的功能,因此您可以自定义ad-hoc聚合功能。

  4. SciDB是一个开源软件,因此完全免费。

答案 2 :(得分:2)

收藏:

  1. 简单设置:检查
  2. 以高级语言绑定:检查(http://code.kx.com/wiki/Category:Interfaces
  3. Streaming / pubsub / realtime:check
  4. 自定义查询:检查(类似查询语言的SQL)
  5. =>来自http://kx.com的kdb +就是你要找的。