2013-11-22 65 views
0

我使用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」元素是存儲鏈接到該特定網頁的所有網頁的陣列。該數組可以非常快速地增長,我不想每次只添加一個鏈接時都將GET和PUT整個文檔。

是否可以更新文檔和插入另一個鏈接源,而無需重新發送整個「source」?

回答

1

另一種選擇是使用每個源和目的地URL一個文檔,每個目的地的URL,而不是一個文件使用源的長列表。

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

你可以這樣使用視圖來獲取所有都指向給定目標URL源的URL列表:

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

你可以使用一個_count減少快速檢索的數通過這種方式入站鏈接到目標頁面,預先計算這個值在UI中顯示。

此外,emit(doc.sourceUrl, doc.targetUrl);會給你一個觀點很容易地從給定源向外可查詢的鏈接。