我正在寻找一种存储带时间戳的数据的方法 .
每个时间戳可能包含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 回答
查看一些时间序列数据库:
已安装的软件
OpenTSDB:http://opentsdb.net/
RRDTool:http://oss.oetiker.ch/rrdtool/
Graphite:http://graphite.wikidot.com/
服务
其他可能值得一看的人:
Kairosdb为Cassandra重写OpenTSDB
Blueflood(也使用Cassandra)
Axibase Time-Series Database在HBase之上运行
Time Series Database维基百科页面 .
为简单起见,我只是为每个测量点创建一个带有列的时间戳表,并且整数主键在技术上是冗余的,因为时间戳唯一地标识测量点,但是更容易按编号引用特定行而不是时间戳 . 对于在该时间戳期间未采用的任何测量参数,您将获得空值,这将占用每行多个额外位(列数为2的基数,向上舍入),但您也不必进行任何连接 . 如果您决定稍后要添加列,则确实如此,但这确实不太困难,您可以创建另一个单独的表来锁定此列 .
有关您的数据,请参阅此处:http://www.sqlfiddle.com/#!2/e967c/4
我建议制作一些大尺寸的虚拟数据库,以确保您使用的任何结构仍能充分发挥作用 .
(time,key,value)
建议smells喜欢EAV,如果您计划进行缩放,我会避免这样做 .