为本地开发示例大型CouchDB数据库,避免长视图构建

时间:2010-08-30 20:55:16

标签: javascript couchdb couchapp

CouchDB便于在本地开发(CouchApps),然后进入远程生产。不幸的是,对于生产大小的数据集,处理视图可能很麻烦。

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

1 个答案:

答案 0 :(得分:2)

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

  1. 将生产数据库example_db复制到我的本地服务器example_db_full
  2. 执行从example_db_fullexample_db的过滤复制,其中过滤器会删除足够的数据,因此构建速度很快,但保留足够的数据,以便我确认我的代码可以正常工作。
  3. 要选择的文档可以是特定于应用程序的。在这个时候,我对一个简单的随机通过/失败感到满意,我可以指定一个百分比。随机性是一致的(即,同一文档总是通过或总是失败。)

    我的技术是规范化文档_rev字段中的内容校验和,范围为[0.0,1.0)。然后我只是指定一些分数(例如0.01),如果规范化的校验和值是< = my fraction,则文档会通过。

    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);
    }