去O路上的歷程--開源分散式資料庫產品對比(TBase VS AntDB)
最近公司的領導讓我這個 DBA 繼續調研可以用來去 O 的相關分散式資料庫產品,此前已經調研過亞信科技的 AntDB 。鑑於騰訊的 TBase 在 2019 年 11 月 7 日的 Techo 大會現場官宣開源,正好藉此機會研究下,並和 AntDB 做個對比測試。
鑑於之前已經對 AntDB 有所瞭解,知道它是基於提供寫可靠性,多主節點資料同步,資料傳輸的開源叢集方案 Postgres-XC 實現的。看過 TBase 開源地址的官方文件介紹,發現它也是基於開源 Postgres-XC 方案實現的。
既然兩種產品的實現原理都是一樣的,那麼誰在資料庫易用性、效能最佳化和 Oracle 的相容性(去 O 成本考量)方面做得更好,誰就更容易被市場接受。
下面我就從下面幾個方面對兩款資料庫產品做出比對測試,並給出分析報告:
1. 安裝部署
2. Oracle 相容度
3. 資料庫的效能
4. 資料庫高可用
5. 資料庫執行計劃
6. 資料庫擴充套件工具集
先決條件
此次對比採用三臺虛擬主機,採用1GTM 2Coordinator 2Datanode 節點的叢集架構;
TBase 版本:psql (PostgreSQL 10.0 TBase V2)
AntDB 版本:psql (5.0devel based on PG 11.5)
|
TBase |
AntDB |
資料庫版本 |
TBase pg10.0 |
AntDB pg11.5 |
相較於pg10,pg11在平行計算、分割槽功能增強、儲存過程支援等方面得到了增強。
安裝部署
TBase 原始碼包按照官方文件編譯並安裝;
AntDB 原始碼包同上;
TBase 叢集部署,和PGXC 採用一樣的方式,使用pgxc_ctl 命令,生成pgxc_ctl.conf 配置檔案,透過修改該配置檔案完成叢集的初始化、啟停等管理操作;
AntDB 叢集部署提供了adbmgr 管理工具,透過該工具的指令實現主機節點新增修改、分發、叢集節點的新增修改、初始化、叢集節點引數配置、叢集啟停等操作,易用性要優於TBase ;
|
TBase |
AntDB |
安裝部署管理 |
安裝過程採用pgxc_ctl 安裝部署模式,手動編輯pgxc_ctl.conf 配置檔案 |
透過adbmgr 管理工具部署管理叢集,指令式操作,部署簡單快捷 |
Oracle 相容度
當前我們很多的應用跑在了Oracle 資料庫上,有些應用已經比較老舊,沒有人維護,針對這些應用的遷移,我們不希望有任何應用方面的更改,因此在資料庫和Oracle 的相容性方面,我們希望能達到一個較高的相容度。接下來對TBase 和AntDB 對Oracle 的相容性我會重點進行對比測試。
測試的要點:
l 資料型別
l 資料庫函式
l 資料型別隱式轉換
l SQL 語法相容度
資料型別
|
TBase |
AntDB |
浮點 |
支援 |
支援 |
整形 |
支援 |
支援 |
小數 |
支援 |
支援 |
字串 |
支援 |
支援 |
二進位制 |
不支援 CLOB 、 BLOB 、 LONG |
支援 CLOB 、 BLOB 、 LONG |
日期 / 時間 |
部分支援, TBase date 型別不帶時間和 Oracle date 不完全相容 |
支援 |
布林型別 |
支援 |
支援 |
rowid |
不支援 |
支援 |
xml |
支援 |
支援 |
json |
支援 |
支援 |
資料庫函式
|
TBase |
AntDB |
substr |
支援 |
支援 |
sign |
支援 |
支援 |
sinh |
支援 |
支援 |
tanh |
支援 |
支援 |
cosh |
支援 |
支援 |
trim |
支援 |
支援 |
coalesce |
支援 |
支援 |
extract |
支援 |
支援 |
greatest |
支援 |
支援 |
last_day |
支援 |
支援 |
least |
支援 |
支援 |
length |
支援 |
支援 |
lnnvl |
支援 |
支援 |
max |
支援 |
支援 |
min |
支援 |
支援 |
mod |
支援 |
支援 |
month_between |
支援 |
支援 |
to_yminterval |
支援 |
支援 |
nullif |
支援 |
支援 |
numtodsinterval |
支援 |
支援 |
numtoyminterval |
支援 |
支援 |
round_date |
支援 |
支援 |
to_timestamp |
支援 |
支援 |
rpad |
支援 |
支援 |
to_single_byte |
支援 |
支援 |
sessiontimezone |
支援 |
支援 |
to_date |
Tbase to_date
函式對月份解析有錯誤;
|
支援 |
to_date+to_dsinterval |
TBase
計算錯誤,正確值應該是
2016-01-04 14:20:50
;
|
支援 |
soundex |
TBase
不支援
soundex
函式;
|
支援 |
sys_extract_utc |
TBase
不支援
sys_extract_utc
函式;
|
支援 |
trunc |
TBase
對
trunc
函式傳參引數型別支援不夠,對數值型的支援(正負)不夠,資料型別隱式轉換不夠;
|
支援 |
add_months |
TBase add_months
對傳入的引數值轉換有錯誤;
|
支援 |
bitand |
Tbase
不支援
bitand
函式;
|
支援 |
instr |
Tbase
對
instr
函式傳參引數型別支援不夠,對數值型的支援不夠
|
支援 |
lpad |
Tbase
對
lpad
函式傳參引數型別支援不夠,對數值型的支援不夠
|
支援 |
nanvl |
Tbase
對
nanlvl
函式傳參引數型別支援不夠,對空值的支援不夠;
|
支援 |
new_time |
Tbase
不支援
new_time
函式;
|
支援 |
next_day |
Tbase
對函式
next_day
傳參支援資料型別不夠,不支援
numeric
隱式轉換為
int
;
|
支援 |
trim |
Tbase
對函式
trim
傳引數據型別支援不夠,不支援數值型隱式轉換為字元型;
|
支援 |
translate |
Tbase
對函式
translate
傳引數據型別支援不夠,不支援數值型隱式轉換為字元型;
|
支援 |
to_timestamp_tz |
Tbase to_timestamp_tz
函式對月份解析有錯誤;
|
支援 |
NLS_CHARSET_ID |
Tbase
不支援函式
NLS_CHARSET_ID
;
|
支援 |
NLS_CHARSET_NAME |
Tbase
不支援函式
NLS_CHARSET_NAME
;
|
支援 |
nls_initcap |
Tbase
不支援函式
nls_initcap
;
|
支援 |
nls_lower |
Tbase
不支援函式
nls_lower
;
|
支援 |
nls_upper |
Tbase
不支援函式
nls_upper
;
|
支援 |
nvl |
Tbase
對函式
nvl
引數傳遞資料型別支援不夠,不支援資料型別隱式轉換;
|
支援 |
nvl2 |
Tbase
對函式
nvl2
引數傳遞資料型別支援不夠,不支援資料型別的隱式轉換;
|
支援 |
to_timestamp |
Tbase to_timestamp
函式對月份解析有錯誤
|
支援 |
regexp_count |
Tbase
不支援函式
regexp_count
;
|
支援 |
regexp_instr |
Tbase
不支援函式
regexp_instr
;
|
支援 |
regexp_like |
Tbase
不支援函式
regexp_like
;
|
支援 |
regexp_replace |
Tbase
不支援函式
regexp_replace;
|
支援 |
remainder |
Tbase
不支援函式
remainder;
|
支援 |
replace |
Tbase
函式
replace
傳引數據型別支援不夠;
|
支援 |
round |
Tbase
函式
round
傳引數據型別支援不夠,不支援資料型別隱式轉換;
|
支援 |
rpad |
Tbase
函式
rpad
傳引數據型別支援不夠,不支援資料型別隱式轉換;
|
支援 |
to_number |
Tbase
函式
to_number
引數傳遞的格式化選項支援不夠;
|
支援 |
to_char |
Tbase
函式
to_char
引數傳遞的格式化選項支援不夠;
|
支援 |
透過對比資料庫函式,TBase 在函式相容性方面和AntDB 差距較大,主要體現在部分函式無法支援,函式支援的資料型別不豐富,不支援資料型別的隱式轉換。而AntDB 完全相容Oracle 所列的常用的函式。此外,在函式相容性方面TBase 是透過UDF 、擴充套件等方式實現,相容有限,而AntDB 是資料庫核心級別實現的支援。
資料型別隱式轉換
|
TBase |
AntDB |
隱式資料型別轉換
|
在某些符合場景(函式傳參) TBase 對資料型別隱式轉換支援不夠 ; 包含 greatest 、 least 、 substr 、 length 、 trim 、 next_day 、 translate 等函式
示例:
ERROR: operator is not unique: unknown + unknown |
示例: antdb=# select '1'+'1' from dual; ?COLUMN? ---------- 2 (1 row)
antdb=# SELECT SUBSTR(exp(2),1,6) sub FROM DUAL;
|
AntDB 在核心級別實現了相容Oracle 資料型別的隱式轉換,而TBase 僅僅支援有限的資料型別隱式轉換。
SQL 語法相容度
|
TBase |
AntDB |
connect by |
TBase 不支援 start with connect by 的層次查詢語法; |
AntDB 支援 connect by 語法;
|
rownum , rowid |
TBase 不支援 rownum 、 rowid ; |
AntDB 支援 rownum 、 rowid ; |
listagg 、 wm_concat |
TBase 不支援 listagg 、 wm_concat ; |
AntDB 支援 listagg 、 wm_concat 行列轉換; |
minus 運算 |
TBase 不支援minus 運算子; |
AntDB 支援minus 運算; |
乘法運算 |
TBase 進行乘法運算的時候資料型別隱式轉換支援不夠; |
AntDB 乘法運算相容Oracle 資料隱式轉換; |
加法運算 |
TBase 進行加法運算的時候資料型別隱式轉換支援不夠; |
AntDB 加法運算相容Oracle 資料隱式轉換; |
減法運算 |
TBase 進行減法運算的時候資料型別隱式轉換支援不夠; |
AntDB 減法運算相容Oracle 資料隱式轉換; |
除法運算 |
TBase 進行除法運算的時候資料型別隱式轉換支援不夠; |
AntDB 除法運算相容Oracle 資料隱式轉換; |
|| 字元連線運算 |
TBase 對|| 連線運算時候資料型別的數值轉換為字元型隱式轉換支援不夠; |
AntDB|| 連線運算相容Oracle 資料隱式轉換; |
表別名 |
Tbase 不支援表資料更新時的表別名; |
AntDB 支援表資料更新時的表別名; |
Oracle 投影列名大小寫保持一致 |
Oracle 欄位名是大寫,TBase 不相容; |
AntDB 支援設定引數upper_out_oracle_target 控制是否相容Oracle 欄位大寫; |
oracle 中表左右連線 (+) 寫法 |
TBase 不相容Oracle 中表連線(+ )這種寫法; |
AntDB 支援Oracle 表連線(+ )的寫法; |
alter 修改表結構 |
Tbase 不支援modify 命令,不支援add 後面列名加括號的寫法; |
AntDB 支援modify 語法,支援add 命令後面加括號的寫法; |
PLSQL/PIPE ROW
|
Tbase 不支援 Oracle PLSQL 語法,不支援函式建立,不支援 pipe row 的使用
|
AntDB 支援Oracle 函式、儲存過程建立,支援PIPE ROW 的使用 |
PLSQL/table() 函式
|
Tbase 不支援 Oracle table 函式; |
AntDB 支援 Oracle table 函式;
|
分析函式 keep first/last
|
TBase 不支援 keep first/last 分析函式; |
AntDB 支援 keep first/last 分析函式;
|
序列取值
|
Tbase 不支援使用 .nextval 的方式獲取序列的下一返回值; |
Antdb 支援使用序列 .nextval 的方式返回序列的值; |
多表關聯更新
|
Tbase 不支援 Oracle 多表關聯 update 語法; |
AntDB 支援 Oracle 多表關聯 Update 語法;
|
死鎖檢測
|
TBase 在跨 CN 節點無法檢測死鎖,事務一直鎖等待; |
AntDB 在跨 CN 節點可以發現檢測死鎖; |
分割槽表 |
TBase 不支援 Oracle 的分割槽表建表語法; |
AntDB 相容 Oracle 語法支援 Hash 、 Range 、 List 分割槽; |
儲存過程、函式 |
TBase 不支援 Oracle 儲存過程、函式的建立;
|
AntDB 相容 Oracle 儲存過程、函式的語法,支援儲存過程、函式的建立; |
Savepoint |
TBase 支援事務 savepoint ,支援子事務; |
AntDB 不支援子事務,不支援 savepoint ; |
從上表可以看出在SQL 語法相容方面,AntDB 對Oracle 的支援度遠比TBase 要高,但是在子事務的支援性上不如TBase 。
效能測試
為驗證資料庫的效能,我採用了sysbench 和benchmarksql 兩種測試工具,分別對AntDB 和TBase 在同等條件(硬體環境、資料庫引數配置、測試資料量)下進行了效能比對;
|
TBase |
AntDB |
同等條件下 sysbench 測試
|
OLTP test statistics:
|
OLTP test statistics:
|
同等條件下 tpcc 測試
|
17:23:53,593 [Thread-15] INFO jTPCC : Term-00, mTOTAL: 7104 Memory Usage: 113MB / 1928MB
|
16:44:46,438 [Thread-10] INFO jTPCC : Term-00, ent tpmTOTAL: 6912 Memory Usage: 443MB / 1928MB
|
可以看出AntDB 的效能大致是TBase 的1.5-2 倍。
資料庫高可用
|
TBase |
AntDB |
叢集高可用 |
暫未提供自動故障恢復功能,需要手工執行故障切換、備節點提升等操作; |
AntDB 提供叢集自愈功能,發現主節點故障自動提升從節點,待故障節點恢復後可以透過 rewind 功能重新加入叢集; |
TBase 在叢集資料庫高可用方面提供了相關的手工處置方式,缺少自動化的實現,需要藉助於第三方工具。AntDB 提供了叢集自愈的功能,在發現主節點故障的情況下會自動切換從節點,並提供了主節點故障恢復後重新快速加入叢集的功能(可以輕鬆透過AntDB 的adbmgr 管理工具實現)。
資料庫執行計劃
|
TBase |
AntDB |
執行計劃改進
|
TBase
執行復雜查詢無法自動有效利用並行;
|
AntDB
最佳化:
|
如下是取自TPCH 模型的Q6 和Q8 測試SQL :
Q6 查詢:
Q8 查詢:
檢視AntDB 的Q8 執行計劃:
經過上面的測試,AntDB 在複雜查詢執行計劃方面增強了並行查詢和採用Reduce 功能最佳化了Join 的效率,效果優於TBase 。
資料庫擴充套件工具集
|
TBase |
AntDB |
資料備份恢復 |
暫未提供全域性資料備份恢復工具; 可以使用 pg_dump 等邏輯備份工具進行資料備份; |
AntDB 提供最佳化改進後的資料庫備份管理工具 barman ,支援基於 barrier 的備份恢復; |
資料庫遷移 / 遷移評估 |
暫未提供資料庫遷移工具和遷移評估工具; |
AntDB
提供最佳化改進後的
ora2pg
工具,可以實現從
Oracle
、
MySQL
到
AntDB
資料庫的遷移;
|
SQL Replay |
暫未提供資料庫 sql replay 的工具; |
AntDB 提供 a2o 工具(基於邏輯複製的方式實現)支援 AntDB 資料庫同步資料至其他資料庫; |
Web 監控 |
暫未提供 web 監控工具; |
AntDB 提供了 AdbMonitor Web 監控工具,檢視當前資料庫叢集的執行狀態、慢查詢、鎖資訊等內容; |
相比於TBase ,AntDB 在資料庫備份恢復、資料庫遷移、SQL Replay 、Web 監控方面提供了各種工具,方便了資料庫的運維管理。
總結
經過上面的測試,可以看出, AntDB 從資料庫的安裝部署, Oracle 的相容性,到資料庫的效能,執行計劃最佳化、運維工具集的完善,都要比開源的 TBase V2 版本要更符合我們的去 O 的需求。當然了,不論是 AntDB 還是 TBase 和 Oracle 比起來,還是有很多需要支援和完善的地方( AWR 報告、 EM 、資料閃回功能等),畢竟 Oracle 已經稱霸關係型資料庫這麼多年了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10937267/viewspace-2664456/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 國產開源資料庫:騰訊雲TBase在分散式HTAP領域的探索與實踐資料庫分散式
- 分散式跟蹤系統——產品對比分散式
- 幾款分散式資料庫的對比分散式資料庫
- 亞信安慧AntDB資料庫開啟分散式資料庫的新篇章資料庫分散式
- 開源分散式資料庫SequoiaDB在去哪兒網的實踐分散式資料庫
- UAVStack開源系列產品
- 主流開源分散式圖資料庫 Benchmark分散式資料庫
- 分散式資料庫火了 開源填補資料庫空白分散式資料庫
- 資料庫產品影響力指數釋出,CirroData分散式資料庫上榜!資料庫分散式
- 亞信安慧AntDB領航分散式資料庫的突破之路分散式資料庫
- 滴滴開源分散式訊息中介軟體產品DDMQ分散式MQ
- 分享:CUDB for OceanBase分散式資料庫產品規模應用分散式資料庫
- 開源分散式圖資料庫的思考和實踐分散式資料庫
- Go的又一個分散式資料庫開源了Go分散式資料庫
- 去“O”與開源長期並存下,國產資料庫如何乘風破浪?資料庫
- 資料庫選型比對 Oracle vs sqlserver資料庫OracleSQLServer
- 去哪兒黃勇:去哪網資料庫架構發展歷程資料庫架構
- 關聯式資料庫比較:SQLite vs MySQL vs PostgreSQL資料庫SQLiteMySql
- 工信部:加速分散式資料庫等產品研發和應用推廣分散式資料庫
- 常用MQ產品的對比MQ
- 區塊鏈與分散式資料庫的比較區塊鏈分散式資料庫
- 關聯式資料庫與文件資料庫對比資料庫
- 常見開源分散式檔案系統架構對比分散式架構
- Hadoop技術(四)分散式、面向列的開源資料庫HBaseHadoop分散式資料庫
- 開源分散式資料庫RadonDB的核心技術與實現分散式資料庫
- 大資料將促進分散式資料庫發展及去Oracle大資料分散式資料庫Oracle
- MySQL升級開源資料庫產品吸引新使用者(轉)MySql資料庫
- 圖資料庫對比:Neo4j vs Nebula Graph vs HugeGraph資料庫
- 分散式資料庫分散式資料庫
- 開源真正分散式實時大資料分析倉庫Druid分散式大資料UI
- 全球分散式雲大會:AntDB超融合流式實時數倉,打造分散式資料庫新紀元分散式資料庫
- Gartner對開源資料庫的研究(轉)資料庫
- 雲時代,MySQL到ClickHouse資料同步產品對比推薦MySql
- 三款開源關係型資料庫對比:MySQL、PostgreSQL、SQLiteXP資料庫MySqlSQLite
- 分散式資料庫 TiDB 過去現在和未來分散式資料庫TiDB
- 直播預告丨騰訊雲分散式資料庫TDSQL:產品設計思路與能力 - 墨讀資料庫專題分散式資料庫SQL
- Facebook 開源 Golang 實體框架 Ent 支援分散式資料庫 TiDBGolang框架分散式資料庫TiDB
- 國產資料庫源流史:AntDB資料庫資料庫