我们正在尝试分析来自几个传感器的时间序列。我们目前正在评估存储到Cassandra,因为表演很棒。
我们的传感器记录首先存储在本地存储为两个二进制文件:一个存储时间戳,另一个存储度量。这两个文件总共大约2MB,可以为一个传感器存储700,000个测量值。
然后我们从这些文件中读取数据并使用以下数据模型将信息存储在Cassandra中:
CREATE TABLE data (
sensor_id text,
tps timestamp,
value double,
PRIMARY KEY ((sensor_id), tps),
) WITH compression = {'sstable_compression' : 'DeflateCompressor'};
此表存储与两个二进制文件中相同的数据,但关联的sstable的大小约为10.4MB(来自nodetool cfstats data -H
,行Space used (live)
或Space used (total)
的统计信息,只有一个传感器)。我们尝试通过将TIMESTAMP设置为0(使用INSERT INTO data (sensor_id, tps, value) VALUES ('station_123_sensor_456', '2010-06-01 10:20:30.456+0000', 0.123456789) USING TIMESTAMP 0
来减少表的数量,即使我们知道处理重复数据的风险。这样,我们达到了大约6.7MB的表量,这仍然是比原始文件大4倍。
是否需要付出高昂的读/写性能,或者有更好的方法在Cassandra中存储数据(例如删除TIMESTAMP)?
感谢您的帮助。