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

时间:2013-05-08 19:43:22

标签: database database-design time-series

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

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

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

它将存储大约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,
},

谢谢。

3 个答案:

答案 0 :(得分:6)

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

已安装的软件

服务

答案 1 :(得分:4)

可能值得一看的其他人:

答案 2 :(得分:2)

为简单起见,我只想为每个测量点创建一个带有列的时间戳表,并且整数主键在技术上是冗余的,因为时间戳唯一地标识了测量点,但是通过以下方式引用特定行更容易数字而不是时间戳。对于在该时间戳期间未采用的任何测量参数,您将获得空值,这将占用每行多个额外位(列数为2的基数,向上舍入),但您也不必进行任何连接。如果您决定稍后要添加列,这是事实,但这确实不太困难,您可以创建另一个单独的表来锁定此列。

请点击此处查看您的数据示例:http://www.sqlfiddle.com/#!2/e967c/4

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

(time,key,value)建议smells,如EAV,如果您计划扩展,我会避免这样做。