首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

DODS 學習日記(五):5.1 版緩存架構重大變更 — DataStruct 取代 DO 直接緩存

     編輯:Java 相關知識

核心變更:緩存對象從 DO 轉移至 DataStruct

自 DODS 5.1 Final 版起,緩存層不再直接快取 DO (DataObject) 實例,改為快取 DataStruct 物件。DO 僅持有對 DataStruct 的引用,實現資料與物件身份的分離。

DO 的雙 DataStruct 引用機制

每個 DO 實例持有兩個 DataStruct 引用:

  1. originalData:資料庫讀取的原始資料快照。不會被修改,直到事務提交。若緩存啟用,此物件會被放入 DataStruct 緩存池。
  2. data:僅在資料被修改時才建立(複製 originalData)。若此引用存在,DO 的 isDirty 屬性即為 true。即使修改後值與原值相同,isDirty 仍保持 true,直到事務提交。

事務提交時的狀態轉換

  • 提交成功:data 移至 originalData,data 設為 null,isDirty 變為 false。
  • 回滾:丟棄 data,繼續使用 originalData,isDirty 歸 false。

新建 DO(記憶體中)的特殊狀態

  • 僅有一個 data DataStruct,originalData 為 null。
  • 提交前 originalData 保持空值,提交後寫入資料庫並同步至 originalData。

屬性遷移與新增

  • oid、version 從 DO 移至 DataStruct。
  • DataStruct 新增屬性:isEmpty、databaseName。
  • DataStruct 新增方法:getOID()、setDatabase(String) 等。

雙層緩存架構

1. 資料緩存層

  • 單一 LRU (Least Recently Used) 緩存,存放 DataStruct 物件。
  • 類型:None / LRU / FULL。

2. 查詢緩存層

  • 兩類查詢緩存:簡單查詢、複雜查詢。
  • 同為 LRU 策略,快取查詢結果集(主鍵清單或完整 DataStruct)。

緩存配置三層級

同參數定義機制,分為 DatabaseManager 全域預設、Database 級、Table 級 三層疊加覆蓋。

架構優勢

  • 關注點分離:DO 負責業務行為,DataStruct 專司資料持有與版本控制。
  • 緩存共享:多個 DO 可安全共享同一 DataStruct(唯讀場景)。
  • 髒資料追蹤精確:isDirty 語義清晰,避免誤判。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved