在Couchbase JavaScript视图中是否有可能的全局变量

is it possible global variable in couchbase javascript view?

本文关键字:有可能 全局变量 是否 Couchbase JavaScript 视图      更新时间:2023-09-26

我有我的reduce方法,我想计时它需要多少,所以我想基本上做一些事情:

function(key, values, rereduce) {
  var start_time = new Date();
  // my calcs here.
  var totallength = 0; // this is wrong... any global variables or closure?
  var totaltime = 0; // this is wrong... any global variables or closure?
  time_calc_took = new Date() - start_time;
  totallength += values.length;
  totaltime += time_calc_took;
  return([totallength, totaltime, someother_results]);
}

但是,由于总长度和总时间不是全局变量,我无法真正衡量我的视图性能,我想知道它在不同的行数上运行需要多少时间。

  1. 函数内没有全局变量。它只有局部变量。全局变量只能在全局范围内定义(函数之外(。但是在 couchbase 中,你不能定义 reduce 函数之外的任何变量。

  2. 如果你想测量视图性能,你的代码是完全错误的,因为你只需要测量它的一部分,因为这个函数可以被多次调用。阅读有关reduce函数的couchbase文档(请参阅下面的链接(。

  3. 最后,您编写的代码不会测量视图性能,因为它只能测量视图索引性能。而且视图性能不等于索引性能,主要是因为索引过程在大多数情况下在后台运行,并且不会影响视图性能。

我建议您阅读有关视图及其工作原理的文档。还要注意关于reduce函数的段落。

上级:全局变量不能存在于归约函数的上下文中。如果您仔细阅读有关视图及其reduce函数的文档,您应该了解reduce函数可以在集群中的不同服务器上多次调用。因此,不能定义任何将在群集中的多个服务器上全局的变量。您只能使用返回的变量进行操作。此外,您需要在reduce函数中处理rereduce,如果不这样做,您将计算最新reduce的rereduce时间并忽略所有先前的值。

衡量视图性能的更好方法是生成负载测试并以最大操作/秒运行,而不是视图索引过程的绝对时间。如果您需要测量索引速度 - 使用stale=false参数查询您的视图,该参数将强制 couchbase 在返回结果之前更新索引,因此该查询的时间将表示映射和减少结果所需的时间(即您甚至可以使用 curl 或 Web 浏览器(。但是在实际应用中,您需要避免使用stale=false进行查询。

要调整你的reduce代码,你可以在浏览器中测量它的性能,或者在nodejs中更好地测量它的性能。只需复制您的reduce函数并使用地图数据调用它。如果你在浏览器中优化你的代码,你的代码在CB中会更快。你甚至可以找到在线的jsvascript map-reduce模拟器。