#數據庫平替用金倉 #金倉產品體驗官
摘要:本文以體驗項目案例為主線,從下載安裝、數據類型、T-SQL、JDBC、性能基準、踩坑回退六大維度,全景驗證 KingbaseES V9R4C12 對 SQL Server 的“零改造”兼容承諾;并給出 TPCH 100G 性能對比與灰度割接方案,為信創替換提供可復制的落地指南。
目錄
一、為什么要“平替”
二、30 分鐘完成部署
2.1 下載與安裝
2.2?金倉數據庫開發工縣KStudio
2.3?創建兼容庫(Linux系統)
三、兼容性全景測試
3.1 特殊數據類型“一把梭”
3.2 語法糖:NOWAIT、SKIP LOCKED、FOR XML、TOP
3.2.1 行級鎖行為
3.2.2 FOR XML
3.2.3 TOP 子句
3.3 存儲過程與 T-SQL 細節
3.3.1 批處理 GO、PRINT、RAISERROR
3.3.2 “最后一個字段可加逗號”
3.4 JDBC 兼容測試
四、性能對比:TPCH 100G
4.1 硬件規格
4.2 測試方法
4.3 結果摘要(單位:秒)
五、踩坑與填坑
5.1 “IDENTITY_INSERT” 行為差異
5.2 全文索引
5.3 鏈接服務器
六、割接方案與回退策略
七、寫在最后
一、為什么要“平替”
過去十年,我們團隊的核心業務一直跑在 SQL Server 2016/2019 雙節點 AlwaysOn 集群上。隨著國央企信創節奏加快,繼續留在 Windows + SQL Server 技術棧不僅面臨合規風險,License 費用也逐年攀升。經過多輪 PoC,我們把目光鎖定在 KingbaseES V9R4C12(SQL Server 兼容版)——官方宣稱“數據庫平替用金倉”,推出低風險遷移方案,這些對背負 2000+ 存儲過程、300+ 鏈接服務器的系統來說,誘惑力極大。
本文記錄了一次“從下載到上線”的完整旅程:
1.部署安裝
2.兼容性驗證(數據類型、T-SQL、接口、工具鏈)
3.性能對比
4.踩坑與填坑
5上線割接方案
二、30 分鐘完成部署
2.1 下載與安裝
金倉官網下載:https://www.kingbase.com.cn/download.html#database
(1)Windows下載與安裝:
本文主要針對Windows系統進行體驗測試,分享給大家一起交流學習!打開上面金倉官網地址,然后篩選?V9R4C12(SQLServer兼容版),如下圖所示
然后選擇 X64_Windows(如下圖所示)
下面就開始下載,下載完成虎雙擊打開文件(如下圖所示)
然后會自動跳轉到下面這個驅動器,點擊KINGBSASE.EXE然后開始安裝(如下圖所示)
接下來就來到安裝程序圖,如下圖所示,點擊下一步
1.簡介,點擊接受然后下一步(如下圖)
2.許可協議,新手建議完全安裝(如下圖所示)
3.選擇安裝集,選擇想要安裝的位置,如下圖我選擇安裝在E盤上
4.選擇安裝文件夾,安裝(如下圖所示)
5.預安裝摘要、添加功能、選擇安裝集,系統自動安裝,如下圖所示:
6.正在安裝,選擇一個文件夾,用于存儲數據的,改文件夾必須為空(如下圖所示)
7.選擇文件夾,數據庫默認端口號:54321,用戶名:system,然后輸入對應的密碼(如下圖)
到這里就完成了Windows數據庫的初始化工作!
(2)Linux下載與安裝:
官方下載頁提供了 Linux x86_64 一鍵 tar 包 與 Windows GUI 安裝向導。如下圖所示,點擊下載
下載后如下圖所示,通過ftp方式上傳到Linux服務器上進行安裝
?
# 1. 創建 kingbase 用戶
useradd kingbase && echo 'kingbase ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers# 2. 解壓
tar -xzf kingbasees_v9r4c12_linux_x64.tar.gz -C /opt
chown -R kingbase:kingbase /opt/kingbase# 3. 初始化實例
su - kingbase
/opt/kingbase/install/initdb -D /data/kingbase -E UTF8 --locale=zh_CN.UTF-8
/opt/kingbase/install/kingbase -D /data/kingbase > kingbase.log 2>&1 &
2.2?金倉數據庫開發工縣KStudio
打開剛才安裝的工具Kstudio,如下圖所示
新建連接,注意密碼是剛才上面安裝設置的密碼,我這里剛才設置是:qwertyuiop123456
點擊測試連接,提示連接成功,如下圖:
?
(1)新建數據庫
CREATE DATABASE [xiaoxiang] WITH OWNER = [system] ENCODING 'UTF8' TEMPLATE [template1]TABLESPACE = [sys_default]lc_collate = 'zh_CN.UTF-8'lc_ctype = 'zh_CN.UTF-8'connection_limit = -1allow_connections = TRUEis_template = FALSE;ALTER DATABASE [xiaoxiang] COLLATE Chinese_PRC_CI_AI;
?(2)新增表
CREATE TABLE [public].[title] ([id] integer IDENTITY(1,1) NOT NULL,[title] varchar(128),[description] varchar(512)
);ALTER TABLE [public].[title] SET
TABLESPACE [sys_default];
(3)插入數據庫,可以手動寫sql,也可以界面操作,非常方便
INSERT INTO [public].[title]
([id], [title], [description])
VALUES(2, '電科金倉2025發布會', '電科金倉2025.07.15在北京舉行發布會');
(4)修改表數據
UPDATE [public].[title]
SET [id]=2, [title]='電科金倉2025發布會-通知2', [description]='電科金倉2025.07.15在北京舉行發布會2';
(5)刪除表數據
?
DELETE FROM [public].[title]
WHERE [id]=2 AND [title]='電科金倉2025發布會-通知2' AND [description]='電科金倉2025.07.15在北京舉行發布會2';
?
2.3?創建兼容庫(Linux系統)
KingbaseES 可以同時創建 Oracle 模式、PostgreSQL 模式 和 SQL Server 模式 三種庫。這里指定:
-- 通過 ksql 連接
CREATE DATABASE ss_app DBCOMPATIBILITY='mssql';
\c ss_app
注:DBCOMPATIBILITY 參數只能在建庫時指定,后續不可修改。
三、兼容性全景測試
3.1 特殊數據類型“一把梭”
SQL Server 的 ROWVERSION/TIMESTAMP、SQL_VARIANT、UNIQUEIDENTIFIER、SYSNAME 在 KingbaseES 中都有直接映射,測試腳本如下:
-- 1. ROWVERSION
CREATE TABLE t1 (id INT PRIMARY KEY,rv ROWVERSION
);-- 插入測試
INSERT INTO t1(id) VALUES (1),(2);
SELECT * FROM t1;
-- rv 字段自動遞增,行為與 SQL Server 完全一致-- 2. SQL_VARIANT
CREATE TABLE t2 (v SQL_VARIANT
);
INSERT INTO t2 VALUES (123), ('abc'), (GETDATE());
SELECT v, SQL_VARIANT_PROPERTY(v,'BaseType') AS BaseType FROM t2;-- 3. UNIQUEIDENTIFIER & NEWSEQUENTIALID()
CREATE TABLE t3 (gid UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID() PRIMARY KEY,name SYSNAME
);
INSERT INTO t3(name) VALUES ('體驗官');
SELECT * FROM t3;
結論:所有類型均可直接替換,無需改寫。
3.2 語法糖:NOWAIT、SKIP LOCKED、FOR XML、TOP
3.2.1 行級鎖行為
-- 會話 A
BEGIN TRAN;
UPDATE t1 SET id = id WHERE id = 1;-- 會話 B
SELECT * FROM t1 WHERE id = 1 NOWAIT; -- 立即報錯
SELECT * FROM t1 WHERE id = 1 SKIP LOCKED; -- 跳過被鎖行
3.2.2 FOR XML
SELECT * FROM t3 FOR XML RAW, ROOT('root');
KingbaseES 支持 RAW、AUTO、EXPLICIT、PATH 四種模式,輸出與 SQL Server Management Studio 結果一致。
3.2.3 TOP 子句
SELECT TOP (3) WITH TIES * FROM t2 ORDER BY v;
WITH TIES 也支持,驚喜。
3.3 存儲過程與 T-SQL 細節
3.3.1 批處理 GO、PRINT、RAISERROR
PRINT N'開始同步...';BEGIN TRYINSERT INTO t1(id) VALUES (1/0);
END TRY
BEGIN CATCHRAISERROR('同步失敗:%s', 16, 1, ERROR_MESSAGE());
END CATCH;
GO -- 批處理分隔符
PRINT '完成';
注意點:
RAISERROR 語法完全一致,支持
WITH NOWAIT
。THROW 同樣可用,與 SQL Server 2012+ 行為一致。
3.3.2 “最后一個字段可加逗號”
CREATE TABLE t4 (a INT,b INT, -- 這里多了個逗號
);
KingbaseES 不會報錯,對老系統極其友好。
3.4 JDBC 兼容測試
我們原來的 Spring Boot + MyBatis 項目,連接串從
jdbc:sqlserver://...
改成
jdbc:kingbase8://...?compatibleMode=mssql
即可,無一行 Java 代碼改動。
驗證五種存儲過程場景:
-
無參數
-
IN 參數
-
OUT 參數
-
返回值
-
更新計數
全部通過單元測試,MyBatis XML 中的 statementType="CALLABLE" 無需調整。
四、性能對比:TPCH 100G
4.1 硬件規格
-
2 × Intel 6230R 26C52T
-
512 GB DDR4
-
NVMe SSD 3.2 TB RAID0
-
CentOS 7.9 + 關閉 NUMA
4.2 測試方法
-
SQL Server 2019 企業版(無補丁)
-
KingbaseES V9R4C12(mssql 模式)
-
TPCH 100G 數據,表結構、索引腳本完全一致
4.3 結果摘要(單位:秒)
Query | SQL Server | KingbaseES | 差異 |
---|---|---|---|
Q1 | 28.4 | 26.9 | -5% |
Q5 | 42.1 | 44.3 | +5% |
Q9 | 118.7 | 115.2 | -3% |
Q21 | 210.9 | 205.4 | -3% |
結論:兩者互有勝負,整體差距在 ±5% 以內,可視為同一梯隊。
五、踩坑與填坑
5.1 “IDENTITY_INSERT” 行為差異
KingbaseES 支持 SET IDENTITY_INSERT ON
,但作用域僅限當前會話,事務提交后仍保持 ON,而 SQL Server 會自動 OFF。
解決:在存儲過程末尾顯式 SET IDENTITY_INSERT OFF
。
5.2 全文索引
SQL Server 的 CONTAINS/CONTAINSTABLE
默認啟用;KingbaseES 需安裝 kdb_text 擴展并手動創建詞典。
解決:
CREATE EXTENSION kdb_text;
-- 創建中文分詞配置
5.3 鏈接服務器
KingbaseES 提供 kdb_database_link 擴展,可連接 SQL Server、Oracle、MySQL。
CREATE EXTENSION kdb_database_link;
SELECT dblink_connect('conn', 'sqlserver://user:pwd@host:1433/db');
實測分布式查詢性能損耗 <10%,已用于 ETL。
六、割接方案與回退策略
階段 | 動作 | 時間窗口 | 回退方案 |
---|---|---|---|
全量遷移 | 使用 SSDT + Kingbase Migration Toolkit | 4 h | 原 SQL Server 只讀 |
增量同步 | 基于 CDC + Debezium 實時同步 | 持續 | 一鍵切換回 DNS |
灰度驗證 | 20% 流量到 KingbaseES | 1 周 | 流量權重回退 |
全量切換 | 100% 流量 | 0.5 h | 回滾 DNS + 連接池 |
七、寫在最后
如果你也在尋找一條 低成本、低風險、周期短 的 SQL Server 信創路線,KingbaseES V9R4C12 值得認真評估。它并不是“閹割版”兼容,而是把 SQL Server 常用語法、類型、接口、工具鏈幾乎 1:1 還原,性能也能打平。
10 個關鍵字解說:
-
KingbaseES:人大金倉企業級關系型數據庫,本文體驗版本 V9R4C12。
-
SQL Server兼容版:KingbaseES 專用模式,語法、類型、接口與 SQL Server 對齊。
-
DBCOMPATIBILITY:建庫參數,設置 mssql 即啟用兼容模式。
-
ROWVERSION:SQL Server 時間戳類型,KingbaseES 原生支持并自動維護。
-
FOR XML:SQL Server 結果集轉 XML 語法,KingbaseES 支持 RAW/AUTO/PATH 四種。
-
RAISERROR:T-SQL 錯誤處理語句,兼容 SQL Server 級別與 NOWAIT 選項。
-
kdb_database_link:金倉插件,實現跨庫、跨異構實例的聯邦查詢。
-
NEWSEQUENTIALID:生成順序 GUID 的函數,遷移后無需改寫主鍵策略。
-
TPCH 100G:標準化決策支持基準,用于性能橫向對比。
-
灰度割接:按權重逐步切換流量、零回滾窗口的上線策略。
本文相關鏈接推薦:
1、【金倉數據庫征文】政府項目數據庫遷移:從MySQL 5.7到KingbaseES的蛻變之路
2、【金倉數據庫征文】學校AI數字人:從Sql Server到KingbaseES的數據庫轉型之路
3、電科金倉2025發布會,國產數據庫的AI融合進化與智領未來
4、國產數據庫逆襲:老鄧的“六大不敢替”被金倉逐一破解
5、《一行代碼不改動!用KES V9 2025完成SQL Server → 金倉“平替”遷移并啟用向量檢索》
6、《赤兔引擎×的盧智能體:電科金倉如何用“三駿架構”重塑AI原生數據庫一體機》