Riak:我的2被打破了吗?

时间:2014-07-22 08:55:37

标签: riak secondary-indexes

我们通过清理cronjob和riak发生了一些奇怪的事情:

我们存储的对象(邮箱)具有2i用于修改日期(这是一个unix时间戳)。 有一个cronjob运行频繁删除所有未在180天内修改的邮箱。然而,我们发现有证据表明这个cronjob删除了过去三天内修改过的一些(非常少)邮箱的邮箱。 在对每行代码进行多次检查和调试之后,我有信心,这不是cronjob的问题。

  • 我还追溯了对该存储桶的所有删除调用 - 没有其他人在那里删除对象。
  • 当然我也和Riak一起检查了r = ALL的邮箱:他们肯定已经走了。 (并且它们与w = QUORUM一起存储)
  • 我还检查了日志:更新邮箱确实成功了(写操作没有报告错误)

这给我留下了两个可能的原因:

  • riak丢失数据(我不愿意轻易相信)
  • 二级索引已损坏,对它们的查询返回错误的密钥

所以我的问题是:

  • 2可以真正破解吗?
  • 有可能验证吗?
  • 我错过了一些完全不同的东西吗?

干杯, 的Matthias

1 个答案:

答案 0 :(得分:1)

Riak中的二级索引查询是覆盖查询,这意味着它们将仅使用一个存储的副本,而不执行仲裁读取。

当您使用w = QUORUM进行编写时,如果将n_val设置为3或更高,则可能无法更新一个(或多个)副本,同时操作仍被视为成功。如果这是为覆盖查询选择的那个,则最终可能会根据旧值进行删除。为了避免这种情况,您需要使用w = ALL执行更新。