选择Cassandra行键

时间:2015-02-05 06:08:59

标签: cassandra

在cassandra中为列族选择rowid时应考虑哪些标准?我想迁移一个不包含任何主键的关系数据库。在那种情况下,什么应该是最好的rowid选择?

3 个答案:

答案 0 :(得分:1)

如果可能,使用可以从数据集派生的自然键(例如,电话簿的phone_number,用户表的user_name)。如果那不可能,请使用UUID。

答案 1 :(得分:0)

考虑cassandra系统的主键时需要考虑很多事情

  1. 了解主要分区键之间的区别

    CREATE TABLE用户(   user_name varchar PRIMARY KEY,   密码varchar, );

  2. 在上述情况下,主键和分区键是相同的。

    CREATE TABLE users (
      user_name varchar,
      user_email varchar,
      password varchar,
      PRIMARY KEY (user_name, user_email)
    );
    

    此处主键是user_name和user_email,其中user_name是分区键。

    CREATE TABLE users (
      user_name varchar,
      user_email varchar,
      password varchar,
      PRIMARY KEY ((user_name, user_email))
    );
    

    此处主键和分区键都等于user_name,user_email

    1. 仔细定义分区键。分区键用于cassandra的查找,因此您必须通过查看您的选择查询来定义分区键。
    2. Cassandra使用前面的示例

      组织数据,其中分区键用于查找

      对于第一种情况:

      user_name ---> email:password email:data_of_birth 
      
      ABC --> abc@gmail.com:abc123 abc@gmail.com:22/02/1950 abc@yahoo.com:def123...
      

      在第二种情况下:

      user_name,email ---> password data_of_birth ABC,abc@gmail.com --> abc123 22/02/1950
      
      1. 使包含许多数据的分区键更复杂将确保您有许多行而不是包含许多列的单行。平衡您可能引发的行数与每行可能具有的列数可能是有益的。拥有令人难以置信的大量小行可能对读取不太有益

      2. 分区键指示数据如何跨节点分布,因此请考虑是否有热点并决定是否要进一步分解。

      3. 案例1:   名为ABC的所有用户都将位于单个节点中

        案例2:   名为ABC的用户可能在也可能不在单个节点中,具体取决于与其电子邮件一起生成的密钥。

答案 2 :(得分:0)

您的分区键应该是您希望存储数据的方式以及如何始终查找数据。您只能通过分区键检索数据,因此选择您自然会查找的内容非常重要(这就是为什么有时数据在Cassandra中通过将其存储在模仿物化视图的多个表中而非规范化的原因。)

如果您有时想要检索分区中的所有数据并且有时只想要其中的一些数据,则群集列密钥(如果有)最有用。这对于时间序列数据非常有用,因为您可以在timeuuid上对数据进行聚类,对其进行排序,然后对数据进行有效的范围查询。