2016-06-10 46 views
1

我想在couchbase服務器上設置TTL(生存時間),以便所有文檔從移動設備持續推送用於複製。我沒有在文檔中找到任何明確的解釋/示例來做到這一點。 應該如何設置來自移動設備到服務器的文檔通過Sync Gateway的TTL。爲Couchbase服務器中的文檔設置TTL

方法1: 一種方法是在服務器端創建一個視圖,該視圖將createdDate作爲關鍵字返回。我們將查詢該視圖以查找今天返回今天文檔的密鑰,並且可以爲這些文檔設置TTL。但是,我們如何以及何時將這種觀點稱爲這是一種好方法?

方法2: 我應該使用網絡掛接它會聽文檔的更改(創作)做到這一點通過Couchbase精簡版推重複做,爲新文檔設置TTL和保存回Couchbase服務器?

有沒有其他更好的方法來做到這一點?

還有什麼方法來爲特定文件設置TTL?

編輯:我的最後的辦法: 我將創造couchbase服務器以下幾種觀點:

function (doc, meta) { 
    emit(dateToArray(doc.createdDate)); 
} 

我會有這將在EOD日常運行作業,查詢視圖到今天獲得創建的文檔和設置的TTL那些文件。 這樣我就可以定期刪除文件。

讓我知道是否有任何問題或有更好的方法。

+0

您使用哪個庫來訪問'Couchbase'?每個庫都提供了諸如'add'和'set'等方法,其中肯定有一個參數,通過這個參數你可以設置Key的TTL。有關僅爲特定文檔設置TTL的信息,請參閱http://developer.couchbase.com/documentation/server/current/sdks/dotnet-2.2/time-to-live.html – sameerkn

+0

我正在使用.net sdk。我已經通過上面的文件。但是它在哪裏適合文檔通過Sync Gateway從移動設備複製到服務器的流程?我將如何訪問這些文檔並將TTL設置爲相同? – user2787531

+0

在您的系統中可以通過庫訪問Couchbase的地方,您將使用庫函數來設置TTL。每個文檔都將通過一個密鑰進行標識。所以你需要將這些關鍵信息傳遞給庫。假設Module_A可以訪問Couchbase,並且需要在Module_X中生成複製文檔,那麼您需要將所有必需的信息從Module_X傳遞到Module_A。 Module_X還應該有文檔信息和'Key',它代表了Couchbase中的文檔。 – sameerkn

回答

0

希望從移動球隊有人可以附和並確認這一點,但我不認爲移動SDK允許在一瞬間設置到期。

我想你可以將創建/更新時間添加到文檔中,並創建一個使用「核心」SDK定期查找舊文檔(通過N1QL或專用視圖)並將其刪除的批處理作業。

0

它目前還無法通過SYNC網關像您可以用Couchbase服務器智能客戶端來設置文檔的TTL。與Sync Gateway使用文檔上的本機樣式TTL存在概念性阻抗不匹配。這是因爲revision trees,甚至當文檔被「刪除」的基礎上,同步網關協議功能,還有在地方的文件標記,有已經被刪除的文件。

我還要警惕其可能需要的TTL(例如高速緩存),SYNC網關文件佔用他們已經被刪除,即使這樣你的數據集可能會繼續無限地增長空間的工作負載。

如果您確實需要TTLS,如果你不認爲該數據集的大小將是一個問題,那麼最好的辦法是一個字段存儲表示時間的文件將到期在文檔中。然後,你會做兩件事情:

  • 訪問文檔時,如果它已經過期,那麼你手動刪除它
  • 定期遍歷all docs端點並刪除你過去的到期時間找到任何文件。
+0

我正在用我的問題結尾提到的方法。請讓我知道是否有任何問題。 – user2787531

+0

如果在Sync Gateway創建的任何文檔上設置TTL,我將非常謹慎,因爲Sync Gateway不會在不通過Sync Gateway直接傳輸的情況下刪除文檔。 – Chippiewill

+0

我發現了一種解決方法,用於在服務器上將文檔的刪除與同步網關進行通信。我將爲同步存儲桶配置一個影子存儲桶。刪除將在影子存儲桶上發生,並且此更改將通過同步網關複製到同步存儲區,同步網關將爲該文檔設置必要的元數據(例如,_deleted = true)。現在,此刪除更改將自動複製到移動設備。讓我知道你的想法。 – user2787531