存储大量写入和高聚合的时间序列数据的最佳方式.(约10亿分)

xco*_*rat 8 database database-design time-series

我正在寻找一种存储带时间戳的数据的方法.

每个时间戳可能包含1到10个数据字段.

我可以(time, key, value)使用简单的数据解决方案或SQL 存储数据吗?如何与mongo等noSQL解决方案相比,我可以在哪里存储{time:.., key1:..., key2:...}

它将存储大约10个数据点,每秒最多大约10个字段.这些数据可能会被收集长达10年,很容易汇总10亿条记录.数据库应该能够帮助使用时间范围查询来绘制数据图形.

它应该能够处理大量写入频率,每秒约100(好吧,这不是那么高,但仍然......),同时能够处理返回大约一百万条记录的查询(甚至更多)

它本身的数据非常简单,它们只是电子测量.有些需要以高频率(~100毫秒)进行测量,有些则需要每隔1分钟左右进行一次测量.

任何使用此类评论的人都可以评论他们使用的方法的优缺点吗?

(显然这是一个非常具体的场景,所以这绝对不是要转向什么是最好的数据库类型的问题).

样本数据:

{ _id: Date(2013-05-08 18:48:40.078554),
  V_in: 2.44,
  I_in: .00988,
  I_max: 0.11,
},

{_id: Date(2013-05-08 18:48:40.078325),
  I_max: 0.100,
},

{ _id: Date(2001-08-09 23:48:43.083454),
  V_out: 2.44,
  I_in: .00988,
  I_max: 0.11,
},
Run Code Online (Sandbox Code Playgroud)

谢谢.

And*_*w C 6

查看一些时间序列数据库:

已安装的软件

服务

  • TempoDB(披露:联合创始人):https://tempo-db.com/


eng*_*erC 2

为简单起见,我只需制作一个时间戳表,其中每个测量点有一列,并且整数主键在技术上是多余的,因为时间戳唯一标识一个测量点,但是按数字引用特定行比按数字引用更容易时间戳。对于在该时间戳期间未获取的任何测量参数,您将有空值,这将占用每行一些额外的位(对列数以 2 为底数,向上舍入),但您也不必执行任何连接。如果您决定稍后添加列,确实如此,但这实际上并不太困难,您可以创建另一个单独的表来作为该表的键。

请参阅此处的数据示例:http://www.sqlfiddle.com/#!2 /e967c/4

我建议制作一些大尺寸的虚拟数据库,以确保您使用的任何结构仍然能够充分执行。

这个(time,key,value)建议听起来EAV,如果您打算扩展,我会避免这样做。