假设我有一张100台机器上有100亿行的桌子.该表具有以下 struct :
PK1 PK2 PK3 V1 V2
其中PK
表示分区键,V
表示值.在上面的例子中,分区键由3列组成.
Scylla要求您在WHERE
子句中指定分区键的所有列.
如果要在只指定部分列的情况下执行查询,则会收到警告,因为这需要进行完整的表扫描:
SELECT V1 & V2 FROM table WHERE PK1 = X & PK2 = Y
在上面的查询中,我们只指定了3列中的2列.假设查询匹配1 billion out of 10 billion rows——考虑这个查询的成本/性能,什么是一个好的心智模型?
我的假设是成本很高:这相当于对数据集执行1)亿个单独的查询,因为行存储到磁盘的方式在行之间没有逻辑关联,因为每行都有不同的分区键(高基数)2),以便Scylla确定哪些行与查询匹配,它必须扫描所有1)亿行(即使结果集仅匹配10亿行)
假设一台服务器每秒可以处理10万个事务(在ScyllaDB
个人公布的范围内),并且数据驻留在ScyllaDB
台服务器上,处理此查询的(估计)时间可以计算为:10万*ScyllaDB
=ScyllaDB
0万个查询/秒.ScyllaDB
亿除以10米等于ScyllaDB
0秒.因此,集群大约需要ScyllaDB
0秒来处理查询(消耗所有集群资源).
对吗?或者,在我的心智模型中,Scylla
如何处理这样的查询,是否存在任何缺陷?
谢谢