在資料庫的應用開發中,常常會遇到效能和代價的之間矛盾。以作者在開發股市行情查詢和交易系統中遇到的問題為例,要在即時記錄1000多隻股票每分鐘更新一次的行情資料的同時,響應大量並發使用者的資料查詢請求。考慮到性價比和易維護性,系統又要求在基於PC伺服器,Windows NT平台的軟硬體環境下實現。開始,我們採用了MS SQL Server 6.5 作為資料庫系統,用Visual C++ 6.0開發了訪問資料庫的前端,應用ODBC資料介面,在進行了大量的資料庫配置和程式最佳化後,發現仍不能滿足效能要求。後採用SQL Server的DB-Library介面,繞過了ODBC解釋層,可以每秒更新行情資料30次,同時支援20-30個左右的並發使用者進行行情查詢,基本滿足要求(單台PC伺服器,單PII350 CPU,記憶體128M,SCSI硬碟)。有沒有可能進一步提高系統的效能和負載能力呢?經過分析,資料庫伺服器是系統的瓶頸。當然,可以採用UNIX伺服器+大型資料庫的系統平台,但其開發、運行、維護的費用比微機+Windows NT平台的費用高出數倍。我們在其它一些系統的開發中,也經常遇到這樣的矛盾。如何在微機平台上建立大容量、高效率、易維護、高性價比的資料庫系統呢?
考察國內基於微機平台的資料庫應用系統,典型的如網易的分布式郵件系統,採用了FreeBSD+MySQL的平台,其容量、負載能力和響應速度都很優秀。作者查閱了MySQL的相關文檔,發現MySQL是GNU軟體(即OpenSource自由軟體)中非常優秀的資料庫系統,它完全符合SQL92 (Entry level)和 ODBC( level 0-2)規範,在符合POSIX規範的作業系統上實現了非常高效的關係型資料庫管理系統。根據MySQL提供的文檔,它的資料操作堪稱所有資料庫中最高效的,Benchmark如下表:
| Reading 2000000 rows by index |
| Database |
Seconds |
| mysql |
367 |
| mysql_odbc |
464 |
| db2_odbc |
1206 |
| informix_odbc |
121126 |
| ms-sql_odbc |
1634 |
| oracle_odbc |
20800 |
| solid_odbc |
877 |
| sybase_odbc |
17614 |
| Inserting 350768 rows |
| Database |
Seconds |
| mysql |
381 |
| mysql_odbc |
619 |
| db2_odbc |
3460 |
| informix_odbc |
2692 |
| ms-sql_odbc |
4012 |
| oracle_odbc |
11291 |
| solid_odbc |
1801 |
| sybase_odbc |
4802 |
從MySQL的Benchmark中可以看到,MySQL的效能非常出眾(當然,測試的MySQL系統可能作了最佳化,被測資料可能是針對MySQL選擇的),而且MySQL提供了對Windows NT的支援。Windows NT+MySQL能否成為構建高效能資料庫應用的理想選擇呢?作者用MySQL的資料介面改寫了程式,經過一段時間的運行,證明MySQL確實是高效而穩定的資料庫,非常適合構建大容量、高效率、易維護、高性價比的資料庫應用系統。現將MySQL的安裝、運行、開發的心得與大家共用。