Cassandra中的宽分区和数据倾斜有什么区别?
What are the differences between wide partition and data skew in Cassandra?
据我了解,两者都告诉特定分区中的数据量不应多于其他分区。所以我们应该选择合适的分区键来弥补这些问题。但这两个习语到底有什么区别?
虽然它们可能出于相同的原因(数据模型和分区键基数)而发生,但节点之间的数据不平衡可能由于其他原因而发生。
如果分区键的选择性不够,可能会出现分区数据量增长的情况,建议每个分区的最大数量为 100 Mb,但理想情况下不要超过 10 Mb。
虽然基数较低的分区键可能会导致一些偏差,但您也可能会在将令牌分配到环时出现偏差。与 MurmurPartitioner 相比,RandomPartitioner 更容易产生不平衡的结果 - 但即使是 Murmur 也可以通过使用 allocate_tokens_for_keyspace / allocate_tokens_for_local_replication_factor 来改善 - 相同的设置具有不同的名称,具体取决于 C* 或正在使用 DSE 版本,但其想法是为分区程序提供与预期复制因子相关的更多信息,因此它会产生更多的平衡分配。
数据不平衡的另一种方式是拓扑选择——如果你使用 NetworkTopologyStrategy(建议你这样做)和多个机架创建一个带有键空间的集群——除非每个机架的节点数相同,那么数据就不会平衡。
例如(为了演示结果,而不是你会这样做。)
- 机架 1 = 5 个节点
- 机架 2 = 5 个节点
- 机架 3 = 2 个节点。
使用 3 的 RF 和 100 GB 的数据,每个机架将容纳一个副本。机架 1 和 2 中的节点每个大约为 20Gb,机架 3 中的每个节点大约为 50Gb。
这就是为什么在使用机架时通常的建议是在每个 DC 扩展时将节点数增加 3 个。
据我了解,两者都告诉特定分区中的数据量不应多于其他分区。所以我们应该选择合适的分区键来弥补这些问题。但这两个习语到底有什么区别?
虽然它们可能出于相同的原因(数据模型和分区键基数)而发生,但节点之间的数据不平衡可能由于其他原因而发生。
如果分区键的选择性不够,可能会出现分区数据量增长的情况,建议每个分区的最大数量为 100 Mb,但理想情况下不要超过 10 Mb。
虽然基数较低的分区键可能会导致一些偏差,但您也可能会在将令牌分配到环时出现偏差。与 MurmurPartitioner 相比,RandomPartitioner 更容易产生不平衡的结果 - 但即使是 Murmur 也可以通过使用 allocate_tokens_for_keyspace / allocate_tokens_for_local_replication_factor 来改善 - 相同的设置具有不同的名称,具体取决于 C* 或正在使用 DSE 版本,但其想法是为分区程序提供与预期复制因子相关的更多信息,因此它会产生更多的平衡分配。
数据不平衡的另一种方式是拓扑选择——如果你使用 NetworkTopologyStrategy(建议你这样做)和多个机架创建一个带有键空间的集群——除非每个机架的节点数相同,那么数据就不会平衡。 例如(为了演示结果,而不是你会这样做。)
- 机架 1 = 5 个节点
- 机架 2 = 5 个节点
- 机架 3 = 2 个节点。
使用 3 的 RF 和 100 GB 的数据,每个机架将容纳一个副本。机架 1 和 2 中的节点每个大约为 20Gb,机架 3 中的每个节点大约为 50Gb。
这就是为什么在使用机架时通常的建议是在每个 DC 扩展时将节点数增加 3 个。