2013年4月18日,第四屆中國數據庫技術大會(DTCC 2013)在北京福朋喜來登酒店正式拉開序幕,現場座無虛席。4月18日下午,在內存數據庫的分會場上,來自上海新炬網絡技術有限公司的交付中心副總監王科先生發表了題為《Oracle TimesTen企業級應用實踐》的精彩演講。
本次演講,王科重點介紹了TimesTen如何通過緩存為Oracle 數據庫加速;TimesTen的高可用架構如何實現和高效運行;如何與應用系統架構結合滿足大并發、高實時性的業務需求;此外,他還通過實踐案例與大家逐一分享。
熟悉網購的朋友,恐怕對促銷打折并不陌生,比如每年的雙11與雙12活動,讓廠家,快遞公司,消費者忙個不停。不過,并不是所有的電商應用都如此給力,實際上,大部分電商都經歷過網站運行緩慢,甚至宕機的現象。而這一切,都與應用系統架構、網絡帶寬、數據庫架構存在千絲萬縷的聯系。試想一下,當應用系統性能成為企業業務發展壯大的制約因素時,企業該如何選擇?
那么,針對應用、網絡、數據庫IO造成的性能瓶頸,TimesTen能做些什么呢?不妨先來了解一下TimesTen的概念與功能。
Oracle TimesTen In-Memory Database (TimesTen) 是一個功能完備、經過內存優化的關系數據庫,它具有持久性和可恢復性。它為應用程序提供了即時響應和極高的吞吐能力,可以滿足數據庫密集型應用程序的需要。TimesTen部署在應用程序層,運行在完全裝入物理內存 (RAM) 的數據庫上。應用程序使用標準 SQL 接口訪問 TimesTen 數據庫。對于現有應用程序數據存放于 Oracle 數據庫中的客戶,TimesTen 作為內存中緩存數據庫來部署,可自動完成 TimesTen 與 Oracle 數據庫之間的數據同步。
TimesTen也有自己的日志文件,以及存放日志文件的目錄(LogDir),缺省的就是和DataStore放在同一個目錄下。但一般建議分開放。日志的概念和Oracle的一樣,在回滾以及恢復的時候,都會用到它。
從Oracle的官方數據得知,TimesTen數據庫事務吞吐量差不多是Oracle的10倍,這正如它的名字一樣。因此可見,對于高并發、實時性要求高的應用,TimesTen是一種理想的選擇,能解決數據庫層的瓶頸問題。
另一方面,TimesTen完全可以作為共享庫的方式,嵌入至應用程序內部,這相當于節省了網絡傳輸帶來的時間延遲,如下圖所示:
TimesTen 從某種角度上來看,也是一種 Cache 機制,是磁盤數據庫的 Cache,通過物理內存中的數據存儲區的直接操作,減少了到磁盤間的 I/O 交互。舉個例子,以下SQL演示的是Oracle數據庫中,取得有500次購貨記錄的的客戶姓名與地址,并且緩存到TimesTen中。
當TimesTen充當Oracle數據庫的緩存,或者說與Oracle數據庫構成主從關系時,支持兩者的雙向數據自動同步,具體表現為四種模式:
1.只讀模式:指的是在Oracle數據庫中更新,異步復制到 TimesTen可以自動刷新Oracle數據庫的更新。只讀模式適合更新不多的場合。
2.同步寫入模式:在TimesTen中更新,然后同步傳播到Oracle數據庫。同步寫入模式適合僅想高速化SELECT的場合。
3. 異步寫入模式:在TimesTen中更新,然后異步傳播到Oracle數據庫,適合高速化 SELECT 以及 DML的場合。
4. 用戶自定義模式。
從部署的角度,TimesTen支持獨立部署、緩存部署、與RAC聯合部署三種模式,如下圖所示。
相對而言,前兩種方式非常好理解,而最后一種方式的出發點是高可用性與負載均衡。以高可用性為例,如下圖所示。讀寫緩存在Active節點提交事務,而事務將自動并行復制到Standby節點,在Standby節點將事務并行寫到后端Oracle數據庫;讀緩存將Oracle數據庫變更的數據刷新到Active節點,更新的緩存數據并行復制到Standby節點。如此一來,即便后端Oracle數據庫宕機,前端TimesTen應用不受影響。
總之,無論是磁盤數據庫,還是內存數據庫,無論是Oracle數據庫,還是TimesTen數據庫,都不存在絕對的好與壞。正向演講者王科介紹的那樣,合適的產品加合理的運用才等于最大的效能。