2013-07-25 45 views
14

我們需要保持我們的Firebase數據同步的其他databasesfull-text search(在ElasticSearch)和其他類型的查詢是Firebase不容易支持。如何保持火力地堡同步與其他數據庫

這需要儘可能接近實時,我們不能只輸出Firebase JSON或類似的東西的每晚轉儲,除了這將變得相當大。

我最初的想法是運行Node.js客戶端,它會監聽child_changedchild_addedchild_removed等等所有的主要名單的事件,但是這可能會有點unweildy,這將是如果同步的一種可靠的方法客戶端在一段時間後重新連接?

我的下一個想法是維護一個「項目已更改」事件的列表,並在每次創建/更新項目時寫入該項目,類似於Firebase work queue示例。該隊列可以包含已更改的數據的完整路徑,並且該工作人員僅使用該路徑並相應地更新本地數據庫。

這裏的問題是每一點代碼,使更新必須記住寫入這個隊列,否則兩個系統將不同步。一些代理代碼不應該太難寫入。

有沒有其他人做過類似的任何成功?

+0

我認爲你的代理理念最有意義。我們已經看到了人們運行node.js進程的情況,這些進程存儲了他們上次寫入數據的時間戳。如果進程崩潰,您可以通過查看您寫入的最後一個時間戳來進行初始導入。 – Anant

+0

@rlivsey你想出了一個解決方案?我需要解決同樣的問題,我正在考慮使用彈性搜索。任何有關您的經驗的信息將不勝感激。 – Tim

+1

我們解決了這個問題,但在我們的情況下,設置是不同的 - 我們愉快地生活在兩個數據庫中,每個數據庫都有不同的用途。 我們有**不相同的MongoDB(*權威商店*)和Firebase(*實時商店*),每個都擁有它需要的數據。並非Firebase中的所有實時數據都需要寫入MongoDB。反過來說 - 很多非實時數據都不在我們的Mongo上。只有數據的**片段**被同步:client - > nodejs - > Mongo + Firebase。 所以我想問題是 - 你真的需要**所有**數據同步嗎? – oori

回答

5

對於搜索查詢,您可以直接與ElasticSearch集成;不需要與輔助數據庫同步。 Firebase有一個blog post about integrating和一個庫,Flashlight,使這個快速和無痛。

+0

儘管這很有幫助,但我決定編寫一小段代碼將Firebase與Mongo同步。更多信息可以在[本文]中找到(https://medium.com/@ariklevliber/querying-firebase-through-mongo-412a824ca4dd#.bp4vz7rkx) – Leo

0

另一種選擇是使用logstash-input-firebase Logstash插件,以便偵聽Firebase實時數據庫中的更改並使用elasticsearch輸出將數據實時轉發到Elasticsearch。