如何選擇數據庫


總體從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也是一種基於列的數據庫/存儲系統。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM