① 干貨分享|優炫資料庫支持多業務場景(二)
上期分享中,我們介紹優炫資料庫支持的數據存儲方式。
戳: 干貨分享 優炫資料庫支持多業務場景
本期,我們來講講優炫資料庫支持的多種數據類型。
基本數據類型存儲與管理
優炫資料庫擁有完備的數據類型,內置數據類型包括 數字類型、貨幣類型、字元類型、日期/時間類型、布爾類型、枚舉類型、網路地址類型、位串類型、文本搜索類型等, 支持使用 serial 類型創建表自增列。
通常為了加快指定過濾條件下從表中查詢數據的速度,可以為表的某個欄位或某幾個欄位建立索引。資料庫對基本數據提供多種索引類型:B-tree、Hash、GIN(倒排序索引)和 BRIN(資料庫塊范圍索引)。每一種索引類型使用了一種不同的演算法來適應不同類型的查詢。 默認情況下, CREATE INDEX命令創建適合於大部分情況的B-tree索引。
XML/JSON數據類型存儲與管理
優炫資料庫內置半結構化XML、JSON、JSONB數據類型。
xml數據類型可以被用來存儲XML數據,它比直接在一個謹培鄭text域中存儲XML數據的優勢在於,它會檢查輸入值的結構是不是良好,並且有支持函數用於在其上執行類型安全的操作。xml類型可以存儲結構良好(如XML標准祥頌所定義)的「文檔」,以及「內容」片段,它們由XML標准所定義,這意味著內容片段中可以有多於一個的頂層元素或字元節點。通過表達式來評估一個特定的xml值是一個完整文檔或者僅僅是一個文檔片段。
JSON類型強制檢查數據有效性,使用專門的操作符和內置函數操作數據,保留空格,重復鍵和順序等。JSONB是解析輸入後保存的二進制數據,刪除了數據中的空格、調整了順序、優化了存儲、保留最後一個重復鍵值,可被索引。和 JSON 一樣,JSONB支持嵌入式的文檔和數組。JSONB 由若干個鍵值對存儲為單個實體,這種實體稱為文檔。 JSONB具有以下幾個特性:輕量級(Lightweight),可遍歷性(Traversable),高效性(Efficient)。 由於所需存儲更小,JSONB通常是首選格式。兩者區別在於:JSON類型寫快讀慢,JSONB類型寫慢讀快,支持SQL/JSON路徑語言。此外,資料庫支持對這兩類數據的全文檢索。
GIS空間類型存儲與管理
優炫資料庫支持GIS的地理信息應用,支持PostGIS、ArcGIS、超圖,支持OpenGIS聯盟(開放地理信息系統,OGC)抽象數據類型的SQL3規范,提供對地理矢量數據、3D模型、線性參考數據的組織、存儲、空間索引和管理。
Geometry(幾何對象類型)是優炫資料庫的一個基本存儲類型, 空間數據都會以Geometry的形式存儲在資料庫里,本質是個二進制對象。使用OGC推中鋒薦的WKT(Well-Known Text)和WKB(Well-Known Binary)格式進行描述,大幅增加了易用性,WKT與WKB基本數據類型(矢量數據)包括:
l 點 (POINT):例如POINT(0 0);
l 線 (LINESTRING):例如LINESTRING(0 0,1 1,1 2)
l 面 (POLYGON多邊形):例如POLYGON((0 0,4 0,4 4,0 4,0 0)) 簡單多邊形,例如POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)) 多邊形有一個內部的"孔洞(hole)";
l 多點 (MULTIPOINT):例如MULTIPOINT((0 0),(1 2));
l 多線 (MULTILINESTRING):例如MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4));
l 多面 (MULTIPOLYGON):例如MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)));
l 幾何集合 (GEOMETRYCOLLECTION):例如GEOMETRYCOLLECTION(POINT(2 3),LINESTRING(2 3,3 4))。
柵格空間數據類型raster用於表示jpeg,tiff,png,DEM模型這樣文件格式的數據。每一個柵格至少有1個波段,每個波段又有一系列像素值,柵格數據是轉換成地理坐標的。可以從資料庫外部導入已有柵格數據,也可在資料庫內創建柵格數據。下面是一個在資料庫內部創建柵格數據的示例:
拓撲類型和函數用於管理拓撲結構,比如面、邊界和點。
創建一個帶有柵格記錄的柵格列的表可以用下面的SQL完成:
如果創建的柵格不依賴於其他柵格,那麼可以使用函數:
ST_MakeEmptyRaster,接著使用ST_AddBand添加柵格數據。也可以使用geometry對象來創建柵格你需要使用函數ST_AsRaster。可能還需要和其他函數比如函數ST_Union 或函數 ST_MapAlgebraFct 或者其他地圖代數系列函數聯合使用。甚至還有一些根據一些已經存在的柵格表創建新的柵格表的可選函數。例如可以使用函數ST_Transform 根據一個已有的柵格表在其他投影系中創建一個新的柵格表。然後通過下SQL命令創建一個空間索引:
通過空間索引R-Tree實現空間數據查詢和操作,R-Tree將數據分解為矩形(rectangle)、子矩形(sub-rectangle)和子-子矩形(sub-sub rectangle)等。它是一種可自動處理可變數據的密度和對象大小的自調優(self-tuning)索引結構。
圖數據存儲與管理
圖數據以圖關系這種數據結構存儲,把圖數據的頂點和邊信息存儲到關系型數據類型中,這些信息包括:
l 頂點(Vertices):一個實體一個頂點,一個實體可以有多個屬性。
l 邊(Edges):兩個實體之間的連接線。
l 屬性:實體和邊都可以有多個屬性。形象舉個例子,一個實體對應關系表中一行記錄,一個實體的屬性代表關系表中這行記錄的所有欄位和值構成的鍵值對。
在優炫資料庫中圖數據通過關系型數據進行存儲,這些數據與圖模型中的數據相對應。例如通過下SQL語句建立存儲圖數據的表:
然後新增加數據,後續就可以根據這些數據進行圖相關的計算和分析了。
時序數據存儲與管理
時序數據存儲和管理,通過把時序數據存儲到關系型數據類型中。時序數據是指時間序列數據。時間序列數據是同一統一指標按時間順序記錄的數據列。在同一數據列中的各個數據必須是同口徑的,要求具有可比性。時序數據可以是時期數,也可以時點數。時間序列分析的目的是通過找出樣本內時間序列的統計特性和發展規律性,構建時間序列模型,進行樣本外預測。
文檔/圖片/視頻類型存儲與管理
優炫資料庫可存儲任意未知具體內容的圖片、聲音、視頻等非結構化數據,支持 GB 級大對象數據類型與流式數據訪問。可藉助於資料庫圖形化管理工具、應用程序、第三方工具等查看這些非結構化數據。根據業務需要也可藉助資料庫插件讀取或識別這些非結構化數據的內容用於數據分析。
優炫資料庫支持多種二進制數據類型,包括:Bytea、OID、Blob、raw、Varbinary、Longvarbinary。
自定義數據類型存儲與管理
優炫資料庫可自定義數據類型、索引、函數等資料庫對象。 新增加的數據類型可以是新數據類型,也可以是已知幾個數據類型的復合數據類型。
模分析型資料庫用戶可在資料庫中使用CREATE TYPE或CREATE DOMAIN命令增加新的數據類型;可通過自定義函數或存儲過程對數據進行各種處理。
CREATE TYPE在當前資料庫中注冊一種新的數據類型,定義數據類型的用戶將成為它的擁有者。五種形式的CREATE TYPE,它們分別創建組合類型、枚舉類型、 范圍類型、基礎類型或者 shell 類型。shell 類型僅僅是一種用於後面要定義的類型的佔位符,通過發出一個不帶除類型名之外其他參數的CREATE TYPE命令可以創建這種類型。在創建范圍類型和基礎類型時,需要 shell 類型作為一種向前引用。
CREATE DOMAIN創建一個新的域。 域本質上是一種帶有可選約束(在允許的值集合上的限制)的數據類型。域主要被用於把欄位上的常用約束抽象到一個單一的位置以便維護。例如,幾個表可能都包含電子郵件地址列,而且都要求相同的 CHECK 約束來驗證地址的語法。可以為此定義一個域,而不是在每個表上都單獨設置一個約束。