Oracle 的原來設計是基於事務型的,對處理分析型的就不地道了.最近的發展Oracle相關技術開發都逐步適應OLAP的需求.
1 分區技術 2 壓縮技術 3索引組織表 4 大塊 5並行技術 6記憶體結果集.
原來的Oracle設計基礎是短小精悍的大規模並發事務. 而甲骨文憑藉這一點佔領了大部分資料庫市場份額.微軟的SQLSERVER以它的綜合型,友好型和簡單易用型佔領了中小企業市場.
要設計個Oracle 10G分析系統,不能選擇預設安裝法.連機器的儲存也不能按OLTP的思維.
基於目前的RAC技術 它是為了OLTP的高可用型而設計的.不適合分析系統的駐留的機器系統. Oracle 還沒有IBM的分庫資料庫,可以水平無限擴充.
選擇一台分析系統的伺服器,基本上是RAID0+RAID5+SSD 大記憶體+多CPU的單台機器.
選擇SSD固態硬碟主要是用於分析即時型很強的報表需求. 而RAID0主要儲存1個月的資料,這個基本上是很頻繁訪問的資料報表需求. RAID5或者RAID10等主要儲存曆史資料了.
大記憶體主要用於做GROUP BY 運算, 多CPU使用者並行查詢.
分析系統的分層設計. 分層設計主要是把資料逐步的融縮精華.提供比較多的靈活型.
1 資料同步層, 設定個使用者和模式 DATA_synch 主要從各個資料來源中擷取資料到該使用者模式下.資料表空間 DATA_DAY,DATA_MON,DATA_HIS 三個時間段的空間.
2 資料拆分和匯總. 設定個使用者和模式 data_split_sum 主要從來源資料提取出部分欄位的表,和從中提取時間等粒度的表,或者提取出部分使用者的表.
比如活躍使用者表
3 報表結果層: data_result 這一層主要存放最終想要的資料.
這三層可以在同一台資料庫中,也可以安放在不同的機器上
資料表空間設計: 分為資料和索引資料表空間 同時在分為 SSD,RAID0 RAID5空間:ssd_index,ssd_data,raid0_index,raid0_data,raid5_index,raid5_data
注意把重要的表,重要的運算涉及到表,以及即時性要求高的表,領導每天要的表 放在SSD資料表空間中.
資料同步重要的放進SSD資料表空間中,其他的不重要的放進RAID0資料表空間裡去. 超過一個月上的資料存進曆史資料表空間.
所有的表要考慮做成索引組織表,因為組織表是有序存放的. SSD還是存放的是日和周層級的重要表,可以採用原來的堆組織表.
RAID0資料表空間存放當月的資料,因此可以採用非壓縮式索引組織表,塊空間FREE為0-10 主要看該表的資料更新周期,也就是說穩定時間.比如說該表的資料從外面拖過來後,下一天再拖資料過來要修改前天資料的值.這就是穩定周期.如果硬碟空間有多餘的話 可以再設個RAID0_DAY資料表空間,把那些需要一定時間才穩定下來的表存放此處.等它穩定後才同步到月資料表空間裡去.這樣塊的FREE可以設定為0.
RAID5空間的表設計 要分區,雙分區,壓縮,索引組織表,塊FREE為0.畢竟這個空間主要存放超過一個月上的曆史資料.
最後所有的表的塊應該設計為64KB-128KB
開發中使用並行技術 /*+paraller(4)*/
記憶體表: with _as 共用一張記憶體資料
拆分資料庫中的表除了提取某些欄位外, 還經常需要 新增使用者,活躍使用者,儲值使用者,購買使用者等 有可能結果層統計資料時候要關聯很多表造成速度緩慢.
這可以把這幾張表做成聚族表.或者是把表做出列.
比如 使用者名稱, 註冊時間,第一次儲值時間,第一次購買時間,第一次等.
總體來說 1資料量小化,2資料區塊讀取少量化. 包含讀取的次數和塊的多少.