簡體   English   中英

相同的應用程序部署在兩個不同的服務器中,但是從數據庫中獲取相同的數據。 如何同步數據庫數據

[英]Same application deployed in two different servers but fetching same data from DB. How to synchronize DB data

應用程序的主要工作是從DB獲取數據並豐富。 由於性能問題,我們已將代碼部署在兩個不同的服務器(兩個不同的JVM)中。 現在的問題是,有時這兩個服務器都在獲取相同的數據和過程,這會導致重復。 現在的問題是如何停止從數據庫中獲取相同的數據。 我們嘗試鎖定數據庫行以及數據庫中的所有狀態列,服務器之間的延遲以獲取數據。 但是,當兩個服務器同時開始獲取數據時,它們中的任何一個有時都不起作用。 請幫忙解決這個問題

您不必鎖定行。 如果您有固定數量的jvm運行,則可以使用模來獲取每個jvm實例中的唯一行。 讓我們以示例為例,假設您的表中有存儲數字序列的列ID。 您有兩個正在運行的jvm。 讓我們將0分配給第一個jvm,將1分配給第二個jvm。 每次獲取行時,將id列的模數設為2(jvm實例的數量)。 如果結果與分配給jvm的編號匹配,則進行處理,否則跳過它。

在這種情況下,有兩種處理沖突的標准方法: 樂觀鎖定和悲觀鎖定。

樂觀的當您的應用程序使用較長的事務或跨越多個數據庫事務的對話時,您可以存儲版本控制數據,這樣,如果兩個對話更新了同一實體,則最后一次提交更改會被告知沖突,而不會覆蓋另一個對話的工作。 這種方法可以保證一定的隔離性,但是可以很好地擴展,並且在“經常讀取-有時寫入”的情況下特別有效。

悲觀的情況下,您只需要為JDBC連接指定隔離級別,然后讓數據庫處理鎖定問題。

悲觀鎖定的缺點是,從第一次在事務中訪問該資源到該事務完成為止,資源都被鎖定,從而使該資源在該時間內無法被其他事務訪問。 如果大多數事務僅查看資源卻從未更改,則互斥鎖可能會導致過大的殺傷力,因為它可能導致鎖爭用,而樂觀鎖可能是更好的方法。

請看一下: 悲觀和樂觀鎖定休眠->鎖定

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM