qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

          數(shù)據(jù)庫(kù)產(chǎn)品如何選型

            數(shù)據(jù)庫(kù)產(chǎn)品如何選型:
            一.軟件功能對(duì)比
            二.成本考慮
            三.滿(mǎn)足業(yè)務(wù)場(chǎng)景
            四.平衡各種資源
            oraclemysql,nosql選型
            一.是否滿(mǎn)足業(yè)務(wù)場(chǎng)景,各DB系統(tǒng)軟件功能對(duì)比
            1.功能對(duì)比
            oracle功能是大而全并且非常完善,無(wú)論是鎖定機(jī)制還是事物支持,無(wú)論是內(nèi)置函數(shù)還是外部可擴(kuò)展功能,無(wú)論OLTP和OLAP都能很好的支撐。
            mysql作為開(kāi)源數(shù)據(jù)的代表,得到了廣泛的應(yīng)用,關(guān)系型數(shù)據(jù)庫(kù)的常用功能也全面覆蓋到了,但mysql的缺失大表的hash join功能,這讓他在OLAP發(fā)展受阻。
            nosql主用用于K/V環(huán)境查詢(xún)的場(chǎng)景,在事務(wù)以及Join方面都未支持,能支持多維度復(fù)雜過(guò)濾的產(chǎn)品比較少。
            從功能角度比較 oracle > mysql > nosql
            2.性能強(qiáng)弱
            2.1 write性能
            Oracle需要記錄Redo Log且保證每次事務(wù)都fsync到物理磁盤(pán)以保證事務(wù)安全,屬于連續(xù)寫(xiě);數(shù)據(jù)的寫(xiě)入大多是在內(nèi)存中完成,后臺(tái)進(jìn)程進(jìn)行內(nèi)存到磁盤(pán)的定期批量刷新,以隨機(jī)寫(xiě)為主。MySQL InnoDB引擎與Oracle類(lèi)似;MyISAM引擎無(wú)事務(wù)所以沒(méi)有事務(wù)日志到磁盤(pán)的fsync問(wèn)題,但由于其表鎖的原因,并發(fā)較弱。從總體使用經(jīng)驗(yàn)來(lái)看       和Oracle相差不大。
            NoSQL在數(shù)據(jù)存儲(chǔ)及日志記錄方面的架構(gòu)及實(shí)現(xiàn)優(yōu)化,使之在寫(xiě)入性能方面較傳統(tǒng)數(shù)據(jù)庫(kù)有較大優(yōu)勢(shì)。
            總的來(lái)說(shuō)write性能 NoSQL > Oracle = Mysql
            2.2 簡(jiǎn)單查詢(xún)
            Oracle在高并發(fā)場(chǎng)景下,由于其在事務(wù)控制實(shí)現(xiàn)方面的優(yōu)勢(shì),以及多進(jìn)程的機(jī)制,顯示出了相對(duì)明顯的優(yōu)勢(shì)。
            MySQL在并發(fā)數(shù)不是太高的前提下,如16,32個(gè)并發(fā)場(chǎng)景下,相對(duì)于Oracle沒(méi)有顯示出弱勢(shì),甚至部分存儲(chǔ)引擎下還有一些優(yōu)勢(shì),但是隨著并發(fā)數(shù)        的增加,就逐步體現(xiàn)出了與Oracle的差距,這與其基于線(xiàn)程的機(jī)制也有一定關(guān)系。
            NoSQL大部分時(shí)候的簡(jiǎn)單查詢(xún)性能都不如前二者
            所以簡(jiǎn)單查詢(xún)的性能 Oracle > Mysql > Nosql
            2.3 復(fù)雜查詢(xún)
            Oracle統(tǒng)計(jì)信息涉及的方面非常多,優(yōu)化器相對(duì)于MySQL來(lái)說(shuō)也先進(jìn)很多,再加上對(duì)Join方式的全面支持,無(wú)論是從功能還是性能角度來(lái)說(shuō),多表 Join都是Oracle的優(yōu)勢(shì)所在。
            MySQL其查詢(xún)優(yōu)化器所能參考的統(tǒng)計(jì)信息相對(duì)較少,優(yōu)化器深度也比Oracle少很多,所以在多表Join的時(shí)候出現(xiàn)執(zhí)行計(jì)劃異常并不少見(jiàn)。此外,不        支持 Hash Join 的天生缺陷也讓其 Join 能力大打折扣。
            NoSQL不支持Join,不具可比性,無(wú)疑是最弱的
            索引復(fù)雜查詢(xún)性能 Oracle > Mysql > Nosql
            3.擴(kuò)展能力
            Oracle由于極高的一致性要求,采用share Everything架構(gòu),造成架構(gòu)上不少限制,使其擴(kuò)展陳本較高
            Mysql的Replication特性對(duì)一致性要求較弱,使其架構(gòu)很靈活,但slave的延遲是個(gè)大問(wèn)題。
            Nosql大都支持分布式部署,具有非常好的scale out能力
            所以擴(kuò)展能力 Nosql > Mysql > Oracle
            4.商業(yè)支持
            NoSQL產(chǎn)品目前有商業(yè)支持的很少,MySQL的本地化商業(yè)支持選擇并不多,Oracle方面的商業(yè)支持無(wú)論是大型公司還是初創(chuàng)團(tuán)隊(duì),選擇性相對(duì)比較廣泛
            所以在商業(yè)支持方面:Oracle > Mysql > Nosql
            5.軟件可維護(hù)性
            這一點(diǎn)一直是運(yùn)維人最為關(guān)注的因素,畢竟任何一個(gè)軟件系統(tǒng)都是需要后期維護(hù)的。
            NoSQL 產(chǎn)品由于發(fā)展時(shí)間相對(duì)較短,對(duì)于可維護(hù)性角度的支持相對(duì)要少很多,雖然大多提供了一些相應(yīng)的小工具,但總體來(lái)說(shuō)都還是過(guò)于簡(jiǎn)單了些,所以這方面和相對(duì)成熟的MySQL以及Oracle相比較要弱。而Oracle為后期維護(hù)所做的工作無(wú)疑是最為全面,無(wú)論是運(yùn)行狀態(tài)的跟蹤,還是基礎(chǔ)的備份恢復(fù)等,都很完善。
            所以在可維護(hù)性角度方面:Oracle > Mysql > Nosql
           三.業(yè)務(wù)場(chǎng)景分析
            1.數(shù)據(jù)一致性要求
            雖然無(wú)論你什么時(shí)候去問(wèn)任何一個(gè)業(yè)務(wù)方,都會(huì)告訴你他系統(tǒng)的數(shù)據(jù)是不能有任何一條丟失的,任何時(shí)候都需要實(shí)時(shí)反饋?zhàn)兓5珜?shí)際上是當(dāng)你換一個(gè)提問(wèn)方式,告訴他們?nèi)绻跇O端情況下(比如斷電)也要確保數(shù)據(jù)不會(huì)有任何丟失,會(huì)增加幾十上百萬(wàn)的成本,那這個(gè)時(shí)候得到的回答可能就會(huì)完全不一樣了。所以我們?cè)诹私鈽I(yè)務(wù)方對(duì)數(shù)據(jù)一致性要求的需求時(shí)候,一定要明確厲害關(guān)系,分清數(shù)據(jù)級(jí)別,并且做到最大化的信息透明,才能挖出最清晰的需求。對(duì)于數(shù)據(jù)一致性的保護(hù),Oracle 無(wú)疑是做的最可靠的一個(gè)。
            2.并發(fā)規(guī)模
            并發(fā)規(guī)模會(huì)考驗(yàn)我們的擴(kuò)展能力,如果并發(fā)規(guī)模很大,那我們就需要很好的擴(kuò)展能力以保證后續(xù)并發(fā)增長(zhǎng)的需求。選用一個(gè)難以擴(kuò)展的系統(tǒng),會(huì)導(dǎo)致后續(xù)并發(fā)規(guī)模增長(zhǎng)過(guò)程中無(wú)論是時(shí)間成本還是經(jīng)濟(jì)成本都很高
            3.邏輯復(fù)雜度
            如果業(yè)務(wù)邏輯過(guò)于復(fù)雜,至少NoSQL肯定不是合適的選擇,至于MySQL還是Oracle,那就是考驗(yàn)二者功能及性能的時(shí)候了。
            4.總?cè)萘恳?guī)模
            我們的系統(tǒng)數(shù)據(jù)容量規(guī)模自然也會(huì)影響到軟件選型,規(guī)模非常大的,肯定要用分布式系統(tǒng)支持,至少也得分庫(kù)分表吧,這時(shí)候的擴(kuò)展能力就會(huì)充分顯示出其優(yōu)勢(shì)。
            四.平衡各種資源做出最后選擇
            通過(guò)軟件功能和成本對(duì)比,以及“場(chǎng)景分析”,我們已經(jīng)為系統(tǒng)選型積累到相對(duì)充分的信息了,那是不是就可以比較明確的選擇出合適的系統(tǒng)了呢?
            這時(shí)候我們可能會(huì)發(fā)現(xiàn)我們的數(shù)量規(guī)模很大,但是又希望能夠維護(hù)方便容易控制。這時(shí)候我們就面臨如下問(wèn)題:數(shù)據(jù)量規(guī)模大選NoSQL更合適,便于維護(hù)又是Oracle的優(yōu)勢(shì),怎么辦? 又或者如果我們有這樣一個(gè)場(chǎng)景:某交易系統(tǒng),并發(fā)量很大,對(duì)于數(shù)據(jù)一致性要求很高,業(yè)務(wù)邏輯也并不簡(jiǎn)單,怎么辦?Oracle可以為我們提供很好的數(shù)據(jù)保護(hù),面對(duì)復(fù)雜邏輯的時(shí)候也能有最好的性能,但在擴(kuò)展的時(shí)候會(huì)面臨成本壓力。MySQL可以提供較好的擴(kuò)展方案,而且成本相對(duì)會(huì)較低,NoSQL無(wú)法解決復(fù)雜邏輯的業(yè)務(wù)場(chǎng)景。
            類(lèi)似問(wèn)題可能會(huì)頻繁出現(xiàn)在我們的架構(gòu)師面前,需要大家根據(jù)各種利弊進(jìn)行權(quán)衡,做好平衡決策,在盡可能滿(mǎn)足業(yè)務(wù)需求的前提下,選擇一個(gè)更合適的系統(tǒng)。有些時(shí)候可能也不得不作出犧牲極少數(shù)業(yè)務(wù)需求來(lái)?yè)Q取系統(tǒng)更大的發(fā)展,而不要為了保全某些極端場(chǎng)景的需求而影響整個(gè)選型。
            總結(jié)
            數(shù)據(jù)存儲(chǔ)軟件的多樣化趨勢(shì)勢(shì)不可當(dāng),不管是傳統(tǒng)龍頭的Oracle,還是開(kāi)源典范的MySQL,以及NoSQL這一新秀,各有其特色,但同樣也都有其短板。沒(méi)有誰(shuí)是萬(wàn)能的,同樣也沒(méi)有哪一種架構(gòu)能應(yīng)對(duì)所有問(wèn)題。
            作為一個(gè)架構(gòu)師,我們的選型工作需要做到下面幾點(diǎn):
            1. 在平時(shí)的工作中做好積累,以獲得上面的“系統(tǒng)功能對(duì)比”和“成本對(duì)比”中的信息。
            2. 在面對(duì)具體業(yè)務(wù)需求的時(shí)候,充分挖掘最真實(shí)的需求,并將各種利弊信息透明化
            3. 在最終決策的時(shí)候做好平衡,從需求實(shí)現(xiàn),成本控制以及維護(hù)管理多個(gè)角度權(quán)衡利弊
            4. 對(duì)新技術(shù)學(xué)習(xí)的渴求不能影響選型結(jié)果,同樣也不能對(duì)新技術(shù)的使用帶有恐懼。
            Oracle,MySQL 以及 NoSQL,都只是一個(gè)軟件而已,實(shí)際使用效果更多的取決于使用者的能力。一個(gè)優(yōu)秀的使用者能夠充分利用其優(yōu)勢(shì)避開(kāi)其軟肋,最終獲得最大化的價(jià)值。
            二.成本考慮
            1.軟件成本
            這個(gè)沒(méi)有爭(zhēng)議:Oracle > Mysql = Nosql
            2.運(yùn)維成本與團(tuán)隊(duì)管理水平
            維護(hù)的服務(wù)器數(shù)量、耗電、自動(dòng)化工具和人員配備數(shù)量
            系統(tǒng)是否在團(tuán)隊(duì)的可控范圍之內(nèi),出現(xiàn)性能、事故,團(tuán)隊(duì)要有能力解決
            3.人才環(huán)境
            Oracle發(fā)展幾十年,具有充足的人才儲(chǔ)備,活躍的社區(qū)環(huán)境。
            MySQL開(kāi)源數(shù)據(jù)庫(kù)的王者,社區(qū)活躍,雖然人才總量常常供不應(yīng)求,但總體還是處于良性狀態(tài)。
            NoSQL新技術(shù),產(chǎn)品眾多,社區(qū)活躍度遠(yuǎn)不如前面二者,處于人才極度匱乏狀態(tài)

          posted on 2014-08-19 13:28 順其自然EVO 閱讀(825) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 測(cè)試學(xué)習(xí)專(zhuān)欄

          <2014年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 北票市| 甘洛县| 红河县| 普兰县| 林西县| 大荔县| 额尔古纳市| 汉沽区| 巴林左旗| 濮阳市| 库车县| 陈巴尔虎旗| 锡林浩特市| 南靖县| 天台县| 奉化市| 新蔡县| 齐河县| 禹城市| 大埔区| 聂拉木县| 资兴市| 东海县| 台北县| 简阳市| 临城县| 清水县| 靖宇县| 黄大仙区| 宁陵县| 水城县| 芷江| 阿拉善右旗| 梅州市| 五指山市| 河东区| 阜康市| 青铜峡市| 房产| 红河县| 南华县|