Cassandra被定位为可扩展的快速数据库。从技术细节上来说,我的意思是为什么上述目标无法通过二级索引来实现?
Cassandra确实具有二级索引。但是二级索引的用法不适用于分布式数据库,这是因为每个节点仅包含整个数据集的一个子集。
我之前写过一个答案,其中讨论了二级索引查询的基本细节:
虽然它应该有助于您了解发生了什么,但是该答案是根据首先通过分区键查询的上下文编写的。这是一个重要的区别,因为分区内的二级索引用法应表现良好。
问题是,仅通过二级索引查询时,Cassandra无法保证您的所有数据都可以由单个节点提供。发生这种情况时,Cassandra将一个节点指定为协调器,该协调器反过来向所有其他节点查询指定的索引值。
本质上,二级索引的使用不是强制从单个节点执行顺序读取,而是强制Cassandra从所有节点执行随机读取。现在您不仅有了磁盘搜索时间,而且还有网络时间使事情变得复杂。
对于Cassandra建模,建议将数据复制到新表中以支持所需的查询。保持数据同步会增加其他一些复杂性。但是(正确完成后)可以确保您的查询确实可以由单个节点提供。这是在构建模型时需要进行的权衡。您可以拥有便利或性能,但不能两者兼得。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句