我知道我们不应该创造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';
谢谢,
哈利
答案 0 :(得分:4)
Cassandra中的基本表设计规则称为查询驱动,这意味着您通常会在创建表模式之前了解要查询的内容。
如果你只想简单地返回数据库中的所有行(select *)(这不是Cassandra的常见用例,因为Cassandra旨在存储非常非常大量的数据),无论你设计什么都没关系。但Cassandra可能不是这种情况下的最佳选择。
如何确保Cassandra的良好桌面设计? 参考:Basic Rules of Cassandra Data Modeling