簡單了解GaussDB

大家都已經很熟悉openGauss了,昨天我的文章中說陜西電力的用采系統用Gaussdb替代了Oracle,就有朋友問我這個Gaussdb是不是就是openGauss。這個問題還真的有點不好回答,Gaussdb和openGauss淵源很近,但是還不是一碼事。華為在數據庫產品這方面還是挺復雜的。這個Gaussdb實際上指的是Gaussdb企業版,在早期的華為云上,叫做Gaussdb for openGauss。這個企業版的Gaussdb分為分布式和主備兩種形態,陜西用采用的是其中的分布式版本。而openGauss是Gaussdb產品的開源版本,是基于Gaussdb代碼基礎上分離出來的一個獨立的數據庫產品,也就是其主備版本,其中的分布式特性是完全剝離的。

這是一個Gaussdb的分布式形態的架構圖。從這張圖上,我們可以看出Gaussdb分為CN/DN/GTM三種節點。CN是計算節點,DN是存儲節點,GTM是分布式事務管理器。實際上還有一些其他的組件,比如集群管理CM,管理配置信息的ETCD等,這里就不一一羅列了。

CN是Coordinator Node的簡稱,負責數據庫系統元數據存儲、查詢任務的分解和部分執行,以及將DN中查詢結果匯聚在一起。DN是數據存儲節點,負責存儲本地數據,并且負責分布式執行計劃的本地算子執行。

可能有些朋友看到上面的架構會想起POSTGRES-XC這個開源項目,確實是的,早期的GAUSSDB是基于POSTGRES-XC開源項目的,因此雖然經過多年迭代,還是保留了一定的PGXC的痕跡。有興趣的朋友可以去做個對比,實際上目前的Gaussdb與PGXC已經是完全不同的數據庫了。

從這張圖上,我們可以看出Gaussdb執行SQL的邏輯。客戶端通過CN的監聽端口連接到數據庫上,在CN上發起一個SQL查詢。CN進行SQL解析,生成分布式執行計劃,并將查詢計劃下推到多個DN,DN啟動執行線程完成查詢,將結果返回CN,CN匯總執行結果,對客戶端返回結果。

針對網上對Gaussdb的質疑,認為Gaussdb僅僅是PG套殼,實際上也是不夠嚴肅的。實際上在Gaussdb的官方文檔中也沒有遮遮掩掩,直接表明了Gaussdb與PG以及PG-XC的關系。Gaussdb與PG的主要區別在于進程模型與線程池模型的差異,以及Gaussdb在PG的ASTORE基礎上自研了內存引擎,列存和USTORE。目前在openGauss中USTORE還是處于BETA版本,而在商用的Guassdb上,USTORE已經正式商用了。

另外在GTM上,Gaussdb改寫了PGXC的GTM,打破了PGXC在高并發環境下的GTM性能瓶頸。開源的PGXC因為GTM過重,并且GTM無法橫向擴展而導致高并發的負載下,GTM會成為一個十分明顯的瓶頸點。

作為信創替代工作的潛在數據庫產品,大家可能很關心Gaussdb的Oracle兼容性問題,從openGauss上我們看到的和Oracle兼容的特性并不很多,因此很多朋友可能很關心Gaussdb是不是也像openGauss一樣。如果簡單分析一下Gaussdb,我們還是可以看出研發團隊還是在兼容性上做了一定的工作的。首先PL/SQL存儲過程的兼容性還是不錯的,大多數Oracle的存儲過程是可以簡單的遷移過去的,當然PL/SQL上不大可能100%兼容,大多數國產數據庫,哪怕是和Oracle兼容性做得很好的達夢數據庫都只能做到90+%的存儲過程語法兼容,不過這些兼容對于大多數應用遷移來說就完全夠用了,Oracle PL/SQL的一些特殊語法,可能大多數開發人員都沒聽說過。

在語法上,Gaussdb支持(+)外連接,“||”拼接字符串等Oracle數據庫的操作,還是做了一定的友好性兼容的,NVL,DECODE等函數也實現了和Oracle語法的兼容,也設計了rowid位列。不過Gaussdb并沒有引入Oracle的dual表,因此雖然sequence的語法做了與Oracle兼容,不過只能使用select seq.nextvel 語法來替代select seq.nextvel from dual;。遇到這種Oracle數據庫使用的比較頻繁的語句還是要修改應用的。另外rownum位列的缺失也會讓分頁查詢的語法與Oracle的一些傳統寫法不同。另外在時間函數上,Gaussdb引入了sysdate,并且支持對sysdate進行類似Oracle的加減法操作。不過我并沒有找到systimestamp,如果要使用timestamp就只能使用pg_systimestamp了。

在統計和窗口函數上,Gaussdb提供的內容要比Oracle還豐富一些,這對于分布式數據庫來說是十分重要的。這方面實際上是分布式數據庫的一個短板,能夠提供豐富的統計與窗口函數,說明Gaussdb在復雜SQL語法兼容方面做得還可以。不過因為條件有限,我目前還沒有做真實的測試,性能是不是夠好,還不敢說。

可以看出Gaussdb商用版在Oracle語法兼容上做了一定的工作,如果要從Oracle遷移應用過來,比起openGauss來會簡化不少,不過比起這方面做得最好的國產數據庫達夢數據庫來看,還是有一定的差距的。

語法兼容性還是一些表面的問題,實際上如果把應用從集中式的Oracle數據庫遷移到分布式的Gaussdb,還有很多性能方面的問題需要考慮。比如SEQUENECE,在集中式數據庫中,哪怕是在rac上,SEQUENCE只要CACHE設置的合理,就不會有大的性能問題。而在分布式數據庫Gaussdb中,Sequence的申請都會涉及GTM操作,因此成本是較高的。如果大批量的數據寫入要使用Sequence,那么還是要采取一些特殊的做法的,否則性能是無法保證的。

另外一方面SQL的語法上Gaussdb雖然做了大量的優化,但是分布式數據庫的CBO優化器工作機制與集中式數據庫的差異也決定了在語法近似的SQL語句的執行上存在巨大的差異,因此我們在做應用遷移的時候還是需要充分考慮的。

目前Gaussdb形成了商用數據庫、開源數據庫(openGuass)、基于開源數據庫的第三方商用數據庫這種豐富的生態,又在大生態上兼容流行度排名靠前的PostgreSQL數據庫。因此在生態建設方面具有得天獨厚的優勢,這十分有利于該生態的數據庫產品的發展。目前神州通用、南大通用、海量、云和恩墨等數據庫廠商都加入了openGauss生態,使用開源代碼封裝商用數據庫產品。其中南大通用的Gbase 8C是基于openGauss內核的分布式數據庫,其他三家以集中式主備模式的數據庫為主。

希望今天我的這篇文章能對大家在openGauss生態的數據庫選擇中有所幫助。在企業做信創數據庫替代的產品選擇時,可能會考慮到成本的問題,對于比較在乎成本的用戶,或者需要遷移的數據庫數量很多的用戶,商用版與開源版同時存在的生態可能比較適合。核心關鍵應用用商用的,普通的應用用開源的,其內核相同,學習與運維成本相對就會較低。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716050.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716050.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716050.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++八股文:c++面向對象

文章目錄 1.c面向對象三大特性2.c的三個訪問修飾符3.多重繼承4.重載與重寫5.c多態怎么實現6.成員函數/成員變量/靜態成員函數/靜態成員變量的區別7.構造函數和析構函數8.c構造函數有幾種9.什么是虛函數什么是虛函數表10.虛函數和純虛函數的區別11.抽象類和純虛函數12.虛析構13.…

ABAP - SALV教程05 添加頁眉和頁腳

先看看效果叭CL_SALV_TABLE提供了SET_TOP_OF_LIST方法設置頁眉顯示和SET_TOP_OF_LIST_PRINT方法設置頁眉打印來實現添加頁眉的目的。CL_SALV_TABLE提供了SET_END_OF_LIST方法設置頁腳顯示和SET_END_OF_LIST_PRINT方法設置頁腳打印來實現添加頁腳的目的。這個四個方法的傳入參數…

Flutter異常上報及性能監控實現

1. 頁面異常監測 在Flutter中,通常用FlutterError監測Flutter框架拋出的異常,用runZonedGuarded監測應用中用戶代碼異常。 class AppGuarded {run(Widget app) {//1. 用FlutterError監測flutter框架拋出的異常FlutterError.onError (FlutterErrorDetail…

STM32F4 HAL庫串口死鎖問題調試記錄

文章目錄 STM32F4 HAL庫串口死鎖問題調試記錄調試方法結果分析解決方法一:方法二: STM32F4 HAL庫串口死鎖問題調試記錄 使用方法:通過串口DMA固定周期向外發送數據,同時開啟串口DMA接收用于接收其它板卡發來的數據。 問題&#x…

2024年,智慧文旅領航新時代,重塑旅行體驗的未來篇章!

隨著科技的飛速發展,智慧文旅正成為旅游行業的新寵,以其獨特的魅力和無限可能,引領著旅行體驗的全面升級。 2024年,智慧文旅火爆出圈,成為各界關注的焦點,為游客帶來了前所未有的震撼與享受。 智慧文旅&a…

290.【華為OD機試】連續出牌數量(深度優先搜索DFS—JavaPythonC++JS實現)

??點擊這里可直接跳轉到本專欄,可查閱頂置最新的華為OD機試寶典~ 本專欄所有題目均包含優質解題思路,高質量解題代碼(Java&Python&C++&JS分別實現),詳細代碼講解,助你深入學習,深度掌握! 文章目錄 一. 題目二.解題思路三.題解代碼Python題解代碼JAVA題解…

《猛獸派對》好玩嗎值得買嗎?蘋果電腦也能裝《猛獸派對》嗎?猛獸派對好友通行證 動物派對 猛獸對戰游戲

目錄 一、《猛獸派對》好玩嗎? 游戲玩法: 物理引擎: 關卡設計: 游戲特色: 評價: 榮譽: 二、蘋果電腦也能裝《猛獸派對》嗎? 第1步:下載并安裝CrossOver這款軟件…

C語言---文件操作(1)

1.文件的打開和關閉 fopen有2個參數,第一個是文件的名字,第二個是打開的模式(例如是讀文件還是寫文件) (1)該文件夾下面沒有data.txt文件,但是我執行了read操作,所以會顯示這樣的錯誤 (2&#…

『NLP學習筆記』圖解GPT3(How GPT3 Works-Visualizations and Animations)

圖解GPT3(How GPT3 Works-Visualizations and Animations) 文章目錄 一. GPT-1 vs GPT-2 vs GPT-3 vs GPT-3.5 vs GPT-4二. GPT32.1. 訓練動圖2.2. 預測動圖2.3. 代碼生成示例三. 參考文章原作者主頁:Jay Alammar原英文鏈接:How GPT3 Works - Visualizations and Animations …

ApplicationContext容器

ApplicationContext容器 1.概述 ApplicationContext接口代表了一個Spring容器,它主要負責實例化、配置和組裝bean。ApplicationContext接口間接繼承了BeanFactory接口,相較于BeanFactory一些基本的容器功能,ApplicationContext接口是在BeanFactory接口基礎上進行了擴展,增…

SQL 術語:Join 中的 Build 和 Probe 是什么意思?

博主歷時三年精心創作的《大數據平臺架構與原型實現:數據中臺建設實戰》一書現已由知名IT圖書品牌電子工業出版社博文視點出版發行,點擊《重磅推薦:建大數據平臺太難了!給我發個工程原型吧!》了解圖書詳情,…

如何在Vue中實現事件處理?

Vue是一種流行的JavaScript框架,廣泛應用于前端開發。在Vue中,事件處理是一個非常關鍵的概念,可以幫助我們實現用戶與頁面的交互,今天我們就來探討一下如何在Vue中實現事件處理。 首先,讓我們先了解一下在Vue中如何綁…

[pdf]《軟件方法》強化自測題業務建模需求分析共191頁,230題

潘加宇《軟件方法》強化自測題業務建模需求分析共191頁,230題,已上傳CSDN資源。 在完成書中自測題基礎上,進一步強化。 也可到以下地址下載: 資料http://www.umlchina.com/url/quizad.html 如果需要網盤提取碼:uml…

【Python】1. 背景知識

認識 Python 計算機基礎概念 什么是計算機? 很多老一輩的人, 管下面這個叫做計算機. 然鵝, 它只是 “計算器”, 和計算機是有很大區別的. 現在我們所說的計算機, 不光能進行算術運算, 還能進行邏輯判斷, 數據存儲, 網絡通信等等功能,。 以至于可以自動的完成非常復雜的工作…

代碼隨想錄day10(2)字符串:反轉字符串Ⅱ (leetcode541)

題目要求:給定一個字符串 s 和一個整數 k,從字符串開頭算起, 每計數至 2k 個字符,就反轉這 2k 個字符中的前 k 個字符。如果剩余字符少于 k 個,則將剩余字符全部反轉。如果剩余字符小于 2k 但大于或等于 k 個,則反轉前…

Spring與Spring Boot:簡化Java開發的革命性框架

Spring與Spring Boot:簡化Java開發的革命性框架 摘要:本文將深入探討Spring與Spring Boot兩個在Java開發領域具有重要地位的框架。我們將了解它們的核心概念、區別、聯系以及在實際項目中的應用。通過本文,您將更好地理解如何使用這兩個框架…

Zookeeper4:Java客戶端、應用場景以及實現、第三方客戶端curator工具包

文章目錄 Java連接Zookeeper服務端依賴代碼使用 應用場景統一命名服務統一配置管理統一集群管理服務器節點動態上下線理解實現模擬服務提供者【客戶端代碼】-注冊服務模擬服務消費者【客戶端代碼】-獲取服務信息進行請求消費 軟負載均衡分布式鎖理解實現 生產集群安裝N臺機器合…

Java中的Collection

Collection Collection 集合概述和使用 Collection集合概述 是單例集合的頂層接口,它表示一組對象,這些對象也稱為Collection的元素 JDK 不提供此接口的任何直接實現.它提供更具體的子接口(如Set和List)實現 創建Collection集合的對象 多態的方式 具體的實現類ArrayList C…

leetcode - 71. Simplify Path

Description Given a string path, which is an absolute path (starting with a slash ‘/’) to a file or directory in a Unix-style file system, convert it to the simplified canonical path. In a Unix-style file system, a period ‘.’ refers to the current di…

MATLAB環境下基于熵的聲納圖像分割算法

聲納圖像作為準確獲取水下信息的重要途徑之一,在國防、軍事、工程等方面發揮著巨大作用。然而,由于水聲信道的復雜多變和聲波本身的傳播損失,聲納圖像往往呈現出分辨率和對比度不高、噪聲干擾嚴重、目標輪廓模糊等特點。 聲納圖像的分割指的…