排序:Cassandra 与 RDBMS

Ordering: Cassandra vs RDBMS

在关系数据库中,我们在编写提取查询时决定顺序。但是对于 Cassandra,我们必须在创建表时这样做。

造成这种差异的原因是什么?

订购或排序数据在时间和 space 方面都很昂贵。有必要处理整个数据集来决定顺序,并且排序不能完全以分布式方式完成。最好的算法的复杂度为 O(n * log n)。在实践中,当数据适合主内存时(不需要将中间数据存储在磁盘上或从另一个节点移动)并且其复杂度为 O(n * n) 时,通常会使用快速排序,但在通常情况下性能优于合并-排序或其他 O(n * log n) 算法。

RBDMS 通常不是分布式的,所以如果数据不适合主存,性能会受到磁盘 IO 的影响。在分布式数据库和分布式数据的情况下,需要在节点之间移动数据,这通常非常昂贵。

在 RDBMS 中查询花费大量时间的情况并不少见。因此提供了工具来调查查询计划,因此可以调整查询或添加必要的索引。在最坏的情况下,它需要具体化查询结果,更改模式,或者放弃并移动到另一个专为分析处理而设计的 DBMS。

Cassandra 选择了不同的方法:它专注于性能而不支持昂贵的操作。相反,它需要用户提前考虑数据的使用和未来的查询,并根据未来的使用来设计模式。要获得有序结果,需要将所需的列包含到聚簇键中。但是,顺序将按分区维护,而不是跨分区维护。这是因为决定新记录的全局顺序可能需要查看来自其他节点的数据的相同原因。

有限的查询支持允许在 Cassandra 中提供性能保证。