我對我讀到的 Spring Data/Hibernate 的黑盒持久性相關的東西感到困惑——主要是查詢快取和重繪 。
據我所理解:
快取查詢:
Spring 資料不會直接在資料庫上的事務中運行查詢,而是將它們快取在記憶體中,直到某個(可能的最新)時刻——即資料庫中的事務提交。這是因為性能問題——因此代碼不必在每次repository呼叫時都訪問資料庫。
重繪 :
當需要與資料庫互動時——例如接收生成的(數字id)或default值——代碼可以直接flush在repository資料庫上運行查詢(仍然在單個事務中)。這使得通過外鍵等進行資料系結成為可能......
我需要知道以下幾點:
- Spring Data 對第 3 方資料操作(例如其他應用程式、資料庫控制臺等)是否完全資料安全?我的意思是 - 與其他客戶的交易/重繪 是否可能存在不一致?
- 如果沒有,實作此目的的設定是什么?
- Micronaut 資料的作業方式是否相同?
uj5u.com熱心網友回復:
在回答你的問題之前,讓我做一些澄清。
Spring Data是一個廣泛的保護傘,可以涵蓋許多資料存盤。例如,有直接與 JDBC 驅動程式通信的 Spring Data JDBC;有 Spring Data Redis 用于提供對 Redis 服務器的存盤庫訪問;而且,與您的問題最相關的是 Spring Data JPA,它使用 JPA 實作(默認為 Hibernate)通過 JPA 與您的資料庫互動。
您所指的快取是 Hibernate 的一級快取Persistence Context。它實際上是 JPA 物體的快取。在重繪 時,Hibernate 將采用“已保存”物體(合并/持久化,通過呼叫 Spring Data 存盤庫上的方法觸發)#save并生成適當的INSERT//查詢以更新資料庫中的資料。UPDATEDELETE
Spring Data 對第 3 方資料操作(例如其他應用程式、資料庫控制臺等)是否完全資料安全?我的意思是 - 與其他客戶的交易/重繪 是否可能存在不一致?
聽起來您在詢問Isolation,答案將取決于您認為在隔離級別中“資料安全”的內容。大多數資料庫默認為“READ COMMITTED”,其中來自已提交并發事務的資料可以在當前事務中讀取,就好像從未發生過未提交的更改一樣。我將假設這是您將堅持的隔離級別。更嚴格的隔離級別需要更仔細地考慮以避免過度鎖定。
在 READ COMMITTED 隔離級別下,Hibernate 所做的快取(就讀取現象而言)與通過非 JPA 應用程式/資料庫控制臺/等執行相同陳述句的情況沒有什么不同。那是因為事務只讀取提交的資料——所以推遲INSERTs/ UPDATEs 并不重要,因為它們的新狀態只在 COMMIT 之后才可見,而不管資料庫何時執行INSERT/UPDATE本身。
物體的快取是使用持久性背景關系完成的。Persistence Context 系結到 Hibernate Session。Hibernate Session 在 Spring 事務開始時打開,并在結束時關閉。因此,修改物體的快取不會超過資料庫事務。請注意,Open Session In View有幾個例外,但在會話結束時對物體的修改仍然會重繪 /提交到 DB。
如果沒有,實作此目的的設定是什么?
同樣,“資料安全”取決于資料庫的默認隔離級別。如果您認為需要與默認隔離級別不同的隔離級別,可以通過以下幾種方式進行更改:
- 如果允許,更改整個資料庫的隔離級別。這取決于您使用的 DBMS,因此您需要找到相應 DBMS 的檔案。
- 更改 Hibernate 配置的事務隔離級別,我將參考這個其他 SO 答案,其中還包括對隔離級別的描述
@Transactional使用 Spring 的注解設定隔離級別。例如,SERIALIZABLE 隔離級別可以通過使用@Transactional(isolation = Isolation.SERIALIZABLE). 有關其他選項和說明,請參閱Javadoc。
Micronaut 資料的作業方式是否相同?
我沒有使用過 Micronaut 資料,但據我所知,這個問題的答案也將取決于您如何使用 Micronaut 資料。Micronaut Data JDBC(和 Spring Data JDBC,就此而言)沒有物體快取。據我了解,Micronaut Data JPA 仍然只是委托給 Hibernate,在這種情況下,是的,Hibernate 仍將使用持久性背景關系執行物體快取。
也就是說,正如我之前提到的,由于該隔離級別的行為,大多數情況下不會在 READ COMMITTED 隔離級別上引起關注。
uj5u.com熱心網友回復:
與其他客戶的交易/重繪 是否可能存在不一致?
是的。Spring Data 不可能做到這一點。
如果沒有,實作此目的的設定是什么?
這取決于問題中未包含的因素,并且解決方案可能不一定由設定控制。建筑是相關的。
Micronaut 資料的作業方式是否相同?
關于上述專案,是的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/483671.html
