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

Am I violating the data modelling rule in Cassandra?

我知道我们不应该在单个 table 下创建 'N' 个分区,因为在这种情况下,它会尝试从 N 个分区可用的节点中查询。

(为理解和安全修改示例)

如果我有一个 table 喜欢 'user'

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

其中 user_id 是唯一的。

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

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';

Cassandra 中的一个基本 table 设计规则称为 查询驱动,这意味着您通常会在进行 table 架构。

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

如何确保在 Cassandra 中进行良好的 table 设计? 参考:Basic Rules of Cassandra Data Modeling