与Cassandra的分区相比,我想讨论PlayORM的虚拟分区是否总是对数据进行分区的最佳方式。
模式:
对于一个TimeStamp,有500 K行,对于特定的设备ID,有10 K行
如果我想在两个列上进行分区,比如TimeStamp和设备ID。
如果“设备ID”是以“Cassandra”方式划分的,那么特定“设备ID”的所有记录都将存储在相邻位置的磁盘中,并且可以像playorm那样对“TimeStamp”进行虚拟分区。与PlayORM的方法相比,我可能更喜欢这种方法,因为使用Cassandra的分区方法,如果它们位于磁盘上物理上相邻的位置,则可以快速获取特定设备ID的所有记录,因为它们的数字较少(仅为10K)。这可能比PlayORM在节点上平均分配所有分区的所有记录的方法要好,因为那时数据将随机分布在磁盘上,从而导致许多磁盘查找,显然这会减慢速度。因此,即使在PlayORM的方法中,我们通过在集群中的节点间划分行来解决分治问题,但是由于分治导致的加速可能被高磁盘搜索所抵消,因为行可以随机地分散在节点上(相对于Cassandra的分区,所有的分区都在一起)。
以上是否是一个有效的观点,还是在我的理解中有一些错误?
发布于 2013-03-22 20:16:04
这可能是可能的,但你也假设在一个卡桑德拉节点上,也不会有太多的寻求,因为所有的压缩,可以发生。在卡桑德拉经常发生SizeTiered或水平压实。最好的办法是只编写一个实际的测试用例来测试这两种场景。有时候,花上几天的时间来真正检验理论,最终会有很大的回报。要真正测试这一点,如果读取设置为QUOROM(即。每次读取时命中2个节点)。如果有3个具有RF=3的节点,您可能会看到相同的性能。
无论如何,测试是无可替代的。在测试之前,我们发现了许多被“说”的错误,所以最好运行代码,看看它是如何为您的情况工作的。
院长
https://stackoverflow.com/questions/15578699
复制相似问题