OrientDB 时间序列数据

4
1个回答

3
为了更好地理解时间序列的实用性,可以想象以下情况:
你有一份与某个日期相关的日志。如果数据库中有数百万条记录,通过日期字段进行搜索将非常昂贵,因为它会强制查询读取所有记录并检查条件,而使用时间序列过滤则在连接的类(年、月、小时、然后是日志)之间每次通行时发生,因此只需读取符合日期的记录而不是所有其他记录。
以下是一个小例子:
CREATE CLASS Year extends V
CREATE CLASS Month extends V
CREATE CLASS Day extends V
CREATE CLASS Hour extends V
CREATE CLASS Log extends V

CREATE PROPERTY Year.value STRING
CREATE PROPERTY Year.month LINKMAP Month
CREATE PROPERTY Month.day LINKMAP Day
CREATE PROPERTY Day.hour LINKMAP Hour
CREATE PROPERTY Hour.log LINKSET Log

CREATE VERTEX Log SET priority='high'
CREATE VERTEX Log SET priority='medium'
CREATE VERTEX Log SET priority='low'

INSERT INTO Hour(log) VALUES ([#16:0,#16:1])
INSERT INTO Hour(log) VALUES ([#16:2])
INSERT INTO Day(hour) VALUES ({'15':#15:0})
INSERT INTO Day(hour) VALUES ({'10':#15:1})
INSERT INTO Month(day) VALUES ({'4':#14:0})
INSERT INTO Month(day) VALUES ({'21':#14:1})
INSERT INTO Year(value,month) VALUES ('2012',{'3':#13:0})
INSERT INTO Year(value,month) VALUES ('2015',{'8':#13:1})

查询1:查找所有与日期4/3/2012 h15相关的日志

SELECT EXPAND(month[3].day[4].hour[15].log) FROM Year WHERE value='2012'

查询2: 查找所有与日期21/8/2015 h10相关的日志记录

SELECT EXPAND(month[8].day[21].hour[10].log) FROM Year WHERE value='2015'

希望它能有所帮助。

嗨@TommyK,你有机会尝试我的解决方案了吗? - LucaS
SELECT EXPAND(month["3"].day["4"].hour["15"].log) FROM Year WHERE value='2012' 中括号内的值必须用引号括起来。 - keepscoding

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接