我是否违反了Cassandra中的数据建模规则?

时间:2018-01-24 04:41:12

标签: apache cassandra data-modeling cassandra-3.0

我知道我们不应该创造N' N'单个表下的分区数,因为在这种情况下,它尝试从分区可用的N个节点进行查询。

(修改理解和安全的例子)

如果我有一个类似用户'

的表格
CREATE TABLE user(
   user_id int PRIMARY KEY,
   user_name text,
   user_phone varint
   );

其中user_id是唯一的。

示例 - 要从表中获取所有用户,我使用查询:

select * from user;  

所以这意味着它会进入' user_id'的分区的所有节点。可用。由于我在这里使用了user_id作为分区/主键,因此它将根据partition_id分散到所有节点。

没事吗?或者在Cassandra中有更好的设计方法吗?

已编辑:

将单个分区保留为' uniquekey'并且按user_name排序将具有uniquekey将创建单个分区的优势。与上述相比,它是更好的设计吗?

CREATE TABLE user(
   user_id int,
   user_name text,
   user_phone varint,
   primary key ('uniquekey', user_name));



select * from user where user_id = 'uniquekey';

谢谢,
哈利

1 个答案:

答案 0 :(得分:4)

Cassandra中的基本表设计规则称为查询驱动,这意味着您通常会在创建表模式之前了解要查询的内容。

如果你只想简单地返回数据库中的所有行(select *)(这不是Cassandra的常见用例,因为Cassandra旨在存储非常非常大量的数据),无论你设计什么都没关系。但Cassandra可能不是这种情况下的最佳选择。

如何确保Cassandra的良好桌面设计? 参考:Basic Rules of Cassandra Data Modeling