我之因此會寫這篇對比文章,是由於公司新產品研發真實經歷過這個痛苦過程(傳統基於
SQL Server開發的C/S
產品轉爲
MySQL雲產品)。首次須要數據轉換是測試環節,當時爲了快速驗證新研發雲產品性能與結果準確性(算法類),因此需大量的原始數據,最快的辦法就是使用老產品的真實數據。由於在前期數據轉換時主用於內部驗證,並無花不少心思去處理這個事情,通常數據能導過去,不對的地方本身再手工處理一下就行了。後面對這個轉換工具引發了極大的重視是正式有老客戶升級時,由於正式投入使用就容不得半點錯誤(當時至少有幾百家客戶須要升級新產品),因此數據轉移第一要求是百分百的準確率,其次是速度要快。如今回想起來,當時要有這麼一篇對比文章,那我就不會浪費那麼多時間在查找、對比、驗證工具和數據維護修正上了,因此真心但願經過這篇對比文章能給你們提供一些參考或幫助!下面進入正題:
在部署前期,首要任務就是考慮如何快速把基於 SQL Server 數據庫的應用程序移植到阿里雲的 MySQL 數據庫。因爲程序是基於 O/R mapping 編寫,而且數據庫中沒有使用存儲過程、用戶函數等數據庫功能,所以僅僅須要考慮的是數據庫中的數據如何轉換到新的 MySQL 數據庫中。
經過度娘查找,找到以下四種可使用的工具,而且每一種工具都有大量的用戶,還有很多用戶在自已的博客中寫下了圖文使用經驗,這四種工具分別是:
因爲公司須要處理的是業務數據庫,所以必須保證數據轉換的準確率(不容許丟失數據,數據庫字段、索引完整),而且須要保證數據庫遷移後能當即使用。所以在實施數據遷移前,對這幾種 SQLServer 到 MySQL 的遷移工具進行一個全面測試。下面咱們將基於如下需求爲前提進行測試:
● 軟件易用性
● 處理速度和內存佔用
● 數據完整性
● 試用版限制
● 其它功能web
1、測試用的源數據庫和系統
用於測試的源數據庫名爲 MesoftReportCenter。因爲其中一個測試工具試用版限制只能處理兩張數據表的緣由,所以咱們只選取了記錄數最多的兩張數據表:HISOPChargeIntermediateResult 和 HISOPChargeItemIntermediateResult。兩張數據表合計的記錄數約爲 328萬,數據庫不算大,但針對本次進行測試也基本上足夠了。
SQLServer 服務器和 MySQL 服務器分別運行在兩臺獨立的虛擬機系統中,而全部的待測試程序都運行在 MySQL 所在的服務器上面。其中:算法
SQLServer 服務配置:
● 操做系統:Windows XP
● 內 存:2GB
● 100MB 電信光纖sql
MySQL 服務配置:數據庫
● 操做系統:Windows XP
● 內 存:1GB
● 100MB 電信光纖服務器
同時爲了測試的公平性,除 Mss2SQL 外,全部軟件都是直接從官網下載最新的版本。 Mss2SQL 因爲試用版的限制緣由沒有參與測試,而使用了網上惟一能找到的 5.3 破解版進行測試。
2、軟件易用性評測
軟件易用性主要是指軟件在導入前的配置是否容易。因爲不少軟件設計是面向程序員而非通常的數據庫管理人員、甚至是普通的應用程序實施人員,而這一類人員不少時候並無數據源配置經驗。由於一些使用 ODBC 或者 ADO 進行配置的程序每每會讓這類用戶形成困擾(主要是不知道應該選擇什麼類型的數據庫驅動程序)。下面讓咱們看看四個工具的設計界面:
1、SQLyog
![](http://static.javashuo.com/static/loading.gif)
SQLyog 使用的是古老的 ODBC 鏈接,但對於新一代的程序來講,這種方式的很是的不熟悉而且不容易使用,而且必需要求本機安裝好相應的數據庫的 ODBC 驅動程序(SQL Server 通常自帶好)。app
2、Navicat Premium
![](http://static.javashuo.com/static/loading.gif)
Navicat Premium 是四個應用工具中設計最不人性化的一個:從上圖怎麼也想像不到要點按那個小按鈕來添加一個新的鏈接,而且這個鏈接設置不會保存,每次導入時都必須從新設置。 Navicat Premium 使用的是比 ODBC 稍先進的 ADO 設置方式(199X年代的產物),但使用上依然是針對老一代的程序員。函數
3、Mss2sql
Mss2sql 是最容易在百度上搜索出來的工具,緣由之一是它出現的時間較早。
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
Mss2sql 因爲是頗有針對性的從 SQLServer 遷移到 MySQL,由於界面使用了操做嚮導設計,使用很是容易。同時在設置的過程當中,有很是多的選項進行細節調整,能夠感受到軟件通過了至關長一段時間的使用漸漸完善出來的。工具
4、DB2DB
![](http://static.javashuo.com/static/loading.gif)
DB2DB 因爲是由國人開發,所以不管是界面仍是提示信息,都是全程漢字。另外,因爲 DB2DB 在功能上頗有針對性,由於界面設計一目瞭然和易使用。和 mss2sql 同樣, DB2DB 提供了很是多的選項供用戶進行選擇和設置。性能
3、處理速度和內存佔用評測
在本評測前,本人的一位資深同事曾經從網上下載了某款遷移軟件,把一個大約2500萬記錄數的數據錶轉送到阿里雲 MySQL,結果通過了三天三夜(好在其中兩天是星期六和星期日兩個休息日)都未能遷移過來。所以這一次須要對這四個工具的處理速度做一個詳細的測試。
考慮到從 SQL Server 遷移到 MySQL 會出現兩種不一樣的場景:
● 從 SQL Server 遷移到本地 MySQL 進行代碼測試和修改;
● 從 SQL Server 遷移到雲端 MySQL 數據庫正式上線使用;
所以咱們的測試也會針對這兩個場景分別進行評測,測試結果以下(記錄數約爲 328萬):
工具名稱 |
遷移到本地耗時 |
遷移到雲端耗時 |
最高CPU佔用 |
內存佔用 |
SQLyog |
2806秒 |
4438秒 |
08% |
20MB |
Navicat Premium |
598秒 |
3166秒 |
52% |
32MB |
Mss2sql |
726秒 |
1915秒 |
30% |
12MB |
DB2DB |
164秒 |
1282秒 |
34% |
40MB |
注:紅色字體標識爲勝出者。
如下爲測試過程當中的截圖:
1、SQLyog
2、Navicat Premium
注意:
咱們在測試 Navicat Premium 遷移到 MySQL 時發現,對於 SQL Server 的 Money 類型支持很差(不排除還有其它的數據類型支持很差)。Money 類型字段默認的小數位長度爲 255,使得沒法建立數據表致使整個測試沒法成功,須要咱們逐張表進行表結構修改才能完成測試過程。
Navicat Premium 的處理速度屬於中等,不算快也不算慢,但 CPU 佔用還有內存佔用都處於高位水平。不過以如今的電腦硬件水平來講,仍是能夠接受。但 CPU 佔用率過高,將使得數據在導入的過程當中,服務器不能用於其它用途。
3、Mss2sql
Mss2sql 並無提供計時器,所以咱們使用人工計時的方法,整個過程處理完畢大因而 726 秒。Mss2sql 的 CPU 佔用率相對其它工具來講較高,但仍屬於能夠接受的範圍以內。
4、DB2DB
![](http://static.javashuo.com/static/loading.gif)
DB2DB 一樣遷移 300萬數據時,僅僅使用了 2 分 44 秒,這個速度至關驚人。不過最後的結果出現一個 BUG,就是提示了轉換成功,但後面的進度條卻沒有走完(在後面的數據完整性評測中,咱們驗證了數據實際上是已經所有處理完畢了)。
4、數據完整性評測
把數據準確無誤地從 SQL Server 遷移到 MySQL 應該做爲這些工具的一個基本要求,所以這裏咱們對四種工具轉換以後的結果進行檢查。
咱們經過後臺 SQL 對記錄數進行檢查,發現全部的工具都能把記錄完整地遷移到新的數據庫。若是仔細觀察,能夠發現上圖中各個數據庫的大小是不一致的,基本的判斷是因爲各類工具在映射數據表字段時,字段長度取值可能不能而引發的。而 mesoftreportcenter2 數據庫大小比起其它數據庫差很少少了一半,這引發了咱們的注意。經過分析,
咱們發現
Navicat Premium 在遷移數據庫時,並不會爲該數據庫全部數據表建立索引和主鍵,缺乏索引和主鍵的數據庫大小顯然比其它數據庫要少得多。
爲了解各工具遷移後的數據庫可否當即應用於生產環境,咱們對建立後的數據表進行了更深刻的分析,發現各工具對字段默認值的支持程度也不盡相同。其中:
● SQLyog:完整支持 SQL Server 的默認值;
● Navicat Premium:徹底不支持默認值,全部遷移後的數據表都沒有默認值;
● Mss2sql:支持默認值但有嚴重錯誤;
● DB2DB:完整支持 SQL Server 的默認值。
Mss2sql 的默認值有一個嚴重的錯誤,在 SQL Server 中字段默認值爲空字符串 '',但遷移以後變成兩個 '' 符號。
Mss2sql 這個嚴重的錯誤會使得程序在正式環境運行後,數據庫會產生錯誤的數據!
在一些老舊的系統中,數據庫還會存在 Text、二進制類型的字段數據,經過測試對比後,四種工具都完美支持 Text 和 二進制(Image)類型字段。
小結:
測試項目 |
SQLyog |
Navicat Premium |
Mss2sql |
DB2DB |
表結構 |
支持 |
支持 |
支持 |
支持 |
字段長度 |
支持 |
部分支持(對Money等支持很差) |
支持 |
支持 |
數據 |
完整 |
完整 |
完整 |
完整 |
索引 |
支持 |
不支持 |
支持 |
支持 |
關鍵字 |
支持 |
不支持 |
支持 |
支持 |
默認值 |
支持 |
不支持 |
支持,但有嚴重錯誤 |
支持 |
二進制數據 |
支持 |
支持 |
支持 |
支持 |
5、各工具其它功能及試用版限制
估計因爲數據庫同步會存在一些技術難題的緣由,4 款工具目前都是隻是提供試用版本,最後咱們來看看四個工具的試用版本各自的限制是什麼:
工具名 |
價格 |
試用限制 |
其它功能 |
備註 |
SQyog |
$199 |
30天試用,而且只容許轉換兩張數據表 |
無 |
|
Navicat Premium |
$799 |
|
無 |
|
Mss2sql |
$49 |
每張數據表只容許有50秒處理時間 |
支持導出爲 SQL |
|
DB2DB |
¥199 |
10萬記錄限制 |
支持導出爲 SQL |
|
四種工具中,因爲 SQLyog 和 Navicat Premium 提供了額外的管理功能,因此價格相比其它兩款工具的要高得多。特別是 Navicat,必須是 Premium 版本才提供數據轉換的功能。而 Mss2sql 最新版本的試用版只提供了 50 秒處理時間,由於實用價值不大。而筆者與 DB2DB 做者聯繫時得知,DB2DB 設置 10萬記錄限制,主要是考慮國內不少小型軟件記錄數都是少於 10 萬筆,而這一類人羣通常都是小型創業團隊。
6、評測總結
最後,對四款軟件的測試結果做一個總體的總結:
工具名 |
處理速度 |
數據完整性 |
價格 |
推薦度 |
SQLyog |
★☆☆☆☆ |
★★★★★ |
★★☆☆☆ |
★★☆☆☆ |
Navicat Premium |
★★★☆☆ |
★☆☆☆☆ |
★☆☆☆☆ |
★☆☆☆☆ |
Mss2sql |
★★☆☆☆ |
★★★☆☆ |
★★★★☆ |
★★★☆☆ |
DB2DB |
★★★★★ |
★★★★★ |
★★★★★ |
★★★★★ |
以上四款軟件中,最不推薦使用的是 Navicat Premium,主要緣由是數據的完整性表現較差,轉換後的數據不能當即用於生產環境,須要程序員仔細自行查找緣由和分析。而 SQLyog 有較好的數據完整性,但總體處理速度很是的慢,若是數據較大的狀況下,須要浪費很是多寶貴的時間。比較推薦的是 DB2DB,軟件總體表現較好,對我來講最重要的是在不購買的狀況下也夠用了,並且全中文的傻瓜式界面操做起來實在方便。