【GaussDB概述----邏輯、請求、事務、相關概念】

1. 數據庫邏輯結構圖

在這裏插入圖片描述

  1. Database,即數據庫,用於管理各類數據對象,各數據庫間相互隔離。數據庫管理的對象可分佈在多個Tablespace上。
  2. Datafile Segment,即數據文件,通常每張表只對應一個數據文件。如果某張表的數據大於1GB,則會分爲多個數據文件存儲。
  3. Table,即表,每張表只能屬於一個數據庫,也只能對應到一個Tablespace。每張表對應的數據文件必須在同一個Tablespace中。
  4. Block,即數據塊,是數據庫管理的基本單位,默認大小爲8KB。

2. 數據查詢請求的處理過程

在這裏插入圖片描述

3. 管理事務

事務是用戶定義的一個數據庫操作序列,這些操作要麼全做要麼全不做,是一個不可分割的工作單位。GaussDB 數據庫支持的事務控制命令有啓動設置提交回滾事務。GaussDB 數據庫支持的事務隔離級別有讀已提交事務可重複讀

1. 事務控制

-------------------------------------啓動事務-------------------------------------
格式一:START TRANSACTION 格式

START TRANSACTION
  [ 
    { 
       ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE | REPEATABLE READ }
       | { READ WRITE | READ ONLY }
     } [, ...] 
  ];

格式二:BEGIN 格式

BEGIN [ WORK | TRANSACTION ]
  [ 
    { 
       ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE | REPEATABLE READ }
       | { READ WRITE | READ ONLY }
      } [, ...] 
  ];

參數說明

WORK | TRANSACTION
BEGIN格式中的可選關鍵字,沒有實際作用。

ISOLATION LEVEL
指定事務隔離級別,它決定當一個事務中存在其他併發運行事務時它能夠看到什麼數據。

READ WRITE | READ ONLY
指定事務訪問模式(讀/寫或者只讀)

注意:在事務中第一個數據修改語句(INSERT,DELETE,UPDATE,FETCH,COPY)執行之後,事務隔離級別就不能再次設置。

示例

--以默認方式啓動事務。
START TRANSACTION;
SELECT * FROM tpcds.reason;
END;

--以默認方式啓動事務。
BEGIN;
SELECT * FROM tpcds.reason;
END;

--以隔離級別爲READ COMMITTED,讀/寫方式啓動事務。
START TRANSACTION ISOLATION LEVEL READ COMMITTED READ WRITE;
SELECT * FROM tpcds.reason;
COMMIT;

-------------------------------------設置事務-------------------------------------
語法格式

設置事務的隔離級別、讀寫模式。
{ SET [ LOCAL ] TRANSACTION|SET SESSION CHARACTERISTICS AS TRANSACTION }
  { ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE | REPEATABLE READ }
  | { READ WRITE | READ ONLY } } [, ...]

參數說明

LOCAL
聲明該命令只在當前事務中有效。

SESSION
聲明這個命令只對當前會話起作用。
取值範圍:字符串,要符合標識符的命名規範。

ISOLATION_LEVEL_CLAUSE
指定事務隔離級別,該參數決定當一個事務中存在其他併發運行事務時能夠看到什麼數據。

READ WRITE | READ ONLY
指定事務訪問模式(讀/寫或者只讀)

注意:在事務中第一個數據修改語句(INSERT,DELETE,UPDATE,FETCH,COPY)執行之後,事務隔離級別就不能再次設置。

示例

--開啓一個事務,設置事務的隔離級別爲READ COMMITTED,訪問模式爲READ ONLY。
START TRANSACTION;
SET LOCAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY;
COMMIT;

-------------------------------------提交事務-------------------------------------
注意:執行COMMIT這個命令的時候,命令執行者必須是該事務的創建者或系統管理員,且創建和提交操作可以不在同一個會話中。

語法格式

{ COMMIT | END } [ WORK | TRANSACTION ] ;

參數說明

COMMIT | END
提交當前事務,讓所有當前事務的更改爲其他事務可見。

WORK | TRANSACTION
可選關鍵字,除了增加可讀性沒有其他任何作用。

示例

--創建表。
CREATE TABLE tpcds.customer_demographics_t2
(
    CD_DEMO_SK                INTEGER               NOT NULL,
    CD_GENDER                 CHAR(1)                       ,
    CD_MARITAL_STATUS         CHAR(1)                       ,
    CD_EDUCATION_STATUS       CHAR(20)                      ,
    CD_PURCHASE_ESTIMATE      INTEGER                       ,
    CD_CREDIT_RATING          CHAR(10)                      ,
    CD_DEP_COUNT              INTEGER                       ,
    CD_DEP_EMPLOYED_COUNT     INTEGER                       ,
    CD_DEP_COLLEGE_COUNT      INTEGER
)
WITH (ORIENTATION = COLUMN,COMPRESSION=MIDDLE)
DISTRIBUTE BY HASH (CD_DEMO_SK);

--開啓事務。   
START TRANSACTION;

--插入數據。
INSERT INTO tpcds.customer_demographics_t2 VALUES(1,'M', 'U', 'DOCTOR DEGREE', 1200, 'GOOD', 1, 0, 0);
INSERT INTO tpcds.customer_demographics_t2 VALUES(2,'F', 'U', 'MASTER DEGREE', 300, 'BAD', 1, 0, 0);

--提交事務,讓所有更改永久化。
COMMIT;

--查詢數據。
SELECT * FROM tpcds.customer_demographics_t2;

--刪除表tpcds.customer_demographics_t2。
DROP TABLE tpcds.customer_demographics_t2;

-------------------------------------回滾事務-------------------------------------
注意:如果不在一個事務內部發出ROLLBACK不會有問題,但是將拋出一個警告信息。

**語法格式**
ROLLBACK [ WORK | TRANSACTION ];

參數說明

WORK | TRANSACTION
可選關鍵字。除了增加可讀性,沒有任何其他作用。

示例

--開啓一個事務
START TRANSACTION;

--取消所有更改
ROLLBACK;

2. 事務隔離級別

事務隔離級別,它決定多個事務併發操作同一個對象時的處理方式。

注意:在事務中第一個數據修改語句(SELECT,INSERT,DELETE,UPDATE,FETCH,COPY)執行之後,事務隔離級別就不能再次設置。

READ COMMITTED
讀已提交隔離級別。事務只能讀到已提交的數據而不會讀到未提交的數據,這是缺省值。
實際上,SELECT查詢會查看到在查詢開始運行的瞬間該數據庫的一個快照。不過,SELECT能查看到其自身所在事務中先前更新的執行結果。即使先前更新尚未提交。請注意,在同一個事務裏兩個相鄰的SELECT命令可能會查看到不同的快照,因爲其它事務會在第一個SELECT執行期間提交。

因爲在讀已提交模式裏,每個新的命令都是從一個新的快照開始的,而這個快照包含所有到該時刻爲止已提交的事務,因此同一事務中後面的命令將看到任何已提交的其它事務的效果。這裏關心的問題是在單個命令裏是否看到數據庫裏絕對一致的視圖。

讀已提交模式提供的部分事務隔離對於許多應用而言是足夠的,並且這個模式速度快,使用簡單。不過,對於做複雜查詢和更新的應用,可能需要保證數據庫有比讀已提交模式更加嚴格的一致性視圖。

READ UNCOMMITTED
讀未提交隔離級別。GaussDB 不支持READ UNCOMMITTED,如果設置了READ UNCOMMITTED,實際上使用的是READ COMMITTED。

REPEATABLE READ
事務可重複讀隔離級別。事務只能讀到事務開始之前已提交的數據,不能讀到未提交的數據以及事務執行期間其它併發事務提交的修改(但是,查詢能查看到自身所在事務中先前更新的執行結果,即使先前更新尚未提交)。這個級別和讀已提交是不一樣的,因爲可重複讀事務中的查詢看到的是事務開始時的快照,不是該事務內部當前查詢開始時的快照,就是說,單個事務內部的select命令總是查看到同樣的數據,查看不到自身事務開始之後其他併發事務修改後提交的數據。使用該級別的應用必須準備好重試事務,因爲可能會發生串行化失敗。

SERIALIZABLE
事務可序列化。GaussDB 不支持SERIALIZABLE,如果設置了SERIALIZABLE,實際上使用的是REPEATABLE READ。

4. 相關概念

數據庫
數據庫用於管理各類數據對象,與其他數據庫隔離。創建數據時可以指定對應的表空間,如果不指定相應的表空間,相關的對象會默認保存在PG_DEFAULT空間中。數據庫管理的對象可分佈在多個表空間上。

表空間
在GaussDB 中,表空間是一個目錄,可以存在多個,裏面存儲的是它所包含的數據庫的各種物理文件。由於表空間是一個目錄,僅是起到了物理隔離的作用,其管理功能依賴於文件系統。

模式
GaussDB 的模式是對數據庫做一個邏輯分割。所有的數據庫對象都建立在模式下面。GaussDB 200的模式和用戶是弱綁定的,所謂的弱綁定是指雖然創建用戶的同時會自動創建一個同名模式,但用戶也可以單獨創建模式,並且爲用戶指定其他的模式。

用戶和角色
GaussDB 使用用戶和角色來控制對數據庫的訪問。根據角色自身的設置不同,一個角色可以看做是一個數據庫用戶,或者一組數據庫用戶。在GaussDB 中角色和用戶之間的區別只在於角色默認是沒有LOGIN權限的。在GaussDB 中一個用戶唯一對應一個角色,不過可以使用角色疊加來更靈活地進行管理。

事務管理
在事務管理上,GaussDB 採取了MVCC(多版本併發控制)結合兩階段鎖的方式,其特點是讀寫之間不阻塞。GaussDB 的MVCC沒有將歷史版本數據統一存放,而是和當前元組的版本放在了一起。GaussDB 沒有回滾段的概念,但是爲了定期清除歷史版本數據GaussDB 引入了一個VACUUM進程。一般情況下用戶不用關注它,除非要做性能調優。此外,GaussDB 是自動提交事務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章