MariaDB CONNECT Storage Engine 挺好用

很久沒有寫文章了,最近實在是被公司的舊系統搞的快崩潰,姑且不論網站是 2007 年使用的技術及架構及沒有導入版本控管,大家都正式機上寫 code,但一個網站(或應用) 會連接好多個資料庫,有 MySQL 和 MSSQL ,可想而知 Query 來的資料還要轉碼搞的很複雜,接手的人當然亂了,我看到 code 及架構,只會讓我躁鬱而已,想說是否有機會來分階段改造改造,理想上是想把系統獨立互開 API,當然我不可能現在建議直接打掉重來,目前是很想先從 DB 著手。

MariaDB 從 10 版開始有支援了 CONNECT Storage Engine,這個 Storage Engine 能夠讓我們在 MariaDB 上建立一個從遠端來的資料庫表,假設我的應用會同時連接 MariaDB 及 MSSQL 的時候,我可以把 MSSQL 的某個表建立在 MariaDB 上,在使用上就一律用 MariaDB 的命令就能操作,這樣或許能夠降低程式開發的複雜度吧 ..... 這是我的主觀而已,還是介紹一個 CONNECT Storage Engine 的用法吧。

安裝方式

很簡單,只要在 phpmyadmin 或 mariadb console 下執行下列命令就可以讓 mariadb 支援 connect storage engine 了。

INSTALL SONAME 'ha_connect';

查看 ha_connect 有沒有被載入,用下列命令查詢

SHOW ENGINES;

成功的話會如以下截圖看見有 CONNECT 的 Engine。

show_engines

 

使用方式介紹

這裡就以 MS SQL 某個表為範例,示範如何將 MS SQL 的表加到 MariaDB 來,我的環境都是在 Windows 下的,假設 MS SQL 的環境如下:

  • SQL Server 版本 : SQL Express 2012
  • 啟用 TCP/IP 並且 Port 設定為 1433
  • Database 名稱 : MS_ABC
  • 要測試的表格名稱 : MS_XYZ
  • 帳密 : sa 和 1234

MariaDB 環境如下

  • MariaDB 版本 : 10.0.13
  • Database 名稱 : maria_abc

以上的條件若要在 MariaDB 建立一個表格名稱叫 xyz 是對應到 MSSQL 的 MS_XYZ,下以下命令即可

CREATE TABLE xyz (
id int(10) NOT NULL ,
name VARCHAR(50)
) ENGINE=CONNECT DEFAULT CHARSET big5 CONNECTION='Driver={SQL Server Native Client 11.0};Server=localhost;Database=MS_ABC;Uid=sa;Pwd=1234;' table_type=ODBC block_size=10 tabname='TB_XYZ'

這時候可以用工具看到 MariaDB 資料庫中有個表格 xyz 及資料了。

maria_connect_data

這種做法就等於把遠端資料表當作本地資料表一樣,根據測試簡單的查詢應用或刪除資料所下的 SQL 語法可以完全用 MySQL 的語法,和 MariaDB 的表作簡單的 JOIN 都可以的,我並沒有實際去測試各種語法,因為不太可能用這種架構做太複雜的應用對吧,簡單的查詢就夠了,而且可以發現用這方法,即便 MS SQL 預設是 big5 , 但在 MariaDB 下 Query 餵的資料是 utf8 不用轉碼了,如此可省掉程式設計轉碼的部分,各位可以試試看喔。

 

 

 

 

4 則評論在 MariaDB CONNECT Storage Engine 挺好用.

發佈留言