【发布时间】:2017-03-07 10:37:01
【问题描述】:
我有一个名为 t-customers 的 CouchDB 数据库。使用 Fauxton,我创建了以下视图 t-customers/_design/t-cust-design/_view/by-custdes。这是地图功能:
function (doc) {
var custname = doc.CUSTNAME;
if(custname != undefined && custname.length != undefined && custname.length != ''){
for(var i = 0; i < custname.length - 1; i++)
for(var j = i + 1; j < custname.length + 1; j++)
emit(custname.substring(i, j),doc._id);
}
}
视图将包含 custdes 的所有可用子字符串(例如 custdes=abc -> a、ab、abc、bc)作为 key 和 doc ._id 作为它的值。
创建视图后,我可以使用以下 http 请求对其进行查询:
http://127:0.0.1:5984/t-customers/_design/t-cust-design/_view/by-custdes?key="ab"http://127:0.0.1:5984/t-customers/_design/t-cust-design/_view/by-custdes?key="abc"
虽然我的视图有大约 1.500.000 个文档被编入索引,但它的运行速度就像闪电一样快。
首先:我注意到 PouchBD 只同步 t-customers 数据库,而不是它的视图。为什么?为了使视图在 PouchDB 中可用,我需要运行以下命令,该命令最多需要 20 分钟才能完成:
t-customers.query("t-cust-design/by-custdes").then(...).catch(...);
只有这样我才能在 Chrome 中看到 IndexedDB 的视图。
其次:在 PouchDB 视图 t-cust-design/by-custdes 中查找文档的方法是什么,而不会在每次我想找到 ab 键时触发整个 map/reduce 过程?正如我所提到的,我可以使用 http 请求查询 CouchDB _design/t-cust-design/_view/by-custdes 视图,它运行速度很快,但我无法使用 PouchDB API 执行等效操作。
我已经阅读了大量的文档,但我仍然对此感到困惑......
【问题讨论】:
-
当你创建 t-customers.query() 时,这是本地 PouchDB 实例还是指向 CouchDB 的 PouchDB?
-
我认为这是一个本地 PouchDB 实例。我正在使用 PouchDB API 来触发 query() 函数。我假设该函数将在本地 PouchDB 数据库上执行,该数据库链接到其 CouchDB 数据库“双胞胎”。
-
我的意思是,您是在本地创建数据库
new PouchDB("dbName")还是远程创建数据库new PouchDB("remote ip")
标签: apache mapreduce couchdb pouchdb nosql