2016-10-22 26 views
1

這可能是一個主題的副本,但我無法在谷歌找到答案。 (可能使用了錯誤的單詞)Java與數據庫存儲對象的協調

我正在研究Java REST API,並且我有兩個Java對象存儲在我的數據庫中。預約和可用性。要預約我需要檢查我的用戶是否可用。

public void addAppointment(Date startDate, Date endDate, User user) 
{ 
    if(availabilityService.isAvailable(startDate, endDate, user) 
     dao.addAppointment(startDate, endDate, user); 
} 

如果我只有一個服務實例,一切都可以。但是如果我有兩個實例,並且在存儲新約會之前他們同時檢查我的方法呢?

如何管理存儲在我的數據庫中的對象的併發性?

我不知道它是否會改變某些內容,但我打算使用Google App Engine或AWS來部署我的應用程序。

Thx。

回答

2

處理此問題的典型方法是版本化記錄。一種稱爲樂觀鎖定的策略。當你閱讀用戶時,應該有一個該用戶的版本。然後,您可以進行所需的更改。當你去寫它,如果版本號不匹配,那麼你知道別人已經更新了該記錄,因爲你讀過它。寫入失敗。您重新讀取記錄以獲取更新,然後再次嘗試(如果它對新數據有意義)。

用於處理數據庫中的許多庫都會有這個建於:

對於AWS迪納摩DB:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html

如果你打算把你自己的數據庫,Hibernate是一個Java ORM實現此類型的鎖定: http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#entity-pojo-optlock

+0

對不起,我知道它已經10天了......但我有問題。 Dynamo DB僅適用於NoSQL數據庫。是否有類似的SQL數據庫解決方案? AWS是否支持休眠? – Antoine

+0

是的,dynamo db是一個nosql數據庫。 –

+0

AWS確實有一個名爲rds的託管sql解決方案。你可以使用它與休眠。有可能你也可以使用其他的ORM,冬眠恰好是我所經歷的。 –