海量資料庫設計思想

2021-06-19 01:40:48 字數 3875 閱讀 4682

分割槽

1.範圍分割槽

a.通常按時間字段劃分

create table 

partition by range() (

partition partition_1 values less than (to_date('01/02/2000','dd/mm/yyyy')),

partition partition_2 values less than (to_date('01/03/2000','dd/mm/yyyy')) )

b.使用傳遞表空間的方式匯出歷史資料入olap資料庫

表空間上的物件必須為自包含,表示為:

a.索引在這個表空間上,它所引用到的表不在其他表空間上

b.分割槽表的部分分割槽不在其他表空間上

c.完整性約束的參考物件不在其他表空間上

d.表中包含的lob物件不在其他表空間上

c.使用分割槽交換的方法,將分割槽表(不同分割槽使用不同表空間)的部分分割槽轉換到某臨時建立的表空間,然後使用表空間傳遞

alter table

partition_table

exchange partition

partition_1

with table

tmp_table

including indexes with validation

tmp_table與

partition_table有相同的表結構定義

2. 雜湊分割槽

a.適合於在各個分割槽中資料分布要求均勻的情況下,比如分割槽表空間存放在不同的容量相近的物理介質中,可以提高dml的並行操作(因為平均)

create table

partition by hash()

partitions 8

b.雜湊分割槽是一種基於hash函式的分割槽方式,不能drop,split以及merge分割槽,但是可以truncate分割槽,分割槽索引,分割槽裁剪可用

c.雜湊分割槽資料均勻分布的前提條件是,hash列重複率比較低

3. 列表分割槽

提供一種按照欄位的值來進行分割槽的方法,適合有高重複率的字段值的表

create table

partition by list() (

partition partition_1 values(),

partition partition_2 values(),

partition partition_other values(default) --預設分割槽 )

4. 組合分割槽

a.範圍-雜湊組合分割槽

create  table

partition by range()

subpartition by hash() (

partition p1 values less than() (

subpartition sp1,

subpartition sp2 )

), (

partition p2 values less than() (

subpartition sp3,

subpartition sp4 )

)b.範圍-列表組合分割槽

create  table

partition by range()

subpartition by list() (

partition p1 values less than() (

subpartition sp1 values () ,

subpartition sp2 values ()  )

), (

partition p2 values less than() (

subpartition sp3 values () ,

subpartition sp4 values ()  )

) 索引

1. b樹索引

a.主鍵或者唯一性約束

主鍵更強調表的關係性,它可以被其他表的外來鍵所用

唯一性約束則強調字段值的唯一性

即使有上億條記錄的表中,b樹索引的效能不被影響多少

b.鍵值重複率較低的字段

2. 位圖索引

每乙個位圖索引的鍵值中,都會存放指向很多行的指標,而不是一行,這樣,位圖索引存放的鍵值就會比b樹索引少得多

位圖索引適合對索引的鍵值進行count這樣的操作,也非常適合在索引欄位間進行或(「or」)與(「and」)這樣的邏輯運算操作

位圖索引占用的空間要遠小於b樹索引占用的空間

不適用於有大量「寫」操作的資料庫,在於更新時會阻塞相應鍵值的多行記錄

3. 全文索引

create index *** on t(name) indextype is ctxsys.context;

select * from t where contain(name,'***') >0

建立了dr$開頭的四個全文索引的基表,所有的全文索引的資訊都保留在這些基表內。索引建立在基表上。全文索引本身並不包含資料,也不占用空間(無段物件在user_segments)

全文索引占用的空間非常大,會達到原表的幾倍或者更多

以context方式建立的全文索引預設不是基於事務的,當提及dml操作,修改的資訊不會影響索引,而是存放在dr$penging表中,需要同步索引更新

alter index *** rebuild parameters('sync')

物件屬性

oltp系統以下的物件屬性應該受到關注:

pct_free               乙個資料塊中空閒空間的最小百分比

pct_used               乙個資料塊儲存資料的最小百分比

ini_trans               乙個資料塊上最初分配的事務數

max_trans               乙個資料塊上最大分配的事務數

initial_extent          第乙個extent的大小

next_extent          下乙個extent的大小

min_extents          段首次分配的extent的大小

max_extents          最大可分配的extent的大小

pct_increase          extent擴充套件時,每次增加的百分數

freelists               段中空閒塊列表

cache                    是否快取到記憶體中

olap系統以下的物件屬性應該受到關注:

degree

物件並行執行時使用的並行度,並非並行度越高,執行效率就越高,和系統資源,cpu數量,是否rac架構等因素有關

在物件(表,索引等)上建立並行度

伺服器cpu數x每個cpu啟用的執行緒數=預設並行度

select degree from user_tables where table_name=''

使用hint方式

select /*+ parallel(t1 4) */ from t1;

並行度不能在分割槽級別設定

compression

分割槽表或者分割槽索引是可以單獨壓縮的

alter table t1 modify partition p1 compress;

分割槽索引的壓縮要求先建索引的壓縮,然後取消分割槽索引的壓縮

alter index t1_idx rebuild partition p1 nocompress

資料壓縮,釋放更多的磁碟空間給其他物件使用,前提是資料重複率高有效

提高查詢效能,壓縮之後,掃瞄的資料塊數量變少,物理i/o減少,一致性讀減少。

dml操作涉及資料壓縮的有:

alter table move

create table as select

sqlldr+ direct path

普通的insert操作沒有資料壓縮

015 資料庫設計思想

資料庫的設計 參考文獻 1 多表之間的關係 1.1 分類 1 一對一 只做了解 比如 某個人和它的身份證 分析 乙個人只要乙個身份證,乙個身份證只能對應乙個人。2 一對多 或叫多對一 如 部門和員工 分析 乙個部門多有個員工,乙個員工只能對應乙個部門 3 多對多 如 學生和課程 分析 乙個學生可以選...

資料庫設計中引入OOD思想

例子 汽車銷售商要求對銷售車型的建立資料庫進行統計 考慮這樣幾種設計方案 1 轎車 id,顏色,車長,排量,最多乘坐人數,銷量,有無頂窗 卡車 id,顏色,車長,排量,最多乘坐人數,載重量,銷量 電單車 id,顏色,車長,排量,踏板或檔位車 2 車 id,顏色,車長,排量,最多乘坐人數,銷量,有無頂...

rbac許可權控制資料庫設計思想

rbac是乙個基於角色的訪問控制,作用是實現訪問控制,是一種資料庫設計思想,根據 rbac 思想進行資料庫設計 根據資料庫設計更 好的完成許可權控制.許可權控制經常分類 1.選單功能 2.url控制 控制訪問不同的控制器 3.資源可見性 頁面某些元素對不同的使用者可見性不同 示例場景 需求 新增乙個...