【发布时间】:2021-09-15 11:41:55
【问题描述】:
在关系数据库中,我们在编写获取查询时决定排序。但是对于 Cassandra,我们必须在创建表时这样做。
造成这种差异的原因是什么?
【问题讨论】:
-
订单集合总是很容易搜索
-
旧,但仍然非常相关:stackoverflow.com/questions/35708118/…
在关系数据库中,我们在编写获取查询时决定排序。但是对于 Cassandra,我们必须在创建表时这样做。
造成这种差异的原因是什么?
【问题讨论】:
对数据进行排序或排序在时间和空间方面都是昂贵的。需要处理整个数据集来决定顺序,并且排序不能完全以分布式方式完成。最好的算法复杂度为 O(n * log n)。在实践中,当数据适合主内存(不需要将中间数据存储在磁盘上或从另一个节点移动)并且它的复杂度为 O(n * n) 时,通常使用快速排序,但在通常情况下比合并更好 -排序或其他 O(n * log n) 算法。
RBDMS 通常不是分布式的,所以如果数据不适合主存,性能会受到磁盘 IO 的影响。在分布式数据库和分布式数据的情况下,需要在节点之间移动数据,这通常会非常昂贵。
在 RDBMS 中查询花费大量时间的情况并不少见。因此,提供了调查查询计划的工具,因此可以调整查询或添加必要的索引。在最坏的情况下,它需要具体化查询结果、更改架构,或者放弃并转移到另一个专为分析处理而设计的 DBMS。
Cassandra 选择了不同的方法:它专注于性能并且不支持昂贵的操作。相反,它要求用户提前考虑数据使用和未来的查询,并根据未来的使用情况设计模式。要获得有序的结果,有必要将所需的列包含到集群键中。但是,订单将按分区维护,而不是跨分区维护。这与决定新记录的全局顺序可能需要查看来自其他节点的数据的原因相同。
有限的查询支持允许在 Cassandra 中提供性能保证。
【讨论】: