gpt4 book ai didi

java - Riak/Java - 使用 AND 条件和排序对二级索引进行 MapReduce 查询的最佳实践

转载 作者:行者123 更新时间:2023-11-30 04:47:21 26 4
gpt4 key购买 nike

我正在尝试使用Java辅助索引Riak上实现Map/Reduce功能。具体来说,我正在尝试根据特定索引键实现 AND 条件+排序结果。此功能将用于拥挤的桶(以亿存储元素的顺序)。

虽然 Riak 本身不支持 AND 条件和排序,但我想听到关于如何实现这一点的不同观点(考虑到如此大的存储桶上的性能问题)。

假设我有以下数据:

key: key1
index-field1_bin: car
index-field2_int: 1

key: key2
index-field1_bin: car
index-field2_int: 3

key: key3
index-field1_bin: bike
index-field2_int: 4

key: key4
index-field1_bin: car
index-field2_int: 2

如何在 Java 中检索满足以下条件的项目:

index-field1_bin == car
3 <= index-field2_int <= 4

然后像 index-field2_int ASC 一样对它们进行排序。

谢谢

最佳答案

我可能已经找到了解决方案,但我仍然需要对其进行一些认真的基准测试。

IndexQuery iq = new BinValueQuery(BinIndex.named("field1"),
"bucketName", "car");
Function mapFunction = new JSSourceFunction(
"function(v) {" +
"var range = v.values[0].metadata.index.field2;" +
"if (range <= 4 && range >= 2) {" +
"return [v.values[0]];" +
"}" +
"return [];" +
"}");
Function reduceFunction = new JSSourceFunction(
"function(v) {" +
"return [v.sort(function(a, b) {" +
"return a.metadata.index.field2 - b.metadata.index.field2;" +
"}" +
")];" +
"}");
MapReduceResult result = RiakUtils.getClient().mapReduce(iq)
.addMapPhase(mapFunction)
.addReducePhase(reduceFunction)
.execute();

// Print the results
System.out.println(result.getResultRaw());

基本上,查询会获取所有“汽车”项目,然后我使用其范围( map )过滤这些项目,并使用 MapReduce 操作对它们进行排序(减少)。

关于java - Riak/Java - 使用 AND 条件和排序对二级索引进行 MapReduce 查询的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10662221/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com