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