一 Oracle的OLTP和OLAP模式

2021-09-04 22:14:39 字數 3239 閱讀 5957

oracle屬於傳統的關係型資料庫,在建庫應用時,大致可以分為oltp和olap兩種模式,針對這兩種不同模式,oracle都有的不同的技術應用和優化技巧。先簡單介紹這一下這兩種模式:

olap(on-line analytical processing):聯機分析處理,用於做複雜的sql關聯和資料分析,向高層展示彙總資料(也就是各種報表),最終用於支撐決策。也類似與平常說的資料倉儲。oracle的olap模式在以前應用更多一些,但是通過最近幾年大資料的熱潮,oracle的這個模式逐漸會被淘汰掉,更多會使用大資料系列工具(hadoop系列)。原因也很簡單:一是對於pb級別的資料,oracle的olap模式幾乎毫無應對之法,單機處理效能始終有限,而hadoop系列採用分布式儲存,分布式處理,能橫向擴充套件對於tb和pb級別的資料量都能有良好的處理效能。 二是hadoop系列開源,免費,強一點的公司還可以自己做定製化,而oracle不開源,維護費用昂貴。當然,oracle的olap模式現在還沒有被淘汰,畢竟hadoop的穩定性還在日趨完善,產品的替換也是需要很多人力,財力的投入。

了解這兩種模式的基本概念和主要用處之後,就可以去了解一下oracle在這兩種模式下面的一些應用技巧:

對於oltp模式,

1. 在設計表結構時,需要嚴格遵守資料庫的三正規化規則。資料庫的三正規化簡單講就是:1.表的每一列具有原子性。2.表的其他列必須和主鍵是完全依賴,不能是部分依賴。3.表的其他列必須和主鍵是直接關係,不能是間接關係。其實設計表的時候,在滿足業務需求的情況下,主要考慮一下:你的表中一列能不能拆分成兩列?需不需要拆分成兩列?每一行資料的唯一標識/主鍵?資料冗餘情況(比如說:使用者名稱,產品名等等所有你需要儲存的資料。能不能讓他們在整個資料庫裡面只儲存一次)?當然,大部分工作時候,只需要按照前人的設計模式來就行了。

2. cache技術在所有的高響應系統中都是很常見,web cache與oracle data buffer,都有應用模板,用的時候按照需求改一改就行了。

3. b-tree索引技術,其實就是oracle常用的全域性索引/本地索引,對應sql語句就是 create index ***x,具體oracle的內部實現原理就要參考資料結構了。(採用的二叉平衡樹,所有葉子節點具有相同的深度,因此查詢速度和資料分布以及查詢條件之間沒啥關係)

4. 分割槽交換(exchange partition),簡單點說,就是把一張表中的歷史資料(比如一年前的),遷移到另外一張歷史表裡面去。我們當然可以手動insert into 然後delete from,但是這樣做,速度慢並且影響到索引,並且資料量大的話,會對高響應系統造成延遲。因此可以用oracle提供的分割槽交換 exchange partition 語句。它可以實現資料快速轉移,所以在資料載入提速,歷史資料清理等方面特別有用。分割槽交換技術實際上只修改了資料字典中的資料物理段位置,而不是實際的移動資料,所以速度很快。用法也很簡單: alter table table_a exchange partition p1 with table table_a_tmp; 在實際使用的時候,因為oltp嚴格遵守資料庫三正規化,所以需要注意主外來鍵關聯。

對於olap模式:

1. olap主要用於複雜的sql關聯和資料計算彙總,最終目的是在最短時間內提供高可用的報表以供市場部門支撐決策。所以資料倉儲模型的建立非常重要,主要用的技術有分割槽技術,並行技術。當然還有很多資料處理,彙總的小技巧,之後的部落格文章會慢慢寫。同時對於之前提到的oltp中的技術,在olap中沒有多大的用處,同樣的olap中的技術在oltp模式中也是效果不大。

2. 分割槽技術,olap中主要使用時間範圍分割槽或者以時間範圍分割槽為基礎的復合分割槽。因為資料都是具有時效性的,時間屬性在資料分析中有著極其重要的地位。而oltp基本不建議使用時間範圍分割槽和復合分割槽,最多可以使用列表分割槽。使用起來的話,也是非常的簡單,在建表的時候 create table ***x partition by range ( partition p_1 value less than 1212)

3. 並行技術,這裡的並行技術是指,將乙個複雜關聯,資料量龐大的計算彙總sql拆分成多個程序,從而達到並行。應用的話,也是很簡單,直接使用/* parallel(talbe_a,4)*/,這樣在計算table_a表裡面的資料時,oracle會自動拆分成四個程序,同時計算。

4. 資料倉儲,這個後面有時間可以專門做一些介紹。

下面我解釋一下為什麼說:之前提到的oltp中的技術,在olap中沒有多大的用處,同樣的olap中的技術在oltp模式中也是效果不大。

1.  對於資料庫三正規化,olap目的是最短時間內提供高可用的資料,如何從資料庫最快取資料?那就是我要的資料都在一張表裡面,我用乙個最簡單的select * from table_a 就能拿到。所以olap是允許資料冗餘,不需要嚴格遵守資料庫三正規化。

2.  對於cache技術,olap模式基本上要對採集過來的所有資料做一次資料計算彙總然後儲存。注意,所有的資料都需要遍歷一次。這個時候cache技術的什麼命中率效果可以忽略了,倒是高容量的記憶體更好用一些。

3. 對於b-tree索引技術,因為olap大多是分割槽表,全域性索引基本不用,本地索引在大量資料插入的時候,維護代價太大。(olap用於資料分析,每天會採集大量資料入庫,計算彙總)一般情況下是不推薦使用的,除非是獨特的業務場景。補充乙個位圖索引,當資料表中某一列的取值範圍固定的時候(比如性別這一列,只能填充:男,女),olap模式可以嘗試使用位圖索引。不過對於olap模式來講,也不是很重要。因為olap分析通常不是實時/準實時的,假如用位圖索引能將sql從10分鐘優化到5分鐘。對於非實時系統分析而言5分鐘顯得不是那麼的關鍵。不過可以作為小的優化專案。用法: create bitmap index ***x

4. 分割槽交換,在條件允許的情況下,olap需要盡可能保留歷史資料用於分析,不需要使用分割槽交換。

5. 分割槽技術,oltp基本不建議任何型別的分割槽,最多可以使用列表分割槽。為什麼?oltp是盡量以最簡單的增刪查改為主,避免複雜sql。建立分割槽的話,需要將分割槽關鍵字作為 where 搜尋條件之一,不然的話,還是要搜尋全部分割槽。所以對於web開發者而言,索引明顯更加好用。

6.  並行技術,在oltp裡面應該要禁止使用這種 /* parallel(talbe_a,2) */ 。為什麼?上面介紹 並行技術是指,將乙個複雜計算彙總的sql拆分成多個程序,從而達到並行。oltp是以最簡單的增刪查改為主,這個時候oracle的拆分耗時,都會大於簡單查詢耗時,得不償失。並且在oltp的高併發(多人同時使用)的情況下,再使用並行 /* parallel(talbe_a,2) */,相當直接double了一下訪問峰值。

上面,淺顯的介紹了一些通用的技術和應用場景,最後還是要說,實際工作中,在保證系統允許穩定並且錢給夠的情況下:需求》一切。對,誰讓甲方是father呢。

OLAP和OLTP的介紹

資料處理大致可以分成兩大類 聯機事務處理 oltp on line transaction processing 聯機分析處理 olap on line analytical processing oltp 是傳統的關係型資料庫的主要應用,主要是基本的 日常的事務處理,例如銀行交易。olap 是資料...

OLTP和OLAP的區別

弄清楚你的業務型別 oltp or olap2009 06 06 20 55 在oracle資料庫系統中,很多人沒有弄清楚自己的業務型別到底是什麼,就在開始盲目的尋求優化方法,而往往是把olap的方法使用在oltp上,或者是oltp的方法使用在olap上。這樣的使用,有的時候,對效能沒有任何的提高,...

OLTP和OLAP的區別

聯機事務處理oltp on line transaction processing 主要是執行基本的 日常的事務處理,比如資料庫記錄的增 刪 改 查。比如在銀行訪問一筆款,就是乙個事務交易。oltp的特點一般有 1.實時性要求高 2.資料量不是很大 3.交易一般是確定的,所以oltp是對確定性的資料...