Cassandra Skinny vs Wide Row用于时间序列-消耗
我希望每秒将一个值存储到一个表中。因此,我测试了两种方法。如果我理解正确,数据应该存储在几乎相同的内部 宽行Cassandra Skinny vs Wide Row用于时间序列-消耗,cassandra,time-series,consumption,Cassandra,Time Series,Consumption,我希望每秒将一个值存储到一个表中。因此,我测试了两种方法。如果我理解正确,数据应该存储在几乎相同的内部 宽行 CREATE TABLE timeseries ( id int, date date, timestamp timestamp, value decimal, PRIMARY KEY ((id, date), timestamp) ) WITH CLUSTERING ORDER BY (timestamp DESC) AND compaction={'class
CREATE TABLE timeseries (
id int,
date date,
timestamp timestamp,
value decimal,
PRIMARY KEY ((id, date), timestamp)
) WITH CLUSTERING ORDER BY (timestamp DESC) AND
compaction={'class': 'DateTieredCompactionStrategy'}
and compression = { 'sstable_compression' : 'DeflateCompressor' };
CREATE TABLE timeseries(
id int,
date date,
"0" decimal, "1" decimal,"2" decimal, -- ... 86400 decimal values
-- each column index is the second of the day
PRIMARY KEY ((id, date))
)
瘦行
CREATE TABLE timeseries (
id int,
date date,
timestamp timestamp,
value decimal,
PRIMARY KEY ((id, date), timestamp)
) WITH CLUSTERING ORDER BY (timestamp DESC) AND
compaction={'class': 'DateTieredCompactionStrategy'}
and compression = { 'sstable_compression' : 'DeflateCompressor' };
CREATE TABLE timeseries(
id int,
date date,
"0" decimal, "1" decimal,"2" decimal, -- ... 86400 decimal values
-- each column index is the second of the day
PRIMARY KEY ((id, date))
)
测试:
- 10个不同的id
- 100万个值(每个id 100.000)
- 每个值增加一分钟
在我的测试中,对于100万个值,用于窦房结函数的瘦行方法只消耗一半的存储空间。即使是随机测试也很重要。有人能解释这种行为吗?这些模式之间的唯一区别是单元格键 宽行模型的示例单元格:
["2017-06-09 15\\:05+0600:value","3",1496999149885944]
| | | |
timestamp column value timestamp
以及“Skinny row”模型的示例单元:
["0","3",1497019292686908]
| | |
column value timestamp
您可以清楚地看到宽行模型单元格键是时间戳值和值的列名。对于skinny模型,单元格键仅为列名。
宽行模型的开销是时间戳(8字节)和列名的大小(值)。您可以保持列名较小,而不是使用时间戳,使用int并输入一天中的秒数,就像您的瘦行列名一样。这将节省更多空间。谢谢。我做了这个测试,并用整数存储了所有的时间戳。结果几乎是一样的。很高兴能更好地理解卡桑德拉。