为本地开发采样一个大型 CouchDB 数据库,避免长视图构建

Posted

技术标签:

【中文标题】为本地开发采样一个大型 CouchDB 数据库,避免长视图构建【英文标题】:Sample a large CouchDB database for local development, avoiding long view builds 【发布时间】:2010-08-30 20:55:15 【问题描述】:

CouchDB 方便本地开发(CouchApps),然后推送到远程生产。不幸的是,对于生产规模的数据集,处理视图可能很麻烦。

在本地开发中使用 CouchDB 数据库样本的好方法是什么?

【问题讨论】:

【参考方案1】:

答案是过滤复制。我喜欢分两部分来做:

    将生产数据库example_db复制到我的本地服务器为example_db_full 执行从 example_db_fullexample_db 的过滤复制,其中过滤器会截断足够的数据以加快构建速度,但会保留足够的数据以确认我的代码有效。

选择哪些文档可以是特定于应用程序的。目前,我对简单的随机通过/失败以及我可以指定的百分比感到满意。随机性是一致的(即同一个文档总是通过或总是失败。)

我的技术是将文档_rev 字段中的内容校验和标准化为[0.0, 1.0) 的范围。然后我简单地指定一些分数(例如0.01),如果标准化校验和值是

function(doc, req) 
  if(/^_design\//.test(doc._id))
    return true;

  if(!req.query.p)
    throw error: "Must supply a 'p' parameter with the fraction"
                  + " of documents to pass [0.0-1.0]";

  var p = parseFloat(req.query.p);
  if(!(p >= 0.0 && p <= 1.0)) // Also catches NaN
    throw error: "Must supply a 'p' parameter with the fraction of documents"
                  + " to pass [0.0-1.0]";

  // Consider the first 8 characters of the doc checksum (for now, taken
  // from _rev) as a real number on the range [0.0, 1.0), i.e.
  // ["00000000", "ffffffff").
  var ONE = 4294967295; // parseInt("ffffffff", 16);
  var doc_val = parseInt(doc._rev.match(/^\d+-([0-9a-f]8)/)[1], 16);

  return doc_val <= (ONE * p);

【讨论】:

我恍然大悟,我的最终实现没有我最初想法的 0.0、1.0 属性。真的是 00... - ff... 十六进制整数。但原理是一样的。

以上是关于为本地开发采样一个大型 CouchDB 数据库,避免长视图构建的主要内容,如果未能解决你的问题,请参考以下文章

路径规划基于matlab DWA算法机器人局部避障路径规划含Matlab源码 890期

路径规划基于matlab GUI改进的DWA算法机器人动态避障路径规划含Matlab源码 1271期

从大型数据集中采样

路径规划基于改进动态窗口DWA算法机器人静态避障matlab源码

对于大型数据库,从 Impala 采样的最佳查询是啥?

路径规划基于改进动态窗口法DWA实现机器人动态避障matlab源码含 GUI