查询我想解雇
select * from t1 where c1 > 1000 and c2 > 1Million and c3 > 8Million
表t1的数据模型
create table t1 {
c1 int,
c2 int,
c3 int,
c4 text
}
我应该将哪些列用作分区键,哪些列用作群集键。 c1,c2,c3的值可以在1到10百万之间。
如果我执行主键((c1,c2,c3)),则值将在群集中传播。但是当我开火>对c1,c2,c3列的查询Cassandra如何知道要联系哪些节点或者进行完整的分片扫描?
答案 0 :(得分:1)
它不允许您在没有ALLOW FILTERING
的情况下进行查询,这使得它可以读取整个数据集,因为它遍及整个群集。它会读取所有东西,丢弃不匹配的东西。强烈建议永远不要在开发/测试之外使用var groupUpdate = function(id, callback) {
return firebase.database().ref('groups/').child(id).on('child_changed', (snapshot) => {
callback({key: snapshot.key, value: snapshot.val()});
});
};
module.exports = {
groupUpdate: groupUpdate
}
,除非确定你在做什么。
答案 1 :(得分:0)
分区键只能用等号过滤,而不能用你所拥有的不等号过滤。不等式只能与聚类键一起使用。
如果您的表没有那么多行,您可以使用存储桶策略。使用它,您可以创建一个辅助列作为唯一具有预定义值的分区键(例如1)。
create table t1 {
bucket int,
c1 int,
c2 int,
c3 int,
c4 text,
PRIMARY KEY (bucket, c1, c2, c3)
}
因为您有一个分区,所以它不足以扩展包含许多行的表。
如果你有很多行需要分区,那么你必须重新考虑你的策略,并考虑:
在数据中查找能够对数据进行分区的某种键(或键),同时在需要时帮助对其进行过滤。然后,您将在上面的示例中将其用作分区键。也许对数据进行非规范化可以帮助实现该密钥(例如:创建一个名为Status for Low / Medium / High数字的列,您可以在以后的群集密钥的不等式过滤中更好地过滤)。
规划要由分析框架(如Spark)查询的表格。在分析中,通常需要按任何列进行查询,具有等同性或不等式。