在數據庫世界中沒有銀彈
選擇哪個數據完全取決於你自己
你要實現的目標
有多少數據需要存儲
你應用程序使用的操作系統和語言平台
你的預算
以及是否需要數據倉庫
BI或決策支持系統等
背景 我的許多朋友
開發人員
應用和系統架構師
有時甚至是系統管理員經常問我同類型的問題
Bo
在我的應用中該使用SQL Server還是使用Oracle數據庫?
BO
我應該將我的Sybase數據庫遷移到SQL Server嗎?
哪個數據庫(平台)是最好的?
為什麼我們不使用開源數據庫
如MySQL或PostgreSQL?
所有這些問題基本上都是相同的 —— 哪個數據庫平台最適合某個應用程序
或是哪個數據庫平台對IT和業務最有意義?
為了回答這些問題
在我推薦任何數據庫平台之前
我會問他們更多的問題(通常是十多個)
很多時候人們不理解為什麼一個簡單的問題會引發這麼多問題
其實很多人不知道為什麼他/她需要一個數據庫
什麼是關系數據庫
數據庫與電子表格之間的差異(以及各自的優缺點)
該用Access數據庫還是SQL Server數據庫
或應用程序能從數據庫平台獲得什麼好處
雖然我不是在這裡宣傳數據庫是什麼
但我知道對IT和非IT人員談論數據庫完全不是一回事
我不想被稱為以數據庫為中心的呆子
不過我認為在
世紀
人們一直在談論BI(商業智能)
我也認為最靈活
最復雜和最易維護的系統是由數據驅動的
產生的數據量多了就得用數據庫來保存
下面我對最流行的數據庫平台只做簡要的介紹
並根據我的經驗和與其它IT界朋友的互動
介紹一下人們是怎麼使用這些數據庫的
下面我年來使用過的數據庫
; dBase/FoxBase/FoxPro in the DOS/Novell/Windows
x world
; MS SQL Server (
and
)
; Oracle (
/
i
i
g)
; Sybase SQL/ASE Servers (
/
x)
; Sybase IQ
/
; Informix/Dynamic (
)
; MySQL (
/
)
; PostGreSQL (
)/EnterpriseDB
此外
我參加了一系列的數據庫選型評估
如Vhayu和OneTick
我在各行業也有過內存數據庫使用經歷
如Oracle TimesTen和Sybase ASE內存版本(Sybase RAP商業版的一部分
它已成為時間序列數據庫領域的一個強力競爭者
特別是去年初和CEP集成後
影響越來越大)
我曾經擔任過公司全職員工或不同公司不同項目的顧問
真的覺得在數據庫世界中確實沒有銀彈
選擇什麼數據庫主要取決於以下幾方面因素
; 你是誰
; 你要實現的目標(業務/功能要求
性能/可靠性/可擴展性/可用性要求)
; 當前數據庫存儲了多少數據
; 應用程序要選擇的操作系統和語言平台
; 你的預算有多少
; 你是否想/需要構建一個數據倉庫
BI或決策支持系統
比較不同的數據庫系統就象比較不同的開發平台和操作系統平台
; Java/J
EE與(C#
VB)/
NET比較
; Windows與Linux/UNIX比較
; Linux與私有UNIX系統如AIX/HP
UX/Solaris/Tru
/Irix比較
; Unix與OpenMVS/UniSys/Tandem/IBM Mainframe比較
如果我們在前端辦公應用系統
如訂單錄入
銀行或電信系統中不需要數據庫(主要是擔憂鎖/阻塞
延遲和低I/O等)
我們只希望使用數據庫來存儲事實數據
或使用數據庫來備份數據
當然
所有關系數據庫都提供了不同的功能
即使它們都聲稱遵循ANSI SQL和SQL
標准
但實際上都有自己的一套SQL語言
這就好比Websphere/Weblogic/Oracle App Server/Sybase Eserver/Jboss之間的關系
它們是J
EE的不同實現
都兼容J
EE規范
但也有自己的擴展和變化
關鍵任務(OLTP)和高性能系統
如果我們需要數據庫在關鍵業務系統中發揮更重要的作用並希望做到無故障時間/高可用/集群可靠性(性能和數據量)災難復制和自動生成報告等目標或需要實現極端高速和低延遲(HPC高性能計算)效果那麼我們可能需要數據庫的企業級功能但這樣的成本也更高
HA(高可用)集群功能
各數據庫平台的集群功能如下
; Oracle RAC最適合HA集群負載均衡和擴展
; MS SQL Server提供HA故障轉移功能但無負載均衡
; Sybase ASE 集群與Oracle RAC功能相當
; TeraData本身就是一個分布式數據庫平台
; MySQL集群聲稱TPCC性能基准測試比Oracle RAC還高
; IBM DB/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 集群時如果現有硬件不能滿足性能要求我們只需要向集群添加一台功能更強大的服務器然後逐步替換掉其它節點
; 使用SQL Server集群時因為它僅僅支持主動/被動模式在實例級沒有可擴展性如果現有硬件滿足不了需要我們必須更換整個集群
; MySQL集群也支持向所有節點都處於活動的集群添加節點但它是一個無共享集群節點越多意味著有更多的數據庫副本更多的存儲和在所有節點之間復制數據時需要更多的網絡流量
復制
; Sybase首先澄清一下我不是Sybase的托兒Sybase擁有最好的復制解決方案超過了Oracle的數據衛士和SQL Server的復制解決方案(即使用它的鏡像/日志傳送/事務復制SQL Server的復制仍然遠遠差於Sybase的復制服務器)
Sybase的異構復制和同質復制是Sybase公司上世紀年代被華爾街排除但卻受到許多大公司使用的主要原因之一
Sybase復制可以在數據庫級(主動/主動復制比SQL Server的鏡像更好)事務級(與SQL Server的事務復制類似)表級存儲過程級函數級MSA(多站點可用)以及通過日志傳送(復制世界中窮人的解決方案)實現它的鏡像激活器結合EMC/SRDF可以真正保證在計劃內和計劃外停機時ZDL(零數據丟失)
; SQL ServerSQL Server復制可以通過日志傳送和數據庫鏡像實現(主動/被動R/W或只讀)支持對象級(表)粒度事務復制
; OracleOracle的數據衛士是數據庫克隆和災難恢復最佳解決方案之一(使用RMAN)
; MySQLMySQL提供無共享集群基本上所有活動節點都是同步復制的它的異步復制也支持事務和對象級復制
; 存儲級解決方案使用EMC的BCVNetApp的快照管理器日立的快照Veritas的卷復制器數據復制可以發生在磁盤塊級和卷級
混合系統
通常情況下後端數據庫存儲了大量的數據在檢索數據(數據排序分組匯總和計算)時會出現性能問題當運行速度變慢時會影響到數據寫入過程
因此對於這些類型的應用程序我們希望數據庫能很好地處理大量數據也可以很好地處理讀/寫阻塞問題
Oracle
Oracle是這種系統的最佳選擇因為在Oracle中讀/寫程序不會相互阻止對方數據在整個讀取過程/會話/事務中都是一致的系統開銷主要發生了內存鎖和重做日志上
SQL Server
SQL Server 的新快照隔離使用了Oracle同樣的行版本化功能但在tempdb中會產生更多的IO
Sybase ASE
Sybase ASE的讀/寫程序會相互阻塞對方但Sybase IQ使用快照版本化管理解決了這個阻塞問題
其它數據庫
還有其它一些數據庫也不存在阻塞問題但其中一些甚至不遵從ACID(原子性一致性隔離性和持久性)標准
數據倉庫
企業建立數據倉庫存儲/歸檔所有歷史數據以及他們認為需要放在數據庫中的數據通常非規范化的數據進入數據倉庫多維度為OLAP和商業智能(BI)解決方案提供快速檢索
數據倉庫也用於新的或增強的業務戰略回溯測試此外數據倉庫中的數據是呈指數增長而非線性增長的
基於列的關系數據庫優勢
基於列的關系數據庫具有很大的優勢因為它天生就是多維的每一列都是自我索引的(B tree)
典型的基於列的數據庫有Google的Big TableSybase IQVertica和基於MySQL構建的KickFire
平均而言這些基於列的數據庫比傳統的基於行的關系數據庫(如OracleSQL ServerSybase ASETeraDataDB和MySQL)在數據檢索速度上要快到倍但在基於行級進行數據更新時它們的速度較慢到目前為止Sybase IQ似乎是這一領域的領頭羊號稱世界上最大的數據倉庫(超過P字節)就是用的Sybase IQ
請訪問這些數據庫的網站了解更詳細的信息
;
;
更多有關基於列的關系數據庫信息
用Oracle和SQL Server作數據倉庫時都需要建立多維數據立方體需要的存儲空間也會更多我個人認為用基於行的關系數據庫作的數據倉庫將會很快被基於列的數據倉庫取代
總體而言基於行的關系數據(SQL ServerOracleInformixDB/UDBMySQLSybase ASE等)適合OLTP應用而基於列的關系數據庫(Sybase IQKickFireVertica等)更適合OLAP/DSS和數據倉庫應用
注意那些時間序列數據庫如OneTickkdb+和Vhayu都不能算是關系數據庫它們的存儲結構是基於文件的每一列的數據都使用一個單獨的文件存儲基本上算是基於列的數據庫基於列的數據庫也可用於回溯測試此外基於行的數據倉庫(立方體)中的數據是呈指數級增長但基於列的數據倉庫中的數據是呈線性增長的
傳統上Oracle在數據倉庫領域處於領先的優勢但現在在基於列的關系數據庫(如Sybase IQVertica和KickFire)面前已經失去優勢Google正在使用的Big Table也是一種基於列的數據庫/存儲系統
遷移思考
承受能力和現有數據庫上已有的投資是另一個需要考慮的事情
我見過不少從Sybase遷移到SQL Server的成功案例反之亦然但還很少看到從Sybase/SQL Server遷移到Oracle的反之亦然
根據數據庫的規模和應用范圍要遷移Sybase/SQL Server存儲過程重寫應用程序並進行測試可能需要很長一段時間即使有Oracle遷移工作台的幫助(現在我們可以使用SQL Developer)每個存儲過程都得重寫如果應用程序只使用了ODBC/JDBC/ADONET並且無存儲過程/臨時表那麼遷移會比較容易
原生支持的編程語言
前面已經說過Oracle對Java的支持是最好的我們可以在Oracle中存儲Java代碼並將其作為原生Oracle功能使用這使得Oracle的擴展性非常好(有點象開放源碼)此外Sybase也原生支持Java代碼SQL Server和Sybase支持擴展存儲過程基本上是指數據庫中調用外部動態庫的一個接口它可以用不同的編程語言實現
擁有成本
當我們在研究這些數據庫的功能時有一點必須要記住那就是成本和時間范圍即使你有一個經驗豐富的數據庫團隊如果所選數據庫平台超過了個也就沒有什麼意義了此外將所有數據庫合並到一個數據庫平台也沒有太大意義因為大部分異構數據庫都可以通過SQL Server的鏈接服務Oracle網關或使用一些數據庫復制和ETL工具代替當你在考慮數據庫的維護成本時不要孤立數據庫成本相反要將其作為你的應用程序和基礎設施的一部分看待
我希望這篇文章對那些將要或正在為其應用程序挑選數據庫的人們有所幫助不會為自己做出的選擇而後悔
From:http://tw.wingwit.com/Article/program/Oracle/201311/17724.html