1

给定 Riak 中的数字二级索引,我可以进行范围查询,例如:

“查找索引“sn”在 1 到 10 之间的所有值*”。

有没有办法找到数字索引的最大值?IE

“找到索引“sn”的最大值。

* 它实际上找到了所有主键(不是值本身),但在这里没关系。

4

2 回答 2

1

不,你不能要求 Riak 给你 2i 的最大值。您将必须执行一个 map/reduce 作业并解析每个 2i 值,其中包括一个 reduce 作业以找到最大值。

如果这是您的应用程序的重要组成部分,那么您可以通过其他方式解决该问题。找到最大值后,您可以将二级索引添加到表明它是最大值的值。如果最大值随时间变化,您可以:

  • maxval_int在 2i所在的桶上映射/减少1
  • 如果只有一个结果,则返回它。
  • 如果有多个结果,则减少以找到最大值。
  • maxval_int从不再是最大值的每个对象中删除索引。
  • 添加新值时检查当前最大值,相应地更新索引。

类似read-repair的小功能用于处理集群中的节点被分区的情况。

HTH。

于 2012-06-07T21:56:37.533 回答
0

或者,如果您的 maxval 单调增加,您可以将其存储在特殊键下,例如 max_2i_index=25 然后如果您将存储桶设置为允许兄弟姐妹,您可以通过提供简单的突变器和冲突解决器来解决潜在的兄弟姐妹。您也可以考虑适当设置 R、W、PR、PW、N 以避免不一致。

于 2012-06-09T17:23:46.743 回答