在 cassandra 中更改分区程序的最佳方法是什么
What is the best way to change the partitioner in cassandra
目前我们正在使用随机分区器,我们想将其更新为 murmur3 分区器。我知道我们可以通过使用 sstable2json 然后使用 json2sstable 手动转换您的 SSTables 来实现这一点。然后我可以使用 sstableloader 或者我们需要使用 murmur3 创建新集群并编写一个应用程序以从旧集群中提取所有数据并写入新集群。
还有其他简单的方法可以实现吗?
没有简单的方法,它是一个相当大的变化,因此可能需要检查它是否绝对必要(做一些基准测试,它可能检测不到)。如果您无论如何都切换到新集群,这更像是一种改变。
实时执行:创建一个名为 murmur3 的新集群,写入两个集群。在后台读取数据并将其复制到新集群,同时复制写入。后台作业完成后,从旧集群翻转读取到新集群,然后您可以停用旧集群。
离线:sstable2json->json2sstable 是一种非常低效的机制。如果您使用 sstable reader 并使用 sstable 编写器(即在 cassandra 代码中编辑 SSTableExport 以编写新的 sstable 而不是转储输出),将会快得多。如果您的数据集较小,则 cqlsh COPY 命令可能可行。
目前我们正在使用随机分区器,我们想将其更新为 murmur3 分区器。我知道我们可以通过使用 sstable2json 然后使用 json2sstable 手动转换您的 SSTables 来实现这一点。然后我可以使用 sstableloader 或者我们需要使用 murmur3 创建新集群并编写一个应用程序以从旧集群中提取所有数据并写入新集群。
还有其他简单的方法可以实现吗?
没有简单的方法,它是一个相当大的变化,因此可能需要检查它是否绝对必要(做一些基准测试,它可能检测不到)。如果您无论如何都切换到新集群,这更像是一种改变。
实时执行:创建一个名为 murmur3 的新集群,写入两个集群。在后台读取数据并将其复制到新集群,同时复制写入。后台作业完成后,从旧集群翻转读取到新集群,然后您可以停用旧集群。
离线:sstable2json->json2sstable 是一种非常低效的机制。如果您使用 sstable reader 并使用 sstable 编写器(即在 cassandra 代码中编辑 SSTableExport 以编写新的 sstable 而不是转储输出),将会快得多。如果您的数据集较小,则 cqlsh COPY 命令可能可行。