插入查询将替换 Cassandra 聚类分析列中具有相同数据字段的行



我正在学习Cassandra,从v3.8开始。我的示例键空间/表如下所示

CREATE TABLE digital.usage (
provider decimal,
deviceid text,
date text,
hours varint,
app text,
flat text,
usage decimal,
PRIMARY KEY ((provider, deviceid), date, hours)
) WITH CLUSTERING ORDER BY (date ASC, hours ASC)
AND bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';

使用具有分区键作为提供程序和 deviceId 的复合PRIMARY KEY,以便在群集节点之间完成唯一性和分布。然后,群集键是日期和时间。

我很少有观察:

1(对于PRIMARY KEY((provider, deviceid), date, hours),在为小时字段插入多个条目时,仅记录最新的条目,而前一个条目将消失。

2(对于PRIMARY KEY((provider, deviceid), date),在为同一日期字段插入多个条目时,仅记录最新的条目,而以前的条目将消失。

虽然我对上述(第 1 点(行为感到满意,但想知道后台发生了什么。我是否必须了解有关群集顺序键的更多信息?

PRIMARY KEY 应该是唯一的。

大多数RDBMS都会抛出错误,如果你在主键中插入重复的值。

Cassandra 不做先读后写。它会创建具有最新时间戳的新版本记录。在主键中为列插入具有相同值的数据时,将使用最新时间戳创建新数据,并且在查询 (SELECT( 时将返回仅具有最新时间戳的记录。

例:

PRIMARY KEY((provider, deviceid), date, hours)
Insert into digital.usage(provider, deviceid, date, hours,app,flat) values(1.0,'a','2017-07-27',1,"test","test") 
---- This will create a new record with let's say timestamp as 1
Insert into digital.usage(provider, deviceid, date, hours,app,flat) values(1.0,'a','2017-07-27',1,"test1","test1") 
---- This will create a new record with let's say timestamp as 2
SELECT app,flat FROM digital.usage WHERE provider=1.0 AND deviceid='a' AND date='2017-07-27' AND hours=1
Will give 
------------
| app | flat | 
|-----|------|
|test1|test1 |
------------

最新更新