總體從5個方面平衡自己的需求:
(1)標的
(2)功能
(3)多少人用(並發問題)
(4)安全和穩定性
(5)所用的操作系統(UNIX、linux、windows)
對於用過的數據庫有:
• dBase/FoxBase/FoxPro in the DOS/Novell/Windows 3.x world
• MS SQL Server
• Oracle
• Sybase SQL/ASE Servers
• Sybase IQ
• Informix/Dynamic
• MySQL
• PostGreSQL/EnterpriseDB
對於一些關鍵需求的選擇:
關鍵任務(OLTP)和高性能系統
如果我們需要數據庫在關鍵業務系統中發揮更重要的作用,並希望做到無故障時間/高可用/集群,可靠性(性能和數據量),災難復制和自動生成報告等目標,或需要實現極端高速和低延遲(HPC,高性能計算)效果,那么我們可能需要數據庫的企業級功能,但這樣的成本也更高。
HA(高可用)集群功能
各數據庫平台的集群功能如下:
• Oracle RAC最適合HA集群,負載均衡和擴展;
• MS SQL Server提供HA故障轉移功能,但無負載均衡;
• Sybase ASE 15集群與Oracle RAC功能相當;
• TeraData本身就是一個分布式數據庫平台;
• MySQL集群聲稱TPC-C性能基准測試比Oracle RAC還高;
• IBM DB2/UDB在運行AIX HACMP(高可用集群多處理)的IBM P系列/Power服務器和Veritas VCS/Sun等集群上運行得很好。
高性能/低延遲/內存數據庫
• Oracle提供TimesTen內存數據庫;
• MySQL的集群使用內存存儲引擎;
• Sybase提供ASE內存數據庫;
• 另外,我們還可以使用RAMSAN/SSD(固態硬盤)安裝SQL Server數據庫,所有與數據庫相關的磁盤I/O都發生在SSD上,而不是傳統硬盤上,因此我們可以大大減少磁盤I/O延遲,提供I/O吞吐量,並提高數據庫的整體性能;
• 還有其它的內存數據庫,如SQLite或eXtremeDB,但它們大多數要么只支持嵌入式系統,要么同一時間只支持單用戶或單連接。
可擴展性/性能
• 使用Oracle RAC和Sybase ASE 15集群時,如果現有硬件不能滿足性能要求,我們只需要向集群添加一台功能更強大的服務器,然后逐步替換掉其它節點;
• 使用SQL Server集群時,因為它僅僅支持主動/被動模式,在實例級沒有可擴展性,如果現有硬件滿足不了需要,我們必須更換整個集群;
• MySQL集群也支持向所有節點都處於活動的集群添加節點,但它是一個無共享集群,節點越多意味着有更多的數據庫副本,更多的存儲和在所有節點之間復制數據時需要更多的網絡流量。
復制
• Sybase:Sybase擁有最好的復制解決方案,超過了Oracle的數據衛士和SQL Server的復制解決方案(即使用它的鏡像/日志傳送/事務復制,SQL Server的復制仍然遠遠差於Sybase的復制服務器);
Sybase的異構復制和同質復制是Sybase公司上世紀90年代被華爾街排除但卻受到許多大公司使用的主要原因之一。
Sybase復制可以在數據庫級(主動/主動復制,比SQL Server的鏡像更好),事務級(與SQL Server的事務復制類似),表級,存儲過程級,函數級,MSA(多站點可用)以及通過日志傳送(復制世界中窮人的解決方案)實現,它的鏡像激活器結合EMC/SRDF可以真正保證在計划內和計划外停機時ZDL(零數據丟失)。
• SQL Server:SQL Server復制可以通過日志傳送和數據庫鏡像實現(主動/被動,R/W或只讀),支持對象級(表)粒度事務復制。
• Oracle:Oracle的數據衛士是數據庫克隆和災難恢復最佳解決方案之一(使用RMAN)。
• MySQL:MySQL提供無共享集群,基本上所有活動節點都是同步復制的,它的異步復制也支持事務和對象級復制。
• 存儲級解決方案:使用EMC的BCV,NetApp的快照管理器,日立的快照,Veritas的卷復制器,數據復制可以發生在磁盤塊級和卷級。
混合系統
通常情況下,后端數據庫存儲了大量的數據,在檢索數據(數據排序,分組,匯總和計算)時會出現性能問題,當運行速度變慢時,會影響到數據寫入過程。
因此,對於這些類型的應用程序,我們希望數據庫能很好地處理大量數據,也可以很好地處理讀/寫阻塞問題。
• Oracle
Oracle是這種系統的最佳選擇,因為在Oracle中,讀/寫程序不會相互阻止對方,數據在整個讀取過程/會話/事務中都是一致的,系統開銷主要發生了內存鎖和重做日志上。
• SQL Server
SQL Server 2005的新快照隔離使用了Oracle同樣的行版本化功能,但在tempdb中會產生更多的IO。
• Sybase ASE
Sybase ASE的讀/寫程序會相互阻塞對方,但Sybase IQ使用快照版本化管理解決了這個阻塞問題。
• 其它數據庫
還有其它一些數據庫也不存在阻塞問題,但其中一些甚至不遵從ACID(原子性,一致性,隔離性和持久性)標准。
數據倉庫
企業建立數據倉庫存儲/歸檔所有歷史數據,以及他們認為需要放在數據庫中的數據,通常,非規范化的數據進入數據倉庫,多維度為OLAP和商業智能(BI)解決方案提供快速檢索。
數據倉庫也用於新的或增強的業務戰略回溯測試,此外,數據倉庫中的數據是呈指數增長而非線性增長的。
基於列的關系數據庫優勢
基於列的關系數據庫具有很大的優勢,因為它天生就是多維的,每一列都是自我索引的(B tree)。
典型的基於列的數據庫有Google的Big Table,Sybase IQ,Vertica和基於MySQL構建的KickFire。
平均而言,這些基於列的數據庫比傳統的基於行的關系數據庫(如Oracle,SQL Server,Sybase ASE,TeraData,DB2和MySQL)在數據檢索速度上要快60到100倍,但在基於行級進行數據更新時它們的速度較慢,到目前為止,Sybase IQ似乎是這一領域的領頭羊,號稱世界上最大的數據倉庫(超過1P字節)就是用的Sybase IQ。
總體而言,基於行的關系數據(SQL Server,Oracle,Informix,DB2/UDB,MySQL,Sybase ASE等)適合OLTP應用,而基於列的關系數據庫(Sybase IQ,KickFire,Vertica等)更適合OLAP/DSS和數據倉庫應用。
注意:那些時間序列數據庫如OneTick,kdb+和Vhayu都不能算是關系數據庫,它們的存儲結構是基於文件的,每一列的數據都使用一個單獨的文件存儲,基本上算是基於列的數據庫,基於列的數據庫也可用於回溯測試。此外,基於行的數據倉庫(立方體)中的數據是呈指數級增長,但基於列的數據倉庫中的數據是呈線性增長的。
傳統上,Oracle在數據倉庫領域處於領先的優勢,但現在在基於列的關系數據庫(如Sybase IQ,Vertica和KickFire)面前已經失去優勢,Google正在使用的Big Table也是一種基於列的數據庫/存儲系統。