你好我们在Cassandra有一个表,其结构如下
CREATE TABLE dmp.user_profiles_6 (
vuid text PRIMARY KEY,
brand_model text,
first_seen timestamp,
last_seen timestamp,
total_day_count int,
total_usage_count int,
user_type text
) WITH bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.LeveledCompactionStrategy'}
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.1
AND speculative_retry = '99PERCENTILE';
我从datastax读了几篇关于Cassandra数据建模的文章。在其中说主键由分区键和聚类键组成。
现在在上面的例子中,我们有一个vuid列,它是每个唯一用户的标识符。这是主键。我们拥有400M独特用户。那么现在是否意味着Cassandra正在制作400M分区?那么这必然会降低性能。在一篇关于数据建模的数据文章中,示例表显示了uuid列上的主键,该列是唯一且具有非常高的基数。我完全糊涂了,任何人都可以帮我确定哪个列可以设置为分区键,哪个列可以设置为群集密钥?
查询可以如下: 1.直接根据vuid选择记录 2.根据最后看到或第一次看到的范围选择vuids
答案 0 :(得分:1)
you need to create 3 tables as below.
table 1:-
CREATE TABLE dmp.user_profiles_ZZZZ (
Dummy_column uuid ,
vuid text,
........other colums
PRIMARY KEY((Dummy_column,vuid))
) .....
table 2:-
CREATE TABLE dmp.user_profiles_YYYY (
Dummy_column uuid ,
.......other colums
PRIMARY KEY((Dummy_column),first_seen)
) .....
CREATE TABLE dmp.user_profiles_XXXX (
Dummy_column uuid ,
.....other colums
PRIMARY KEY((Dummy_column),last_seen)
) .....
答案 1 :(得分:1)
clustering columns
上进行范围选择)seen
个日期以获取vuid。 希望这很清楚。
答案 2 :(得分:0)
在Cassandra(查询驱动模型)中,创建表以满足查询,这与关系数据库数据建模不同。
在cassandra中,主键由2种类型的键组成
1.分区键 - >定义分区
2.Clustring key - >定义分区中的顺序
取决于用途。
如果分区键和clustring键中提到的列不足以提供唯一性,那么我们需要在关键字中添加关键的主键 主键。
除了提示之外: -
[列名XX] =? - >等分检查比在分区键中添加列名
[列名yy]> =? - >范围检查在Clustring键中添加列名
这里有问题,没有提到你应该提供什么样的查询。 请根据可以创建的表共享查询。