在couchdb中管理大数组

时间:2013-11-22 19:49:47

标签: couchdb

我使用CouchDB存储已抓取的网站。例如:

{
   "_id": "doc-http:80-example.com/2012/09/",
   "_rev": "2-532ce885cdb56261cb6d21903cd74c56",
   "contentType": "text/html; charset=UTF-8",
   "lastModified": "2013-11-22T17:41:33.471Z",
   "schema": "document",
   "hostname": "example.com",
   "uri": "/2012/09/",
   "port": 80,
   "protocol": "http:",
   "source": [
       "http://example.com/page/1",
       "http://example.com/page/2",
   ],
   "_attachments": {
       "content": {
       }
   }
}

source”元素是一个存储链接到该特定页面的所有页面的数组。数组可以非常快速地增长,并且我不希望每次只想添加一个链接时获取并输出整个文档。

是否可以更新文档并插入另一个链接到源代码而无需重新发送整个“source”?

2 个答案:

答案 0 :(得分:3)

您检查过update handlers吗? http://wiki.apache.org/couchdb/Document_Update_Handlers

我自己没有这样做,但我读到你应该可以用它来修补文件。

答案 1 :(得分:1)

另一个选项是每个源和目标URL使用一个文档,而不是每个目标URL使用一个文档,其中包含一长串源。

{
    ...
    "sourceUrl": "https://example.com/page/1",
    "targetUrl": "https://target.com/page"
}

然后,您将使用视图获取指向给定目标URL的所有源URL的列表:

function(doc) {
    emit(doc.targetUrl, doc.sourceUrl);
}

您可以使用_count缩减来快速检索目标网页的入站链接计数,预先计算此数据以便在您的用户界面中显示。

此外,emit(doc.sourceUrl, doc.targetUrl);会为您提供一个易于查询来自给定来源的链接的视图。