我们成功地使用瘦行方法在 cassandra 中存储时间序列(包括分桶)。尽管如此,我正在为我们寻找高效的存储模型(例如,更少的存储消耗......)。一个用例是将每个值的每一秒存储到一个表中。
最后一种方法(宽行多列)对我来说就像一个完整的反模式(不是理论上,而是在实践中)。有人有这种方法的经验并且可以证实我对此的看法吗?
1) Skinny Row宽行(灵活,可以过滤时间戳)
CREATE TABLE timeseries (
id int,
date date,
timestamp timestamp,
value decimal,
PRIMARY KEY ((id, date), timestamp)
) WITH CLUSTERING ORDER BY (timestamp DESC)
Run Code Online (Sandbox Code Playgroud)
2) 包含一天所有值的 Blob/JSON(更少的存储消耗,没有对节点上的时间戳进行过滤)
CREATE TABLE timeseries(
id int,
date date,
json text, -- [{'secondOfDay': 0, 'value': 12.34}, {...} or BLOB
PRIMARY KEY ((id, date))
)
Run Code Online (Sandbox Code Playgroud)
3)宽行窄行多列
CREATE TABLE timeseries(
id int,
date date,
"0" decimal, "1" decimal,"2" decimal, -- ... 86400 decimal …
Run Code Online (Sandbox Code Playgroud) 这可能是一个特殊的问题,但是可以确定分区键的节点吗?
示例:我有一个分区键id(int),我使用默认的分区程序(Murmur3Partitioner),其中包含3个节点和复制因子"1".我可以确定id = 3的一个节点吗?
CREATE TABLE example_table (
id int,
content text,
PRIMARY KEY (id, content)
)
Run Code Online (Sandbox Code Playgroud)