gpt4 book ai didi

couchdb - 使用 CouchDb map/reduce 更快地获取不同数组组件的最小值和最大值?

转载 作者:行者123 更新时间:2023-12-02 14:02:36 27 4
gpt4 key购买 nike

我有一个 CouchDB 数据库,其 View 的值是 [x,y] 形式的成对数字。对于具有相同键的文档,我需要(同时)计算 x 的最小值和 y 的最大值。我正在使用的数据库包含大约 50000 个文档。构建 View 需要几个小时,这似乎有些过分。 (键本身就是长度为三的数组。)我在下面展示了映射和归约函数,但基本问题是:如何加快这个过程?

请注意,内置函数将不起作用,因为值必须是数字,而不是长度为 2 的数组。我可能可以制作两种不同的 View (一种用于 min(x),一种用于 max(y)),但我不清楚如何将它们组合起来以同时获得两个结果。

我当前的 map 功能基本上是这样的

function(doc) {
emit ([doc.a, doc.b, doc.c], [doc.x, doc.y])
}

我的reduce函数看起来像

function(keys, values) {
var x = null;
var y = null;
for (i = 0; i < values.length; i++) {
if (values[i][0] == null) break;
if (values[i][1] == null) break;
if (x == null) x = values[i][0];
if (y == null) y = values[i][1];
if (values[i][0] < x) x = values[i][0];
if (values[i][1] > y) y = values[i][1];
}
emit([x, y]);
}

最佳答案

还有两个注释。使用 Math.max() 和 Math.min() 应该会快一点。

function(keys, values) {
var x = -Infinity,
y = Infinity;
for (var i = 0, v; v = values[i]; i++) {
x = Math.max(x, v[0]);
y = Math.min(y, v[1]);
}
return [x, y];
}

如果 CouchDB 将这些值视为字符串,那是因为您将它们作为字符串存储在文档中。

希望有帮助。

关于couchdb - 使用 CouchDb map/reduce 更快地获取不同数组组件的最小值和最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5247758/

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