首页 文章

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

提问于
浏览
8

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

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

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

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

它应该能够处理大量写入频率,每秒约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 回答

  • 2

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

    已安装的软件

    服务

  • 4

    其他可能值得一看的人:

  • 6

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

    有关您的数据,请参阅此处:http://www.sqlfiddle.com/#!2/e967c/4

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

    (time,key,value) 建议smells喜欢EAV,如果您计划进行缩放,我会避免这样做 .

相关问题