0

与 Cassandra 的分区相比,我想讨论 PlayORM 的虚拟分区是否始终是分区数据的最佳方式。

架构:

  • 时间戳
  • 设备ID
  • 设备名称
  • 设备所有者

对于 TimeStamp,有 500 K 行,对于特定的 Device ID,有 10 K 行

如果我想在 2 列上进行分区,请说时间戳和设备 ID。我有以下方法可以做到这一点:

  1. 使用 PlayORM 在两列上进行“虚拟”分区,这样任何列的任何虚拟分区的数据都分布在所有节点上。
  2. 使用 Cassandra 对其中一列的内置分区支持,并使用 PlayORM 的方法在其他列上创建“虚拟”分区。

如果“设备 ID”以“Cassandra”方式进行分区,则特定“设备 ID”的所有记录将存储在磁盘中的连续位置,并且可以像 playorm 那样继续使用“时间戳”的虚拟分区方法。我可能比 PlayORM 的方法更喜欢这种方法的原因是,使用 Cassandra 的分区方法,如果特定设备 ID 的所有记录位于磁盘上的物理连续位置,则可以快速获取它们,因为它们的数量较少(仅 10K)。这可能比 PlayORM 将所有分区的记录均匀分布在节点上的全部方法更好,因为这样数据将随机分布在磁盘上,导致许多磁盘寻道,显然这会减慢速度。所以即使在 PlayORM 的方法中,

以上似乎是一个有效的观点,还是我的理解有问题?

4

1 回答 1

0

这可能是真的,但您还假设在一个 cassandra 节点上,由于可能发生所有压缩,因此不会有很多搜索。使用 SizeTiered 或 Leveled 压缩在 cassandra 中不断发生压缩。最好的办法可能是编写一个实际的测试用例来测试这两种情况。有时花几天时间来真正检验理论最终会带来巨大的回报。要真正测试这一点,如果读取设置为 QUOROM(即每次读取命中 2 个节点),您可能需要一个 6 节点集群。如果您有 3 个 RF=3 的节点,您可能会看到相同的性能。

无论如何,测试是无可替代的。在我们测试之前,我们发现很多“说”的东西都是错误的,因此最好运行代码并查看它对您的情况的影响。

院长

于 2013-03-22T20:16:04.497 回答