首页 文章

对cassandra数据模型的困惑

提问于
浏览
0

您好我们在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 回答

  • 1
    • 直接根据vuid选择记录>>你的表就是这样做的 . 它已经将vuid作为主键 .

    • 根据最后看到或第一次看到的范围选择vuids >>
      这里有两个选项:在聚类列中添加last_seen或first_seen(您只能在 clustering columns 上进行范围选择)
      在这种情况下,您需要在查询中提供vuid以及last_seen和first_seen . 我不认为你想要那个 .
      要么
      创建另一个具有相同数据的表(是的,在C *中,我们为具有相同数据的不同查询创建另一个表,并根据查询更改键 . 欢迎使用数据复制) . 在此表中,您必须添加一个虚拟列作为主键,并将last_seen和first_seen作为集群键 . 您在查询中传递这些 seen 个日期以获取vuid .

    希望这很清楚 .

  • 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)
    )  .....
    
  • 0

    在Cassandra(查询驱动模型)中,创建表以满足查询,这与关系数据库数据建模不同 .

    在cassandra中,主键由2种类型的键组成

    1.Partition key - >定义分区

    2.Clustring key - >定义分区中的顺序

    取决于用途 .

    如果分区键和clustring键中提到的列不足以提供唯一性,那么我们需要在主键中添加关系的主键 .

    除了作为提示: -

    [列名XX] =? - >相等检查比在分区键中添加列名

    [列名yy]> =? - >范围检查在Clustring键中添加列名

    这里有问题,没有提到你应该提供什么样的查询 . 请根据可以创建的表共享查询 .

相关问题