您好我们在Cassandra有一张 table ,其结构如下
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
3 回答
直接根据vuid选择记录>>你的表就是这样做的 . 它已经将vuid作为主键 .
根据最后看到或第一次看到的范围选择vuids >>
这里有两个选项:在聚类列中添加last_seen或first_seen(您只能在
clustering columns
上进行范围选择)在这种情况下,您需要在查询中提供vuid以及last_seen和first_seen . 我不认为你想要那个 .
要么
创建另一个具有相同数据的表(是的,在C *中,我们为具有相同数据的不同查询创建另一个表,并根据查询更改键 . 欢迎使用数据复制) . 在此表中,您必须添加一个虚拟列作为主键,并将last_seen和first_seen作为集群键 . 您在查询中传递这些
seen
个日期以获取vuid .希望这很清楚 .
在Cassandra(查询驱动模型)中,创建表以满足查询,这与关系数据库数据建模不同 .
在cassandra中,主键由2种类型的键组成
1.Partition key - >定义分区
2.Clustring key - >定义分区中的顺序
取决于用途 .
如果分区键和clustring键中提到的列不足以提供唯一性,那么我们需要在主键中添加关系的主键 .
除了作为提示: -
[列名XX] =? - >相等检查比在分区键中添加列名
[列名yy]> =? - >范围检查在Clustring键中添加列名
这里有问题,没有提到你应该提供什么样的查询 . 请根据可以创建的表共享查询 .