【问题标题】:Looking for a time series database [closed]寻找时间序列数据库[关闭]
【发布时间】:2014-01-08 13:47:14
【问题描述】:

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

要求:

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

数据行为:

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

愿望清单:

  1. 从单个主机开始,我们确实希望避免复杂的“大数据”-y 对后端(例如 HBase)的依赖,同时会考虑更简单的替代方案。这需要例如OpenTSBD 不在讨论范围内。
  2. 高级语言的友好绑定。 Ruby、Python、PHP 等,但如果无法避免,我们可以使用 C、C++、Java 等。
  3. 最好使用 Streaming/pubsub/realtime API。
  4. 自定义查询 - 我们需要的不仅仅是简单的统计平均值/中位数/众数/标准差运算,如果我们可以将我们的分析编码为“原生”查询/命令/结构而不是读出,那就太好了所有数据只是为了计算应用程序代码中的所有内容。

OpenTSBD 基于 HBase,TempoDB 无法在成本/性能的基础上运行,Redis、Mongo、CouchDB 等似乎都会阻塞如此大量的数据,我们不知道我们是否做梦。如果我低估了任何上述系统(或其同时代系统),请纠正我。 这样的事情是否存在?如果不存在,我们是否能够通过仅满足列出的要求或愿望之一来完成工作?

【问题讨论】:

标签: database performance architecture time-series


【解决方案1】:

我使用 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

快乐地存储数据 托马斯

【讨论】:

【解决方案2】:

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

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

  1. 安装单主机版本非常容易。它已经安装在 EC2 上,如果您不希望在安装过程中遇到任何问题。

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

  3. SciDB 确实支持用户定义的函数,因此您可以自定义您的 ad-hoc 聚合函数。

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

【讨论】:

  • 顺便说一句,我开发了一个类似的并行程序来处理 HDF5 数据集。它是用 C++ 编写的,运行速度比 SciDB 快,但遗憾的是目前还不支持容错。
【解决方案3】:

愿望清单:

  1. 简单设置:检查
  2. 高级语言的绑定:检查 (http://code.kx.com/wiki/Category:Interfaces)
  3. 流式传输/发布订阅/实时:检查
  4. 自定义查询:检查(类似 SQL 的查询语言)

=> 来自http://kx.com 的 kdb+ 就是您要查找的内容。

【讨论】:

    猜你喜欢
    • 2011-08-02
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2022-08-23
    相关资源
    最近更新 更多