在读取之前安排读取修复
Schedule read repair before read
我有一个从 Cassandra 读取数据的报告工具。配置是一致性级别是 LOCAL_QUORUM,压缩策略是大小分层和 RF=3。
当从报告工具向 Cassandra 发出拉取请求时,根据 Cassandra 的设计,它会触发读取修复以实现数据一致性。这实际上是一个很好的设计。但是读取修复很昂贵并且报告需要更长的时间。
我的报告用户仅在早上 6 点后才开始生成报告IST.Is有任何方法可以在用户开始使用报告之前安排读取修复。例如,我会在美国标准时间早上 6 点之前安排并完成读取修复。因此,在美国标准时间上午 6 点之后,所有数据都将包含在集群中。
在这种情况下,一旦报告开始从 Cassandra 读取数据,它不应该再次触发读取修复,因为我们刚刚完成读取修复作为计划作业。在 IST 早上 6 点之后,我可以接受不一致的数据 writes/updates。哪种技术适合安排读取修复?如果读取修复是最近完成的,我们真的可以避免读取修复吗?
-苏约达
如果您使用传统的反熵修复,那么您可以在一致性级别进行读取:ONE。
反熵修复有很多种方法,最明显的是nodetool repair
(可能用nodetool repair -par -inc
或类似的命令行开关),或者使用一些第三方工具来修复小范围,例如 Cassandra Range Repair tool maintained by Brian Gallew or Spotify's Cassandra Reaper.
是什么让您认为读取修复会减慢速度?检查 (jmx) org.apache.cassandra.metrics:type=ReadRepair,name=RepairedBackground
和 org.apache.cassandra.metrics:type=ReadRepair,name=RepairedBlocking
以验证是否正在维修。读取修复只有在读取数据不一致时才会启动,这不应该很常见。
如果这确实是个问题,您可以通过将几率设置为 0 来禁用 table 上的读取修复。
ALTER TABLE yourtable WITH read_repair_chance = 0;
我有一个从 Cassandra 读取数据的报告工具。配置是一致性级别是 LOCAL_QUORUM,压缩策略是大小分层和 RF=3。
当从报告工具向 Cassandra 发出拉取请求时,根据 Cassandra 的设计,它会触发读取修复以实现数据一致性。这实际上是一个很好的设计。但是读取修复很昂贵并且报告需要更长的时间。
我的报告用户仅在早上 6 点后才开始生成报告IST.Is有任何方法可以在用户开始使用报告之前安排读取修复。例如,我会在美国标准时间早上 6 点之前安排并完成读取修复。因此,在美国标准时间上午 6 点之后,所有数据都将包含在集群中。
在这种情况下,一旦报告开始从 Cassandra 读取数据,它不应该再次触发读取修复,因为我们刚刚完成读取修复作为计划作业。在 IST 早上 6 点之后,我可以接受不一致的数据 writes/updates。哪种技术适合安排读取修复?如果读取修复是最近完成的,我们真的可以避免读取修复吗? -苏约达
如果您使用传统的反熵修复,那么您可以在一致性级别进行读取:ONE。
反熵修复有很多种方法,最明显的是nodetool repair
(可能用nodetool repair -par -inc
或类似的命令行开关),或者使用一些第三方工具来修复小范围,例如 Cassandra Range Repair tool maintained by Brian Gallew or Spotify's Cassandra Reaper.
是什么让您认为读取修复会减慢速度?检查 (jmx) org.apache.cassandra.metrics:type=ReadRepair,name=RepairedBackground
和 org.apache.cassandra.metrics:type=ReadRepair,name=RepairedBlocking
以验证是否正在维修。读取修复只有在读取数据不一致时才会启动,这不应该很常见。
如果这确实是个问题,您可以通过将几率设置为 0 来禁用 table 上的读取修复。
ALTER TABLE yourtable WITH read_repair_chance = 0;