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