给定 Riak 中的数字二级索引,我可以进行范围查询,例如:
“查找索引“sn”在 1 到 10 之间的所有值*”。
有没有办法找到数字索引的最大值?IE
“找到索引“sn”的最大值。
* 它实际上找到了所有主键(不是值本身),但在这里没关系。
不,你不能要求 Riak 给你 2i 的最大值。您将必须执行一个 map/reduce 作业并解析每个 2i 值,其中包括一个 reduce 作业以找到最大值。
如果这是您的应用程序的重要组成部分,那么您可以通过其他方式解决该问题。找到最大值后,您可以将二级索引添加到表明它是最大值的值。如果最大值随时间变化,您可以:
maxval_int
在 2i所在的桶上映射/减少1
。maxval_int
从不再是最大值的每个对象中删除索引。类似read-repair的小功能用于处理集群中的节点被分区的情况。
HTH。
或者,如果您的 maxval 单调增加,您可以将其存储在特殊键下,例如 max_2i_index=25 然后如果您将存储桶设置为允许兄弟姐妹,您可以通过提供简单的突变器和冲突解决器来解决潜在的兄弟姐妹。您也可以考虑适当设置 R、W、PR、PW、N 以避免不一致。