2012-11-20 66 views
2

我正在研究實時JavaScript應用程序,要求對數據庫進行的所有更改都是鏡像立即在JavaScript中使用,反之亦然。正在同步數據庫和Javascript

現在,當在JavaScript中進行更改時,我對我的API進行ajax調用,並對DOM進行相應的更改。在服務器上,API處理請求,並通過使用PubNub向其他當前JavaScript用戶發送推送並進行更改完成。如果它錯過了推送,我還包括一個與JavaScript順序相關的changeID,可以重新同步整個數據集。這裏是推的一個例子:

{ 
    "changeID":"2857693", 
    "type":"update", 
    "table":"users", 
    "where":{ 
     "id":"32" 
    }, 
    "set":{ 
     "first_name":"Johnny", 
     "last_name":"Applesead" 
    } 
} 

JavaScript時得到這個變化,它會更新本地存儲,並基於該表正被改變,則相應的DOM變化。 請記住,我的問題不是更新DOM,而是將數據庫中的數據快速無縫地同步到JavaScript。

通過這個,我不禁想到這是一個非常複雜的解決方案,應該是相當簡單的。我錯過了一個難題? 如何將多個JavaScript客戶端與MySQL數據庫無縫同步?

+1

「通過這次去,我不禁想,這是一個非常複雜的解決方案的東西,應該是相當簡單的。」 - 這是一廂情願的想法。基於**完全不同的低級模型(關係與導航/分層),保持兩個數據集在網絡中同步,這是涉及許多移動部件的難題。考慮只是「透明地」在數據庫模型和對象模型之間進行轉換需要一個ORM框架 - 一個複雜而且總是泄漏的抽象。你基本上是在用Javascript實現(部分)ORM庫。 – millimoose

+0

@millimoose,你有一個深思熟慮和有效的觀點。我想我的樣本和提供的障礙一樣簡單。感謝您的反饋意見! – Jonathan

回答

0

爲了在幾個月後更新問題 - 我最終堅持使用這種方法,並且工作得很好。

0

我知道這是一個老問題,但我花了很多時間研究這個完全相同的問題,儘管對於完全不同的上下文。我正在創建一個Phonegap應用程序,它必須離線工作並在稍後進行同步。

對我來說,最大的啓示是,我真正需要的是瀏覽器和服務器之間的版本控制,這就是我所做的。將數據分別存儲在setskeys以內的所有集合和版本中。出現問題時,可以使用衝突解決回調來解決它。

我只是把這個項目在GitHub上,它的網址是https://github.com/forbesmyester/SyncIt