2010-12-08 62 views
2

我有一個Spring + Hibernate + MySQL後臺,將我的模型(8個不同的實體)公開給桌面客戶端。爲了保持同步,我希望客戶端正式向服務器詢問最近的變化。該過程可以如下:基於變化的數據庫同步策略

  • 點A:客戶端連接的 第一次和從服務器檢索所有 模型。
  • 點B:客戶端請求服務器 以來A點
  • C點的所有變化:客戶端請求服務器 以來B點的所有更改

要檢索的變化(點B)& C)我可以創建一個HQL查詢,它返回自上次檢索以來最後修改的所有表中的所有行。但是,恐怕這可能是一個沉重的查詢,如果經常執行,會降低我的性能。

因爲這個原因,我正在考慮其他的替代方法,保持一個單獨的表與最近更新的快速訪問。我期待使用L2查詢緩存,但它似乎並不符合我的目的。

有人知道我的目的是一個好策略嗎?我最初的想法是保持對同步的控制,並避免使用「自動」同步工具。

非常感謝

回答

1

您可以將更改存儲在隊列表中。觸發器可以在插入,更新,刪除時填充隊列。這將保留插入,更新,更新,刪除等更改的順序。下載後清空隊列。

清空隊列會導致問題,如果你有多個客戶端....可能需要考慮一個設計來處理這種情況。

有幾種設計可供選擇,所有這些設計都有折衷。我之前使用過隊列設計,但它只是將數據複製到單個目標,而不是多個目標。