4

我們通過PHP Laravel構建了一個LAMP棧API application。這當前使用本地mySQL實例。我們主要在AngularJS中實現了視圖。mySQL權威數據庫 - 結合Firebase

爲了使用Firebase,我們需要將mySQL中的權威存儲與Firebase上存在的任何相關內容之間的數據同步,儘可能接近實時。這意味着該應用的其他部分並非實時且不使用Firebase,也可以提供最近剛剛輸入到系統中的新內容。

我知道Firebase本質上是雲中的一個noSQL數據庫。我的問題是 - 如何編寫包裝或將Firebase的規範版本同步到我的記錄數據庫中 - mySQL?

更新來回答 - 我們的最終決定 - 開溝火力地堡作爲一個選項

我們已經決定針對這一點,我們可以很容易地在同一臺服務器上socket.io實例與極低的延遲連接mySQL,這樣兩者可以保持同步。當資源和端點可以存在於本地主機上時,不需要瀏覽網頁。它還使我們可以選擇在沒有任何互聯網連接的情況下運行我們的應用程序,如果我們向大公司銷售內部設備,這一點非常重要。

像Firebase這樣的NoSQL同步平臺實際上只是一個臨時存儲,能夠以半實時方式更快地讀寫數據。如果他們試圖進入「我們也堅持一切爲你」的業務 - 這是一個完全不同的問題,需要更多的承諾。

mySQL和Firebase之間最終一致性的保證對於事先排除問題更重要 - 防止出現問題。此外,RDMS對於我們的應用程序至關重要 - 它是在分析/數據映射中攻擊大量數據嚴重問題的唯一方式 - 世界上大多數人仍然使用RDMS如mySQL等非常強大的原因。您可以製作那些非常可靠的 - 通過Amazon RDS和Google Cloud SQL。

除了擴展實時同步,Firebase實際爲我們解決的其他開源框架尚未解決的問題,沒有什麼特別的問題。如果他們的JS庫實際上處理離線場景(當你開始離線時),我可能會考慮它,但它現在還沒有這樣做。因此,YMMV - 但在我們的具體情況下,我們並沒有考慮上述原因的Firebase。

+0

架構非常清晰。但我不確定你在問什麼。你在尋找我們來驗證這個架構嗎?或者你在尋找寫這個同步代碼的建議嗎?兩者都是非常廣泛的主題,不適合StackOverflow。如果您(也)共享您希望保留在Firebase中的一些mySQL數據結構,我們可能會更好地提供幫助。 – 2014-10-28 15:45:00

+0

@FrankvanPuffelen我會嘗試爲此添加顏色。想象一下,你有一個存儲在mySQL中的清單,包含一些屬性和一系列步驟。這些步驟存儲在另一個表中。當有人更新Firebase上的清單時 - 我如何同步mySQL?我只想出於性能原因需要Firebase,而不是我係統中任何數據的主存儲。因此,需要幾乎實時的同步。回退選項總是在進行Firebase調用時發出一個將數據同步到mySQL的調用 - 但這似乎是一個主要的性能拖延。任何優雅的方式爲這個非客戶端? – 2014-10-29 11:24:24

+1

致你的更新:我已經想知道爲什麼你想要結合兩個數據庫。立即在mySQL中更新狀態顯然更簡單。很高興聽到你們得出同樣的結論。 – 2014-10-30 11:22:21

回答

3

整個話題非常廣泛,絕對太寬泛以至於不能提供簡單的答案。

我會堅持你在評論中提供的用例:

假設你有存儲在MySQL的一份清單,包括一些屬性和一組步驟。這些步驟存儲在另一個表中。當有人更新Firebase上的清單時 - 我如何同步mySQL?

如果堅持結合火力地堡和MySQL用於該用途的情況,我想:

  1. 設置你的火力地堡作爲工作隊列:var ref = new Firebase('https://my.firebaseio.com/workqueue')

  2. 有客戶端推送工作項目進入火力地堡:ref.push({ task: 'id-of-state', newState: 'newstate'})

  3. 建立一個(的NodeJS)服務器:

    1. 監測工作隊列(ref.on('child_added'
    2. 更新項目在MySQL數據庫中
    3. 從隊列中刪除任務

的工作隊列的例子來看看這個GitHub的項目在Firebase之上:https://github.com/firebase/firebase-work-queue

+1

偉大的答案弗蘭克!但是我只會嘗試將像Firebase這樣的現代實時平臺變成一個像MySquirrel這樣的90年代後端的消息隊列,如果有人把槍放在我頭上的話。 – Kato 2014-10-30 05:00:38

+0

@Kato我有一個具體的和具體的需求mySQL在圖片中。這不是關於我的偏好,而是關於需要對數據進行結構化分析的客戶端和預先存在的分析。這個問題很長,與這個問題無關。 – 2014-10-30 07:54:08

+0

@ frank-van-puffelen謝謝你的回答,我已經接受了。那肯定會奏效。不幸的是,我們不使用Firebase的原因有所不同 - 我的答案已更新。這是在對這個非常廣泛但重要的問題進行更多考慮之後。 – 2014-10-30 09:16:30