最近我正在做一些凤凰性能测试。我需要一个高性能的系统,该系统可以处理数十亿行的大量时间序列数据(deviceID,timestamp,someDoubleValue)。
DDL:如果不存在,则创建表table_timestamp(不显示DEVICEID VARCHAR) NULL,CREATED_DATE TIMESTAMP不为NULL,METRIC_DOUBLE DOUBLE, METRIC_VALUE INTEGER CONSTRAINT PK主键(DEVICEID,CREATED_DATE ROW_TIMESTAMP))SALT_BUCKETS = 4;
读取:最受欢迎的读取方案之一是获取传感器的当前状态。
我们正尝试通过下一个查询解决此问题:
SELECT * FROM TABLE_TIMESTAMP WHERE DEVICEID='const' AND
CREATED_DATE = (SELECT MAX(CREATED_DATE)
FROM TABLE_TIMESTAMP WHERE DEVICEID='const' and
CREATED_DATE <= TO_TIMESTAMP('2018-01-01 00:00:00.001'))
查询执行时间太长。当前,查询时间大约为0.9-1.0s
,我认为这是因为它读取DEVICEID的所有数据并计算子查询中的最大数据。根据我对HBase的理解,似乎HBase中的类似查询可以更快地工作。
有人有什么主意吗?