我需要一個java應用程序來管理數據庫,以將工作單元分配給客戶端。 實際上,它是一個網格應用程序:數據庫充滿了客戶端的輸入參數,並且它的所有元組都必須分發給請求的客戶端。客戶端發送結果後,服務器相應地修改數據庫(例如標記計算的元組)。
現在讓我們假設我有一個充滿元組的數據庫(SQLite或MySQL),並且客戶端請求一組輸入元組:我希望一組工作單元專門發送給一個唯一的客戶端,所以我需要將其標記爲「已經被另一個客戶請求」。 如果我查詢數據庫的第一個(例如5)查詢,同時另一個客戶端提出相同的請求(在多線程服務器體系結構中,並沒有任何同步),我認爲有可能兩個客戶端接收相同的工作 - 單位。如何創建向客戶端分發工作單元的服務器?
我想象的解決方案可能是:
1)讓一個單線程的服務器架構(的ServerSocket.accept()再次調用以前的客戶端請求已送達後,才,使服務器僅有效訪問客戶端)
2)在多線程架構中,使查詢和元組鎖操作同步,以便我獲得一種原子性(有效地對數據庫進行序列化操作)
3)使用原子查詢操作到數據庫服務器(或文件,在SQLite的情況下),但在這種情況下,我需要幫助,因爲我不知道事情真的如何...
但是我希望你能理解我的問題:它與seti @ home非常相似,分配它的工作單元,但是所有分佈式單元與其衆多客戶端的交集都是空的(理論上)。 我的非功能性需求是語言是java,而數據庫是SQLite或MySQL。