什麼是 True Cache?
昨天我在高鐵上和大家分享了一下Oracle 23C 的功能裡的一個不是特別起眼的功能-True Cache,實際上從我第一眼看到True Cache這個名字的時候,就眼前一亮,上一回 Oracle 的元件有這種霸氣的名字的是 RAC,Real Application Cluster。Oracle 推出叢集解決方案 OPS 後,IBM ,HP很快也推出了自己的 cluster 解決方案,透過HACMP和MC SERVICE GUARD實現資料庫的高可用自動切換。現在瞭解這個技術的朋友都知道,這實際上就是HA技術,不過20多年前的很多使用者不大瞭解情況,認為二者是一碼事,所以 Oracle 就把新一代的資料庫叢集命名為真正的應用叢集,從而表現出與其他的一些所謂叢集技術的不同。
Cache技術是近些年資料庫應用領域方面的一項熱門技術。早期的應用系統中可能存在一些熱資料的訪問,這些查詢十分頻繁,給資料庫增加了巨大的負擔。應用程式通常需要在連線數量和可快取資料量方面具有巨大的可擴充套件性,因此當Redis等記憶體KV資料庫出現的時候,應用系統十分強烈的 擁抱了這種新技術。我們經常用到的方法是將快取放在資料庫前面, 這些快取存在的原理是應用程式通常不需要檢視最新資料,而是準實時資料,或者是某些資料相對來說是靜態的。 例如,航空售票網站或者電商網站上,通常可以給瀏覽機票資訊的使用者顯示一秒鐘前的航班資料。只有提交訂單時才需要去驗證實時庫存。那麼近實時緩衝在這種應用場景可以有效的解除安裝主庫負載,並透過記憶體緩衝來提高訪問效能。不過這種緩衝還需要一個略微複雜的更新機制,從而確保資料總是處於有效範圍。目前使用最廣泛的緩衝資料庫是記憶體資料庫REDIS。
緩衝的目的無外乎兩個,一個是提高訪問效能,因此緩衝一般都使用記憶體;另外一個是解除安裝負載(offload),將針對主資料的訪問解除安裝到緩衝中,從而減輕高負載的主資料的負擔。
Oracle True Cache 使用記憶體緩衝的資料來滿足查詢。與 Oracle Active Data Guard 類似,True Cache 是主資料庫的功能齊全的只讀複製,但它大多是無磁碟的。在這種應用框架中,無需維護一套額外的記憶體資料庫,應用程式透過 Oracle JDBC 驅動程式手動或半自動將查詢傳送到 True Cache。True Cache 例項使用它為它處理的資料庫應用程式服務快取的資料來處理查詢,發生快取未命中時,True Cache 例項從主資料庫例項獲取塊。當 True Cache 例項首次啟動時,除了在快取未命中時獲取塊外,它還透過預讀機制拉取資料所在的CHUNK的資料從而實現資料的快速預熱。被快取的資料塊會透過主資料庫的REDO APPLY自動更新,這種APPLY延遲通常小於一秒,可以滿足絕大多數應用的需要。 這類似於 Oracle Data Guard 配置中的Real Apply模式。 主資料庫重做塊由主資料庫例項上的 LGWR 程式以非同步方式持續傳送到 True Cache ,從而在確保主庫效能的同時儘可能降低對主庫應用的影響。昨天我粗粗地看True Cache的介紹的時候存在理解的錯誤,認為True Cache是同步的。當時我還在疑惑Oracle是採用了何種新技術,做到在開放平臺的硬體上而不是一體機環境下實現同步應用的。
另外我昨天覺得True Cache技術與Oracle的MySQL Heatwave有異曲同工之妙,現在看來還是有些偏差的。與MySQL Heatwave相比,True Cache是一種輕量級解決方案。主要目的是實現應用緩衝,而Heatwave最主要的目的還是在MySQL上實現HTAP的能力,主要支撐重度的分析應用。Heatwave要對記憶體列資料進行持久化儲存,而True Cache本身不需要硬碟持久化資料。
資料庫產品的發展是為應用需求服務的,Oracle 23C在這個方向上走得很遠。Oracle在資料庫應用領域的一些技術創新是不是能夠給我們的國產資料庫一些啟示呢?讓資料庫做得更多,還是讓應用做得更多,這兩個技術路線都擁有無數的擁躉。不過從資料庫廠商的角度來看,多做一些簡化應用開發的事情,是不是會讓 自己的產品更具競爭力呢?在創新的實用性方面,我一向是相信Oracle的,我們的國產資料庫廠商在暫時無法全面超越的時候,學習借鑑也是相當不錯的。
來自 “ 白鱔的洞穴 ”, 原文作者:白鱔;原文連結:https://mp.weixin.qq.com/s/vFEMipbkF14dg2fOc2yz7Q,如有侵權,請聯絡管理員刪除。
相關文章
- 為什麼 [] == ![] 為 true?
- aria-hidden="true"有什麼用
- 『Java 語法基礎』3 * 0.1 == 0.3 將會返回什麼?true 還是 false?JavaFalse
- 探討下為什麼設定了Cache-Control:no-cache 伺服器還是返回304 Not Modified ?伺服器
- Cache 和 Buffer 有什麼區別?
- 0 == "無". 結果是 true
- 看下面程式碼,判斷a和b的型別是否為true?為什麼?什麼是基本包裝型別?[程式碼]型別
- checked屬性值是true還是checked
- 什麼是DNS,什麼是HostsDNS
- 這是什麼這是什麼
- 什麼是分而治之?什麼是WBS?
- 什麼是WebAuthn、FIDO 是什麼?Web
- 什麼是cookie,什麼是sessionCookieSession
- 有了 for (;;) 為什麼還需要 while (true) ? 到底哪個更快?While
- ###什麼是Linux核心###什麼是MMULinux
- ITIL是什麼意思?ITIL是什麼?
- SNP全稱是什麼? SNP是什麼公司? SNP是什麼意思?
- 人是什麼?人生是什麼?人為什麼會變?
- 什麼是正向代理?什麼是反向代理?
- NLA是什麼?NLA的原理是什麼?
- ftp是什麼,ftp是什麼東西?FTP
- Java是什麼_Java是做什麼的?Java
- 什麼是this
- 為什麼要有 Servlet ,什麼是 Servlet 容器,什麼是 Web 容器?ServletWeb
- Cache和Buffer都是快取,有什麼區別?Linux快取Linux
- 什麼是API介面,具體是什麼意思?API
- IDFA、IMEI、OAID 是什麼,區別是什麼AI
- DRBD是什麼意思?優缺點是什麼?
- 什麼是SSRF攻擊?SSRF用途是什麼?
- GNU是什麼?和Linux是什麼關係?Linux
- 什麼是塊元素?什麼是行內元素?
- 什麼是Tornado?它的特點是什麼?
- 什麼是框架?為什麼說 Angular 是框架?框架Angular
- Go語言中fmt.Println(true)的結果一定是true麼?Go
- 正規表示式test() 總是返回true
- 什麼是zoom?它有什麼作用?OOM
- 什麼是NLA,它有什麼用?
- 什麼是Django?有什麼用途?Django