我正在使用JDO訪問數據存儲實體。我目前遇到問題,因爲不同的進程並行訪問相同的實體,我不確定如何解決這個問題。對不同實體屬性的並行更新
我有一個包含值的實體和計算值:(鍵,值1,值2,值3,計算值)
計算髮生在一個單獨的任務隊列。 用戶可以隨時編輯這些值。 如果更新值,則會將新任務推送到覆蓋舊計算值的隊列中。
我現在的問題是在以下情形:
- 用戶創建
- 任務開始
- 用戶在他最初進入注意到一個錯誤實體並迅速更新實體
- 任務基於舊的數據(來自步驟1)完成並會覆蓋整個實體,也移除所述新輸入的值(來自步驟3)
- 用戶不愉快 個
所以我的問題:
- 我可以使任務失敗的更新步驟4中?包裹在一個事務中的任務似乎並沒有解決這個問題的,由於最終一致性所有的情況下(或者,很可能,我的數據存儲區事務的理解是錯誤的)
- 使用低級別的setProperty方法的唯一途徑更新實體的單個字段並解決我的問題嗎?
- 如果以上都不是,什麼是最好的方式來處理一個用例這樣
背景:
此刻,我不介意的一致性交易業績。以後我會關心表現。
這是我第一次AppEngine應用程式,因爲它是一個學習的過程,它不使用一些最佳實踐。我很清楚,事後看來,我應該更長時間思考我的數據模式。例如,我的實體沒有一個在適當的地方使用祖先關係。我來自關係背景,它顯示。
我籌劃重大重構,可能轉移到客體,但在此期間我也需要被儘快解決的幾個亟待解決的問題。我想先充分了解數據存儲。
感謝這些指針,我顯然應該對JDO的功能進行一些更好的研究。我已經找到了JDO的樂觀併發功能的一個很好的介紹,但在如何打開正確的日誌語句方面卻很少。你知道,在你的頭頂,是什麼樣的日誌啓用? – Peter
在http://www.datanucleus.org/products/accessplatform_3_1/logging.html和類別「DataNucleus.Datastore.Native」中定義的日誌可能具有大多數本地調用IIRC。樂觀的是在http://www.datanucleus.org/products/accessplatform_3_1/jdo/transactions.html#optimistic – DataNucleus