2014-09-23 53 views
2

我正在考慮使用PouchDB作爲自動更新用戶在論文中提交的評論的解決方案。PouchDB作爲不同收藏的真實實時數據工具

它應該模仿訂閱/發佈服務的行爲。每當有人在其客戶端提交評論時,其他客戶端上的評論列表應自動更新。

這是可能的使用PouchDB作爲入門指南中描述:

var db = new PouchDB('paper'); 
var remoteCouch = 'http://user:[email protected]/paper'; 

function sync() {  
    var opts = {live: true}; 
    db.replicate.to(remoteCouch, opts, syncError); 
    db.replicate.from(remoteCouch, opts, syncError); 
} 

該應用程序擁有不同的文件,每一個都有自己的意見。當使用PouchDB我的發佈/訂閱服務,我有以下問題:

  • 是否使用PouchDB這樣一個好主意?

  • 如果我只想同步用戶正在處理的當前紙張的註釋,我應該爲每個紙張創建一個新的數據庫嗎? (這也意味着我將失去查詢所有用戶對來自單個數據庫的所有論文的評論的可能性)

  • 有沒有辦法只同步數據庫的一部分?這樣,即使是不同的論文,我仍然可以使用數據庫來保存所有的評論。

回答

2

是的,PouchDB適用於實時的東西。它不使用網絡套接字,但它使用長輪詢,這對於大多數使用情況來說足夠快。

聽起來你可能應該爲每個紙張創建一個單獨的數據庫,假設你想限制每張紙的訪問。 CouchDB身份驗證有點棘手,但基本上如果您想控制讀取訪問,您可以爲用戶提供完整的讀取訪問權限或對整個數據庫的讀取訪問權限爲零。 There's a writeup here

也不用擔心創建數千個數據庫;一個「數據庫」在CouchDB中便宜。

我建議的唯一的另一件事是,也許你會喜歡relational-pouch plugin,因爲那樣你就可以輕鬆地建立一個「紙」類型和「評論」類型的關係型數據庫。

+0

如果我將使用驗證函數來限制對論文的評論(閱讀評論不需要限制),是否可以使用PouchDB.replicate中的''''filter'''選項source,target,[options])'''方法來有選擇地過濾數據庫的哪些部分被同步? – arnoutaertgeerts 2014-09-24 06:03:29

+0

當然,過濾器函數可以讓你複製數據庫的任何子集。我只是指出,如果你的擔心是安全的,那麼過濾器函數將不會保護數據庫免受某人閱讀他們不應該訪問的數據。 – nlawson 2014-09-24 13:02:28

+0

我正在使用PouchDB在AngularJS中編寫同步指令。每當我的數據庫的某個對象在某處發生更改時,它就會被更新。爲此,我使用'''$ scope。$ watch'''。我現在唯一的問題是,當一個對象改變並保存到數據庫時,'_rev'''字段也會改變,導致無限更新循環:)你有什麼想法如何解決這個問題? – arnoutaertgeerts 2014-09-24 14:06:54

相關問題