最近一個項目快整完了,閑來無事,想研究一下內存數據庫。
但傳說中的內存數據庫大都跑在Linux/Unix下,一時候整不來,於是想在此之前多了解一下手里有的幾種數據庫的性能表現,方便在后面整內存數據庫時好做個對比。
於是寫了個簡單的程序,通過對數據庫做最簡單的Create,Select,Update,Delete操作來測以下幾個數據庫:
1,SQLServer 2008R2
2,SQL Compact 4.0
3,SQL Server Express 2008R2
4,MySql 5
5,SQLite 3
但最后SQLExpress,SQLite被踢出去了。原因是:經測試發現SQLExpress比起SQLServer性能差太遠,我也不清楚具體差在啥地方,還是直接測SQLServer比較有代表性;SQLite在Win7 x64及net 4.0下支持不好,達不到我最近一個計划要求(其實我是想測SQLite的內存數據庫特性…)。
系統環境:
Windows 2008 R2
.NET 4.0
硬件環境:都一樣,數據庫全裝在同一台VMware虛擬機上。 :)
測試流程:
1,先初始化數據庫。清除表數據,創建表,添加索引等。
2,向所有數據庫創建n條數據,各數據庫的數據創建時是一樣的(數量一樣,記錄內容一樣)。
3,做n次Select操作,條件隨機。
4,做n次Update操作,更新內容隨機。
5,做n次Delete操作,刪除條件隨機。
*不做SQL Compact的多線程測試,原因不說大家也明白。
當n=10000時:
============================
SQLCe 測試 單線程
測試類型:STDBDataTest
Create 799ms
Select 896ms
Update 1870ms
Delete 1480ms
SQLServer 測試 單線程
測試類型:STDBDataTest
Create 4141ms
Select 1338ms
Update 4006ms
Delete 3626ms
SQLServer 測試 多用戶並發
測試類型:MTDBDataTest 數據量:10000
Create 897ms
Select 339ms
Update 802ms
Delete 563ms
MySql 測試 單線程
測試類型:STDBDataTest
Create 5549ms
Select 1532ms
Update 6145ms
Delete 5894ms
MySql 測試 多用戶並發
測試類型:MTDBDataTest 數據量:10000
Create 2348ms
Select 926ms
Update 2094ms
Delete 1478ms
============================
數據庫 | 時間(ms) | 系數 |
SQLCe-單線程 | 5045 | 1.94 |
SQLServer-單線程 | 13111 | 5.04 |
SQLServer-並發 | 2601 | 1.00 |
MySQL-單線程 | 19120 | 7.35 |
MySQL-並發 | 6846 | 2.63 |
*值越小越好
============================
綜合以上數據看,在1萬條數據的小小壓力測試下,冠軍:SQLServer(並發),亞軍:SQL Compact(單線程)
最強Create獎:SQL Compact
最強Select獎:SQLServer
最強Update獎:SQLServer
最強Delete獎:SQLServer
MySQL在多用戶並發情況下竟然還能輸給SQL Compact,這很讓人不解,估計是我自己沒優化好(其實我哪個數據庫都沒優化,安裝完成后的默認配置),再說我也不清楚上哪優化去:)
SQL Compact的成績的確讓人眼前一亮,於是我想,要是整個“分布式”(N個庫N並發)的SQL Compact程序,那上面的結果會不會直接被SQL Compact秒掉。。。。這還真有可能。但別忘了,SQLServer有個SSIS,這東西可以1秒數萬至數十萬條數據地處理,但這已經不是這次測試的范圍內了。
最后測一下n=100W時是啥情況,但,5個測試,要做1600W次操作…..。。。。等了許久,洗澡完還沒跑完。。最后快跑完的時候被我一個誤操作把結果給丟失了(唉,以后有錢換台更NB的台式機!),但結果和1萬的情況一樣,多數程並發訪問下的SQLServer依然是最強的,最悲劇的竟然是MySQL,在100W級並發操作下Select表現極為悲壯,比所有單線程測試結果還差上很多,原因是啥?
嘿,不管了,休息先。
n=300000
==========================
SQLCe 測試 單線程
測試類型:STDBDataTest
Create 24246ms
Select 25311ms
Update 70300ms
Delete 46803ms
SQLServer 測試 單線程
測試類型:STDBDataTest
Create 120015ms
Select 45514ms
Update 112269ms
Delete 112491ms
SQLServer 測試 多用戶並發
測試類型:MTDBDataTest 數據量:300000
Create 26918ms
Select 10979ms
Update 21057ms
Delete 14445ms
MySql 測試 單線程
測試類型:STDBDataTest
Create 170734ms
Select 46444ms
Update 187352ms
Delete 177960ms
MySql測試 多用戶並發
測試類型:MTDBDataTest 數據量:300000
Create 45990ms
Select 168430ms
Update 72976ms
Delete 43711ms
=========================
數據庫 | 時間(ms) | 系數 |
SQLCe-單線程 | 166660 | 2.27 |
SQLServer-單線程 | 390289 | 5.32 |
SQLServer-並發 | 73399 | 1.00 |
MySQL-單線程 | 582490 | 7.94 |
MySQL-並發 | 331107 | 4.51 |
*值越小越好
==========================