一: Multitenant Architecture (12.1.0.1)
多租戶架構是Oracle 12c(12.1)的新增重磅特性,內建的多分租(Multi-tenancy),一個容器數據庫(container database)中可以存放多個Pluggable Databases,每個Pluggable Database均獨立於其他Pluggable Database。

對於外部應用程序和開發者來說,Pluggable Databases看上去就是一個普通的12.1版本之前的單一數據庫。DBA可以連接到Pluggable Database並僅僅管理該數據庫,超級DBA可以連接到容器數據庫並如同管理單系統鏡像那樣管理所有Pluggable Database。
Pluggable Databases特性帶來的好處:
1、集中式管理多個數據庫實例。
2、通過PDB$SEED模板快速配置新數據庫。
3、加速現有數據庫打補丁和升級的速度。
4、通過PDB拔插移植到更高版本中的其他CDB中進行修補或升級。
5、通過將現有數據庫的拔插和插拔快速重新部署到新平台(遷移)。

對於傳統的OLTP系統,為了實現快速查詢,往往采用分析型索引的方式,在這樣的架構下,向表中插入一條記錄需要同時更新數十個索引,OLTP系統性能被迫降低。12c In-Memory通過用內存列存儲取代分析型索引,純內存中的列式存儲能夠快速響應數據變化,可達到2倍至20倍的壓縮比例,其粒度還支持表級與分區級,並適用於所有主流的硬件平台,使得OLTP系統中可以給予任意一列實現快速分析,OLTP和批處理的速度得到大幅提升。
在測試當中,列格式的每CPU內核可達到10億條/秒的掃描速度,而行格式僅能達到百萬條,性能的提升高達一百倍以上。不僅如此,通過將多表的連接操作轉化為高效的列掃描,表連接速度也加快10倍。
Oracle Sharding是用於自定義設計的OLTP應用程序的可擴展性和可用性功能,可以在不共享硬件或軟件的Oracle數據庫池之間分發和復制數據。 將數據庫池作為單個邏輯數據庫呈現給應用程序。 應用程序可以在任何平台上將任何級別(數據,事務和用戶)彈性地縮放(簡單地通過在池中添加數據庫(分片))。
簡單來說,Oracle的Sharding技術就是通過分區(Partioning)技術的擴展來實現的。以前一個表的分區可以存在於不同的表空間,現在可以存在於不同的數據庫。
與其他NOSQL型的sharding結構相比,Oracle Sharding提供了卓越的運行時性能和更簡單的生命周期管理。 它還提供企業RDBMS的優勢,包括:關系模式,SQL和其他編程接口,支持復雜數據類型,在線模式更改,多核可擴展性,高級安全性,壓縮,高可用性,ACID屬性,一致性等等。
Oracle Sharding使用GDS(Global Data Services)架構來自動部署和管理sharding和復制技術。GDS(GDS是Oracle RDBMS 12.1的新特性)也提供負載均衡和SDB(sharded database)中的基於位置的路由功能。
Shard目錄(Shard directors)使用GDS framework的全局服務管理組件(global service manager component)來提供應用層請求到shard的直接路由。shard目錄(Shard directors)是一個單獨的數據庫,它用來保存SDB(Sharding database)配置數據和提供其他相關功能,比如shard的交叉查詢和集中管理。可以使用GDS是GDSCTL工具可以用來配置SDB。
Oracle Sharding的分區架構(Partitioning Infrastructure)分區在表空間級別跨Shards分布,每個表空間關聯一個特定的shard。一個shard表的每一個分區放單獨的表空間,並且每個表空間關聯到一個特定的shard。根據不同的sharding方法,這個關聯可以自動建立或者根據定義創建。盡管一個shard表的多個分區放在多個單獨主機的數據庫上(這些數據庫完全獨立,不共享CPU、內存等軟件和硬件),但是應用訪問表時就如同訪問一個單獨數據庫中的分區表一樣。應用發出的SQL語句不需要依賴shard號和shard的物理配置。
Sharding如何實現數據路由?
既然數據被拆分,那么在訪問時如何實現數據路由呢?在Sharding的架構里,存在一個“Shard Directories”目錄庫來管理Sharding的分布,當應用通過Sharding Key來訪問數據時,連接池(GDS - Global Data Services)就會給出訪問路徑,快速指向需要訪問的Shard。如果應用不指定分區鍵訪問,則需要通過協調庫-Coordinator DB來協助判定。