了解系列廢話:
數據管理系統實現,以Greenplum作為課后實驗,這里將實驗報告貼出來,純粹灌水。
1.Greenplum架構
如上圖所示,GP的基本結構是單master,多slave節點,客戶端連接到master節點,master節點可以配置一個備機。多個segment節點都有主備兩個數據區,鏡像數據區存放的的是其他segment上的數據,只是目前看來,GP允許一個segment的失效,若有多個節點失效,有可能有的數據找不到鏡像。節點間並不共享使用數據,而是通過internect模塊相互通信。所有的客戶端都是連接到master節點上,因此為了降低master的負載,master上執行的動作不會太多,只負責執行計划生成、分發、收集結果,數據字典管理,不承擔數據的處理,存放等。Segment負責業務數據的存取、執行master發送過來的sql語句,彼此間對等。
2. Greenplum基本使用
首先根據教程安裝好GP系統,參考了網絡上的一篇博客教程:Greenplum 源碼安裝教程 —— 以 CentOS 平台為例http://www.cnblogs.com/arthurqin/p/5849354.html
GP安裝好,並使用gpinitsystem 命令完成初始化之后,使用 psql -d postgres 可以開始使用GP。GP有一些基本命令如下:
GP服務啟停
gpstart :啟動GP服務。當虛擬機關閉重新登錄時需要此命令。
gpstop :關閉GP服務。
gpstop -M fast :快速關閉。
gpstop –r :重啟。
gpstop –u :重新加載配置文件。
登錄與退出GP客戶端
登錄:
psql databasename
psql -d databasename -h hostname -p port -U gpusername
退出: \q
查看系統庫版本
數據庫基本操作
創建、刪除數據庫
在GP初始化系統后,GP會自動創建出三個數據庫postgre,template0,template1.
其中postgre用作系統內部數據的存放,既不要刪除它,也不要修改它。template1是系統默認的數據,創建數據庫時可以以template1為模板,創建新的數據庫。template0數據庫是創建template1的模板。
命令:CREATE DATABASE dbname ; DROP DATABASE dbname;
GP基本sql語法
創建簡單的表
列出數據庫中所有的表
查看查詢計划
基本SQL語法查看方式,使用幫助
GP的SQL語法特殊說明:
A.Create table:
GP的建表語句與通常的數據庫語句基本一致,但是作為分布式數據庫,有一些不同的地方。 1.建表時需要制定分布鍵distributed by,用以散列數據到不同的segment節點;2.partition by用某個字段將表建成分區表;3.like操作創建與like的表一樣的結構;4.inherits可實現表的繼承。
B.SELECT
GP的select語句,與普通數據庫語句一樣,但是可以不指定from語句,執行函數和簡單的計算。在沒有添加order by子句的時候,select的結果不能保證順序,並且兩次查詢的結果也不一定是一樣的。
查看數據分布
C.INSERT、UPDATE/DELETE
與標准Sql用法相同。Insert語句分布鍵要為空,否則數據都被保存在一個節點上,造成數據分布不均勻。Insert采用批量操作,可以提升執行速度,如isnert into values(),(),()。Update 不能對分布鍵進行更新。 Delete 在4.3版本中支持設計子查詢語句,且子查詢的結果設計數據重分布。TRUNCATE直接刪除物理文件,然后重建新數據文件,對整張表刪除更快,例truncate tbname。
3. Greenplum系統表含義
pg_class:
GP數據字典中最重要的一個系統表,保存着所有的表、試圖、索引的元數據信息,每個DDL/DML操作都必須跟這個表發送聯系。
字段 |
類型 |
引用 |
字段說明 |
oid |
oid |
|
pg_class中的唯一標識 |
relname |
name |
|
表、索引、視圖等的名稱 |
relnamespace |
oid |
pg_namespace.oid |
包含這個關系的名字空間的oid |
reltype |
oid |
pg_type.oid |
對應這個表的行類型的數據類型(索引為0,沒有此項) |
relowner |
oid |
pg_authid.oid |
關系的所有者 |
Relam |
oid |
pg_am.oid |
索引的訪問模式(B-tree/hash等) |
Reltuples |
float4 |
|
表中行的數目。估計值。 |
relhasindex |
bool |
|
是表且至少有一個索引為true |
relkind |
char |
|
r=普通表或appendonly表,i=索引,s=序列,v=視圖,c=復合類型,t=TOAST表,o=內存appendonly文件,u=未列入目錄的臨時表。 |
relnatts |
Int2 |
|
關系中用戶字段數目(除了關系中的系統字段)。 |
relacl |
Aclitem[] |
|
訪問權限 |
pg_atrribute:
這個表記錄了關系的字段的內容。表中實際上有一些隱藏字段如記錄; 數據保存在哪個segment上的gp_segment_id。
字段 |
類型 |
引用 |
字段說明 |
attrelid |
oid |
pg_class.oid |
此字段所屬的表 |
attname |
name |
|
字段名稱 |
atttype |
oid |
pg_type.oid |
此字段的數據類型 |
attstattarget |
int4 |
|
控制ANALYZE為這個字段積累的統計細節的級別。0表示不收集統計信息。 |
attlen |
Int2 |
|
pg_type.typlen的副本 |
attnum |
int2 |
|
字段數目。從1開始計數 |
attisdropped |
bool |
|
字段刪除標記 |
attnonull |
bool |
|
非空約束 |
attndims |
int4 |
|
字段為數組,表示維數。 |
gp_distribution_policy:
保存着表的分布鍵。
字段名 |
引用 |
字段說明 |
localoid |
pg_class.oid |
表的oid |
ocaloid |
pg_attribute.attnum |
保存分布鍵對應的attnum的一個數組 |
pg_stats:
數據庫中表的統計信息保存在pg_statistic,由ANALYZE創建記錄。在這個表pg_statistic的上面有一個視圖pg_stats;
字段 |
類型 |
引用 |
字段說明 |
schemaname |
name |
pg_namespace.nspname |
包含此表的的模式名稱(名字空間) |
tablename |
name |
pg_class.relname |
表的名稱 |
attname |
name |
pg_attribute.attname |
這一條記錄描述的字段的名稱 |
null_frace |
real |
|
記錄中字段為空的百分比 |
avg_width |
integer |
|
記錄以字節為單位的平均寬度 |
most_common_vals |
anyarray |
|
一個字段中最常用數值的列表。沒有數值比較常見則為NULL。 |
4.參考
關於GP的參考資料,首先最好的當然是去官網上有詳盡的資料,可以去參考doc目錄下的內容,各種手冊還是比較詳細的。
官網: https://pivotal.io/big-data/pivotal-greenplum
另外若需要先刷一下中文資料,可以參考《Greenplum企業應用實戰》。這個資料好像csdn上有,我也給分享了百度雲連接。里面還有一個ppt,算是DBA培訓手冊。
https://pivotal.io/big-data/pivotal-greenplum
其他,阿里雲棲社區,有些話題會討論greenplum,也可以逛逛。但是我嘗試里面的一篇文章,擴展segment節點,沒能成功/(ㄒoㄒ)/~~。