2017-04-23 163 views
1

使用案例:槍數據庫存儲模型的大型集中存儲數據,微小的協作客戶

說我想創建一個實時的協作文檔編輯系統。

在這種情況下,許多用戶可以在許多文檔上創建和協作。

由於客戶端設備的限制,任何客戶端都不可能保留所有文檔的副本,只有少數幾個。

需要中央存儲服務器,其中所有文檔總是存活,並且此服務器始終備份。

每個客戶端都可以'訂閱'任何文檔,並且訂閱的所有客戶端都可以看到訂閱/編輯同一文檔的所有其他客戶端的實時更改。

問題:

由於每個客戶端不能存儲所有文件,需要有一種方法來去除來自客戶端的「老」的文件副本,而不從中央存儲刪除文件,理想情況下基於自動最近最少使用的方法。這在槍中如何處理?

在槍中,如何從中央存儲中刪除文檔,以便將其從所有客戶端有效地永久移除並且無法訪問?

從中央存儲中刪除文檔時,物理存儲空間如何實際回收供以後使用?

回答

0

偉大的問題,@ user2672083。這裏是目前的佈局:

  1. 合作實時文件編輯可以用槍。這是我很久以前錄製的quick prototype,但是還沒有完整的預製示例/實現。

  2. 並非所有數據都默認存儲在每個客戶端上。瀏覽器只保存它請求/獲取/訂閱的數據。

  3. 默認服務器已充當備份。我建議使用S3存儲適配器,因爲那樣你就不用擔心磁盤空間不足了。

  4. 刪除舊副本。目前,如果我希望服務器充當中央「主」,那麼我只需在瀏覽器代碼頂部放置一個localStorage.clear()。這將迫使瀏覽器必須始終從服務器加載最新的內容。但這並不理想,根據roadmap,LRU特定功能即將推出。

  5. 永久刪除數據並回收空間。雖然這對於中央設置應該很容易,因爲默認情況下槍是P2P,它使用一種稱爲tombstoning to delete數據的技術。鑑於LRU/TTL/GC /刪除等許多請求(如您的請求),未來將會有更好的支持。目前,您必須在S3上使用rm data.json,localStorage.clear()和30天生命週期的組合才能使其發揮作用。這將在未來更加整合/更容易。

現在有一個問題給你:你在做什麼,我該怎麼幫忙?你詢問的許多事情現在都可能(有些工作),但是被定爲下一個版本的關注焦點 - 我很樂意在建立這個過程中得到你的反饋。


所有的同伴回覆數據請求(#2),這意味着localStorage和服務器都會回覆。由於localStorage距離用戶較近,因此它會首先回復/最快,然後合併服務器的回覆。 GUN不會嘗試每個對方「按順序」進行try/catch級聯,並行地從所有同級進行GUN回覆。

GUN具有可熱插拔的存儲和傳輸接口,所以是的,很容易在其上或其上構建其他層。

+0

謝謝你的回覆。 Re#2&#4,當瀏覽器重新打開時,不會總是最終聯繫活躍對等方?如果是這樣,'localStorage.clear()'不會受到傷害,但如果不能連接到'主'節點,就不應該調用? Re#3,如果所有的客戶都離開了,那麼服務器將是單個副本,這不是備份;理想情況下,真正的備份只不過是另一個服務器槍,但實際上會收到主人發生的所有變化?此外,或用例需要支持Azure,Google,其他雲提供商和內部部署 – user2672083

+0

我們目前正在使用Firebase以及Druid和ElasticSearch。我們正在考慮取代Firebase。在對槍碼進行更深入的研究之後,從概念上來看,「存儲」接口槍似乎可以更好地定義和抽象。然後它可以與'客戶端'或'服務器'實現對話,誰會處理事物的生命週期,他們自己使用相同的接口,然後坐在實際的存儲提供者之上。這是重構我們可以協助併爲槍支做貢獻的東西嗎? – user2672083

+0

@ user2672083通過編輯答案回覆:)回覆:現在你已經可以部署到他們的Azure/GCS,並且複製槍的S3適配器/驅動程序並將其替換爲Azure/GCS Blob Store API - 或者我們可以構建它這爲你輕鬆地(發送電子郵件到企業[AT] gunDB [DOT] io的定價)。與存儲/抽象層相同,GUN具有簡單的線規格,使我們可以爲您構建新的/可交換的驅動程序/適配器變得很容易。讓我知道! – marknadal