我是否违反了 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
我知道我们不应该在单个 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