gpt4 book ai didi

time-series - 时间序列数据的数据存储

转载 作者:行者123 更新时间:2023-12-03 21:39:53 24 4
gpt4 key购买 nike

我有一些科学测量数据应该永久存储在某种数据存储中。

我正在寻找一种方法来存储来自 100 000 个传感器的测量值,其中测量数据多年来积累到每个传感器大约 1 000 000 个测量值。每个传感器每分钟或更少地产生一次读数。因此数据流不是很大(在整个系统中每秒大约有 200 次测量)。传感器不同步。

数据本身是三元组流:[时间戳] [传感器#] [值],其中所有内容都可以表示为 32 位值。

在最简单的形式中,此流将按原样存储在一个三列表中。那么查询将是:

SELECT timestamp,value 
FROM Data
WHERE sensor=12345 AND timestamp BETWEEN '2013-04-15' AND '2013-05-12'
ORDER BY timestamp

不幸的是,对于基于行的 DBMS,这会带来非常差的性能,因为数据量很大,而且我们想要的数据几乎均匀地分散在其中。 (试图从数十亿条记录中挑选几十万条记录。)在性能方面我需要的是合理的人类消费响应时间(将为用户绘制数据图表),即几秒钟加上数据传输。

另一种方法是将来自一个传感器的数据存储到一个表中。然后查询将变为:
SELECT timestamp,value 
FROM Data12345
WHERE timestamp BETWEEN '2013-04-15' AND '2013-05-12'
ORDER BY timestamp

这将提供良好的读取性能,因为结果将是来自相对较小(通常少于一百万行)的表中的许多连续行。

但是,RDBMS 应该有 100 000 个表,这些表会在几分钟内使用。这对于通用系统来说似乎是不可能的。另一方面,RDBMS 似乎不是正确的工具,因为数据中没有关系。

通过使用以下 mickeymouse 系统,我已经能够证明单个服务器可以处理负载:
  • 每个传感器在文件系统中都有自己的文件。
  • 当一条数据到达时,它的文件被打开,数据被追加,文件被关闭。
  • 查询打开相应的文件,找到数据的起点和终点,并读取其间的所有内容。

  • 很少的代码行。性能取决于系统(存储类型、文件系统、操作系统),但似乎没有任何大的障碍。

    但是,如果我沿着这条路走下去,我最终会编写自己的代码来进行分区、备份、将旧数据移到存储(云)的更深处等。然后这听起来像是滚动我自己的 DBMS,这听起来像是重新发明了轮(再次)。

    有没有标准的方法来存储我拥有的数据类型?一些聪明的 NoSQL 技巧?

    最佳答案

    看起来真的是一个非常简单的问题。 1000 亿条记录,每条记录 12 字节 -> 1.2TB 这对于现代 HDD 来说甚至不是一个大容量。在 LMDB 中,我会考虑为每个传感器使用一个 subDB。那么您的键/值只是 32 位时间戳/32 位传感器读数,您的所有数据检索都将是对键的简单范围扫描。您可以使用 LMDB 以 5000 万条记录/秒的速度轻松检索。 (看看 SkyDB 的人就是这样做的 https://groups.google.com/forum/#!msg/skydb/CMKQSLf2WAw/zBO1X35alxcJ)

    关于time-series - 时间序列数据的数据存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24194436/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com