在大數(shù)據(jù)時(shí)代,“多種架構(gòu)支持多類應(yīng)用”成為數(shù)據(jù)庫(kù)行業(yè)應(yīng)對(duì)大數(shù)據(jù)的基本思路,數(shù)據(jù)庫(kù)行業(yè)出現(xiàn)互為補(bǔ)充的三大陣營(yíng),適用于事務(wù)處理應(yīng)用的OldSQL、適用于數(shù)據(jù)分析應(yīng)用的NewSQL和適用于互聯(lián)網(wǎng)應(yīng)用的NoSQL。但在一些復(fù)雜的應(yīng)用場(chǎng)景中,單一數(shù)據(jù)庫(kù)架構(gòu)都不能完全滿足應(yīng)用場(chǎng)景對(duì)海量結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)管理、復(fù)雜分析、關(guān)聯(lián)查詢、實(shí)時(shí)性處理和控制建設(shè)成本等多方面的需要,因此不同架構(gòu)數(shù)據(jù)庫(kù)混合部署應(yīng)用成為滿足復(fù)雜應(yīng)用的必然選擇。不同架構(gòu)數(shù)據(jù)庫(kù)混合使用的模式可以概括為:OldSQL+NewSQL、OldSQL+NoSQL、NewSQL+NoSQL三種主要模式。下面通過(guò)三個(gè)案例對(duì)不同架構(gòu)數(shù)據(jù)庫(kù)的混合應(yīng)用部署進(jìn)行介紹。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、雅安服務(wù)器托管、營(yíng)銷軟件、網(wǎng)站建設(shè)、岱山網(wǎng)站維護(hù)、網(wǎng)站推廣。
OldSQL+NewSQL 在數(shù)據(jù)中心類應(yīng)用中混合部署
采用OldSQL+NewSQL模式構(gòu)建數(shù)據(jù)中心,在充分發(fā)揮OldSQL數(shù)據(jù)庫(kù)的事務(wù)處理能力的同時(shí),借助NewSQL在實(shí)時(shí)性、復(fù)雜分析、即席查詢等方面的獨(dú)特優(yōu)勢(shì),以及面對(duì)海量數(shù)據(jù)時(shí)較強(qiáng)的擴(kuò)展能力,滿足數(shù)據(jù)中心對(duì)當(dāng)前“熱”數(shù)據(jù)事務(wù)型處理和海量歷史“冷”數(shù)據(jù)分析兩方面的需求。OldSQL+NewSQL模式在數(shù)據(jù)中心類應(yīng)用中的互補(bǔ)作用體現(xiàn)在,OldSQL彌補(bǔ)了NewSQL不適合事務(wù)處理的不足,NewSQL彌補(bǔ)了OldSQL在海量數(shù)據(jù)存儲(chǔ)能力和處理性能方面的缺陷。
商業(yè)銀行數(shù)據(jù)中心采用OldSQL+NewSQL混合部署方式搭建,OldSQL數(shù)據(jù)庫(kù)滿足各業(yè)務(wù)系統(tǒng)數(shù)據(jù)的歸檔備份和事務(wù)型應(yīng)用,NewSQL MPP數(shù)據(jù)庫(kù)集群對(duì)即席查詢、多維分析等應(yīng)用提供高性能支持,并且通過(guò)MPP集群架構(gòu)實(shí)現(xiàn)應(yīng)對(duì)海量數(shù)據(jù)存儲(chǔ)的擴(kuò)展能力。
商業(yè)銀行數(shù)據(jù)中心存儲(chǔ)架構(gòu)
與傳統(tǒng)的OldSQL模式相比,商業(yè)銀行數(shù)據(jù)中心采用OldSQL+NewSQL混合搭建模式,數(shù)據(jù)加載性能提升3倍以上,即席查詢和統(tǒng)計(jì)分析性能提升6倍以上。NewSQL MPP的高可擴(kuò)展性能夠應(yīng)對(duì)新的業(yè)務(wù)需求,可隨著數(shù)據(jù)量的增長(zhǎng)采用集群方式構(gòu)建存儲(chǔ)容量更大的數(shù)據(jù)中心。
OldSQL+NoSQL 在互聯(lián)網(wǎng)大數(shù)據(jù)應(yīng)用中混合部署
在互聯(lián)網(wǎng)大數(shù)據(jù)應(yīng)用中采用OldSQL+NoSQL混合模式,能夠很好的解決互聯(lián)網(wǎng)大數(shù)據(jù)應(yīng)用對(duì)海量結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)進(jìn)行存儲(chǔ)和快速處理的需求。在諸如大型電子商務(wù)平臺(tái)、大型SNS平臺(tái)等互聯(lián)網(wǎng)大數(shù)據(jù)應(yīng)用場(chǎng)景中,OldSQL在應(yīng)用中負(fù)責(zé)高價(jià)值密度結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)和事務(wù)型處理,NoSQL在應(yīng)用中負(fù)責(zé)存儲(chǔ)和處理海量非結(jié)構(gòu)化的數(shù)據(jù)和低價(jià)值密度結(jié)構(gòu)化數(shù)據(jù)。OldSQL+NoSQL模式在互聯(lián)網(wǎng)大數(shù)據(jù)應(yīng)用中的互補(bǔ)作用體現(xiàn)在,OldSQL彌補(bǔ)了NoSQL在ACID特性和復(fù)雜關(guān)聯(lián)運(yùn)算方面的不足,NoSQL彌補(bǔ)了OldSQL在海量數(shù)據(jù)存儲(chǔ)和非結(jié)構(gòu)化數(shù)據(jù)處理方面的缺陷。
數(shù)據(jù)魔方是淘寶網(wǎng)的一款數(shù)據(jù)產(chǎn)品,主要提供行業(yè)數(shù)據(jù)分析、店鋪數(shù)據(jù)分析。淘寶數(shù)據(jù)產(chǎn)品在存儲(chǔ)層采用OldSQL+NoSQL混合模式,由基于MySQL的分布式關(guān)系型數(shù)據(jù)庫(kù)集群MyFOX和基于HBase的NoSQL存儲(chǔ)集群Prom組成。由于OldSQL強(qiáng)大的語(yǔ)義和關(guān)系表達(dá)能力,在應(yīng)用中仍然占據(jù)著重要地位,目前存儲(chǔ)在MyFOX中的統(tǒng)計(jì)結(jié)果數(shù)據(jù)已經(jīng)達(dá)到10TB,占據(jù)著數(shù)據(jù)魔方總數(shù)據(jù)量的95%以上。另一方面,NoSQL作為SQL的有益補(bǔ)充,解決了OldSQL數(shù)據(jù)庫(kù)無(wú)法解決的全屬性選擇器等問(wèn)題。
淘寶海量數(shù)據(jù)產(chǎn)品技術(shù)架構(gòu)
基于OldSQL+NoSQL混合架構(gòu)的特點(diǎn),數(shù)據(jù)魔方目前已經(jīng)能夠提供壓縮前80TB的數(shù)據(jù)存儲(chǔ)空間,支持每天4000萬(wàn)的查詢請(qǐng)求,平均響應(yīng)時(shí)間在28毫秒,足以滿足未來(lái)一段時(shí)間內(nèi)的業(yè)務(wù)增長(zhǎng)需求。
NewSQL+NoSQL 在行業(yè)大數(shù)據(jù)應(yīng)用中混合部署
行業(yè)大數(shù)據(jù)與互聯(lián)網(wǎng)大數(shù)據(jù)的區(qū)別在于行業(yè)大數(shù)據(jù)的價(jià)值密度更高,并且對(duì)結(jié)構(gòu)化數(shù)據(jù)的實(shí)時(shí)處理、復(fù)雜的多表關(guān)聯(lián)分析、即席查詢、數(shù)據(jù)強(qiáng)一致性等都比互聯(lián)網(wǎng)大數(shù)據(jù)有更高的要求。行業(yè)大數(shù)據(jù)應(yīng)用場(chǎng)景主要是分析類應(yīng)用,如:電信、金融、政務(wù)、能源等行業(yè)的決策輔助、預(yù)測(cè)預(yù)警、統(tǒng)計(jì)分析、經(jīng)營(yíng)分析等。
在行業(yè)大數(shù)據(jù)應(yīng)用中采用NewSQL+NoSQL混合模式,充分利用NewSQL在結(jié)構(gòu)化數(shù)據(jù)分析處理方面的優(yōu)勢(shì),以及NoSQL在非結(jié)構(gòu)數(shù)據(jù)處理方面的優(yōu)勢(shì),實(shí)現(xiàn)NewSQL與NoSQL的功能互補(bǔ),解決行業(yè)大數(shù)據(jù)應(yīng)用對(duì)高價(jià)值結(jié)構(gòu)化數(shù)據(jù)的實(shí)時(shí)處理、復(fù)雜的多表關(guān)聯(lián)分析、即席查詢、數(shù)據(jù)強(qiáng)一致性等要求,以及對(duì)海量非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)和精確查詢的要求。在應(yīng)用中,NewSQL承擔(dān)高價(jià)值密度結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)和分析處理工作,NoSQL承擔(dān)存儲(chǔ)和處理海量非結(jié)構(gòu)化數(shù)據(jù)和不需要關(guān)聯(lián)分析、Ad-hoc查詢較少的低價(jià)值密度結(jié)構(gòu)化數(shù)據(jù)的工作。
當(dāng)前電信運(yùn)營(yíng)商在集中化BI系統(tǒng)建設(shè)過(guò)程中面臨著數(shù)據(jù)規(guī)模大、數(shù)據(jù)處理類型多等問(wèn)題,并且需要應(yīng)對(duì)大量的固定應(yīng)用,以及占統(tǒng)計(jì)總數(shù)80%以上的突發(fā)性臨時(shí)統(tǒng)計(jì)(ad-hoc)需求。在集中化BI系統(tǒng)的建設(shè)中采用NewSQL+NoSQL混搭的模式,充分利用NewSQL在復(fù)雜分析、即席查詢等方面處理性能的優(yōu)勢(shì),及NoSQL在非結(jié)構(gòu)化數(shù)據(jù)處理和海量數(shù)據(jù)存儲(chǔ)方面的優(yōu)勢(shì),實(shí)現(xiàn)高效低成本。
集中化BI系統(tǒng)數(shù)據(jù)存儲(chǔ)架構(gòu)
集中化BI系統(tǒng)按照數(shù)據(jù)類型和處理方式的不同,將結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)分別存儲(chǔ)在不同的系統(tǒng)中:非結(jié)構(gòu)化數(shù)據(jù)在Hadoop平臺(tái)上存儲(chǔ)與處理;結(jié)構(gòu)化、不需要關(guān)聯(lián)分析、Ad-hoc查詢較少的數(shù)據(jù)保存在NoSQL數(shù)據(jù)庫(kù)或Hadoop平臺(tái);結(jié)構(gòu)化、需要關(guān)聯(lián)分析或經(jīng)常ad-hoc查詢的數(shù)據(jù),保存在NewSQL MPP數(shù)據(jù)庫(kù)中,短期高價(jià)值數(shù)據(jù)放在高性能平臺(tái),中長(zhǎng)期放在低成本產(chǎn)品中。
結(jié)語(yǔ)
當(dāng)前信息化應(yīng)用的多樣性、復(fù)雜性,以及三種數(shù)據(jù)庫(kù)架構(gòu)各自所具有的優(yōu)勢(shì)和局限性,造成任何一種架構(gòu)的數(shù)據(jù)庫(kù)都不能完全滿足應(yīng)用需求,因此不同架構(gòu)數(shù)據(jù)庫(kù)混合使用,從而彌補(bǔ)其他架構(gòu)的不足成為必然選擇。根據(jù)應(yīng)用場(chǎng)景采用不同架構(gòu)數(shù)據(jù)庫(kù)進(jìn)行組合搭配,充分發(fā)揮每種架構(gòu)數(shù)據(jù)庫(kù)的特點(diǎn)和優(yōu)勢(shì),并且與其他架構(gòu)數(shù)據(jù)庫(kù)形成互補(bǔ),完全涵蓋應(yīng)用需求,保證數(shù)據(jù)資源的最優(yōu)化利用,將成為未來(lái)一段時(shí)期內(nèi)信息化應(yīng)用主要采用的解決方式。
目前在國(guó)內(nèi)市場(chǎng)上,OldSQL主要為Oracle、IBM等國(guó)外數(shù)據(jù)庫(kù)廠商所壟斷,達(dá)夢(mèng)、金倉(cāng)等國(guó)產(chǎn)廠商仍處于追趕狀態(tài);南大通用憑借國(guó)產(chǎn)新型數(shù)據(jù)庫(kù)GBase 8a異軍突起,與EMC的Greenplum和HP的Vertica躋身NewSQL市場(chǎng)三強(qiáng);NoSQL方面用戶則大多采用Hadoop開(kāi)源方案。
隨著大數(shù)據(jù)分析市場(chǎng)迅速擴(kuò)展,哪些技術(shù)是最有需求和最有增長(zhǎng)潛力的呢?在Forrester Research的一份最新研究報(bào)告中,評(píng)估了22種技術(shù)在整個(gè)數(shù)據(jù)生命周期中的成熟度和軌跡。這些技術(shù)都對(duì)大數(shù)據(jù)的實(shí)時(shí)、預(yù)測(cè)和綜合洞察有著巨大的貢獻(xiàn)。
1. 預(yù)測(cè)分析技術(shù)
這也是大數(shù)據(jù)的主要功能之一。預(yù)測(cè)分析允許公司通過(guò)分析大數(shù)據(jù)源來(lái)發(fā)現(xiàn)、評(píng)估、優(yōu)化和部署預(yù)測(cè)模型,從而提高業(yè)務(wù)性能或降低風(fēng)險(xiǎn)。同時(shí),大數(shù)據(jù)的預(yù)測(cè)分析也與我們的生活息息相關(guān)。淘寶會(huì)預(yù)測(cè)你每次購(gòu)物可能還想買什么,愛(ài)奇藝正在預(yù)測(cè)你可能想看什么,百合網(wǎng)和其他約會(huì)網(wǎng)站甚至試圖預(yù)測(cè)你會(huì)愛(ài)上誰(shuí)……
2. NoSQL數(shù)據(jù)庫(kù)
NoSQL,Not Only SQL,意思是“不僅僅是SQL”,泛指非關(guān)系型數(shù)據(jù)庫(kù)。NoSQL數(shù)據(jù)庫(kù)提供了比關(guān)系數(shù)據(jù)庫(kù)更靈活、可伸縮和更便宜的替代方案,打破了傳統(tǒng)數(shù)據(jù)庫(kù)市場(chǎng)一統(tǒng)江山的格局。并且,NoSQL數(shù)據(jù)庫(kù)能夠更好地處理大數(shù)據(jù)應(yīng)用的需求。常見(jiàn)的NoSQL數(shù)據(jù)庫(kù)有HBase、Redis、MongoDB、Couchbase、LevelDB等。
3. 搜索和知識(shí)發(fā)現(xiàn)
支持來(lái)自于多種數(shù)據(jù)源(如文件系統(tǒng)、數(shù)據(jù)庫(kù)、流、api和其他平臺(tái)和應(yīng)用程序)中的大型非結(jié)構(gòu)化和結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)庫(kù)中自助提取信息的工具和技術(shù)。如,數(shù)據(jù)挖掘技術(shù)和各種大數(shù)據(jù)平臺(tái)。
4. 大數(shù)據(jù)流計(jì)算引擎
能夠過(guò)濾、聚合、豐富和分析來(lái)自多個(gè)完全不同的活動(dòng)數(shù)據(jù)源的數(shù)據(jù)的高吞吐量的框架,可以采用任何數(shù)據(jù)格式?,F(xiàn)今流行的流式計(jì)算引擎有Spark Streaming和Flink。
5. 內(nèi)存數(shù)據(jù)結(jié)構(gòu)
通過(guò)在分布式計(jì)算機(jī)系統(tǒng)中動(dòng)態(tài)隨機(jī)訪問(wèn)內(nèi)存(DRAM)、閃存或SSD上分布數(shù)據(jù),提供低延遲的訪問(wèn)和處理大量數(shù)據(jù)。
6. 分布式文件存儲(chǔ)
為了保證文件的可靠性和存取性能,數(shù)據(jù)通常以副本的方式存儲(chǔ)在多個(gè)節(jié)點(diǎn)上的計(jì)算機(jī)網(wǎng)絡(luò)。常見(jiàn)的分布式文件系統(tǒng)有GFS、HDFS、Lustre 、Ceph等。
7. 數(shù)據(jù)虛擬化
數(shù)據(jù)虛擬化是一種數(shù)據(jù)管理方法,它允許應(yīng)用程序檢索和操作數(shù)據(jù),而不需要關(guān)心有關(guān)數(shù)據(jù)的技術(shù)細(xì)節(jié),比如數(shù)據(jù)在源文件中是何種格式,或者數(shù)據(jù)存儲(chǔ)的物理位置,并且可以提供單個(gè)客戶用戶視圖。
8. 數(shù)據(jù)集成
用于跨解決方案進(jìn)行數(shù)據(jù)編排的工具,如Amazon Elastic MapReduce (EMR)、Apache Hive、Apache Pig、Apache Spark、MapReduce、Couchbase、Hadoop和MongoDB等。
9. 數(shù)據(jù)準(zhǔn)備
減輕采購(gòu)、成形、清理和共享各種雜亂數(shù)據(jù)集的負(fù)擔(dān)的軟件,以加速數(shù)據(jù)對(duì)分析的有用性。
10. 數(shù)據(jù)質(zhì)量
使用分布式數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)庫(kù)上的并行操作,對(duì)大型高速數(shù)據(jù)集進(jìn)行數(shù)據(jù)清理和充實(shí)的產(chǎn)品。
通常來(lái)說(shuō),當(dāng)數(shù)據(jù)多、并發(fā)量大的時(shí)候,架構(gòu)中可以引入Redis,幫助提升架構(gòu)的整體性能,減少M(fèi)ysql(或其他數(shù)據(jù)庫(kù))的壓力,但不是使用Redis,就不用MySQL。
因?yàn)镽edis的性能十分優(yōu)越,可以支持每秒十幾萬(wàn)此的讀/寫操作,并且它還支持持久化、集群部署、分布式、主從同步等,Redis在高并發(fā)的場(chǎng)景下數(shù)據(jù)的安全和一致性,所以它經(jīng)常用于兩個(gè)場(chǎng)景:
緩存
判斷數(shù)據(jù)是否適合緩存到Redis中,可以從幾個(gè)方面考慮: 會(huì)經(jīng)常查詢么?命中率如何?寫操作多么?數(shù)據(jù)大???
我們經(jīng)常采用這樣的方式將數(shù)據(jù)刷到Redis中:查詢的請(qǐng)求過(guò)來(lái),現(xiàn)在Redis中查詢,如果查詢不到,就查詢數(shù)據(jù)庫(kù)拿到數(shù)據(jù),再放到緩存中,這樣第二次相同的查詢請(qǐng)求過(guò)來(lái),就可以直接在Redis中拿到數(shù)據(jù);不過(guò)要注意【緩存穿透】的問(wèn)題。
緩存的刷新會(huì)比較復(fù)雜,通常是修改完數(shù)據(jù)庫(kù)之后,還需要對(duì)Redis中的數(shù)據(jù)進(jìn)行操作;代碼很簡(jiǎn)單,但是需要保證這兩步為同一事務(wù),或最終的事務(wù)一致性。
高速讀寫
常見(jiàn)的就是計(jì)數(shù)器,比如一篇文章的閱讀量,不可能每一次閱讀就在數(shù)據(jù)庫(kù)里面update一次。
高并發(fā)的場(chǎng)景很適合使用Redis,比如雙11秒殺,庫(kù)存一共就一千件,到了秒殺的時(shí)間,通常會(huì)在極為短暫的時(shí)間內(nèi),有數(shù)萬(wàn)級(jí)的請(qǐng)求達(dá)到服務(wù)器,如果使用數(shù)據(jù)庫(kù)的話,很可能在這一瞬間造成數(shù)據(jù)庫(kù)的崩潰,所以通常會(huì)使用Redis(秒殺的場(chǎng)景會(huì)比較復(fù)雜,Redis只是其中之一,例如如果請(qǐng)求超過(guò)某個(gè)數(shù)量的時(shí)候,多余的請(qǐng)求就會(huì)被限流)。
這種高并發(fā)的場(chǎng)景,是當(dāng)請(qǐng)求達(dá)到服務(wù)器的時(shí)候,直接在Redis上讀寫,請(qǐng)求不會(huì)訪問(wèn)到數(shù)據(jù)庫(kù);程序會(huì)在合適的時(shí)間,比如一千件庫(kù)存都被秒殺,再將數(shù)據(jù)批量寫到數(shù)據(jù)庫(kù)中。
所以通常來(lái)說(shuō),在必要的時(shí)候引入Redis,可以減少M(fèi)ySQL(或其他)數(shù)據(jù)庫(kù)的壓力,兩者不是替代的關(guān)系 。
我將持續(xù)分享Java開(kāi)發(fā)、架構(gòu)設(shè)計(jì)、程序員職業(yè)發(fā)展等方面的見(jiàn)解,希望能得到你的關(guān)注。
Redis和MySQL的應(yīng)用場(chǎng)景是不同的。
通常來(lái)說(shuō),沒(méi)有說(shuō)用Redis就不用MySQL的這種情況。
因?yàn)镽edis是一種非關(guān)系型數(shù)據(jù)庫(kù)(NoSQL),而MySQL是一種關(guān)系型數(shù)據(jù)庫(kù)。
和Redis同類的數(shù)據(jù)庫(kù)還有MongoDB和Memchache(其實(shí)并沒(méi)有持久化數(shù)據(jù))
那關(guān)系型數(shù)據(jù)庫(kù)現(xiàn)在常用的一般有MySQL,SQL Server,Oracle。
我們先來(lái)了解一下關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)的區(qū)別吧。
1.存儲(chǔ)方式
關(guān)系型數(shù)據(jù)庫(kù)是表格式的,因此存儲(chǔ)在表的行和列中。他們之間很容易關(guān)聯(lián)協(xié)作存儲(chǔ),提取數(shù)據(jù)很方便。而Nosql數(shù)據(jù)庫(kù)則與其相反,他是大塊的組合在一起。通常存儲(chǔ)在數(shù)據(jù)集中,就像文檔、鍵值對(duì)或者圖結(jié)構(gòu)。
2.存儲(chǔ)結(jié)構(gòu)
關(guān)系型數(shù)據(jù)庫(kù)對(duì)應(yīng)的是結(jié)構(gòu)化數(shù)據(jù),數(shù)據(jù)表都預(yù)先定義了結(jié)構(gòu)(列的定義),結(jié)構(gòu)描述了數(shù)據(jù)的形式和內(nèi)容。這一點(diǎn)對(duì)數(shù)據(jù)建模至關(guān)重要,雖然預(yù)定義結(jié)構(gòu)帶來(lái)了可靠性和穩(wěn)定性,但是修改這些數(shù)據(jù)比較困難。而Nosql數(shù)據(jù)庫(kù)基于動(dòng)態(tài)結(jié)構(gòu),使用與非結(jié)構(gòu)化數(shù)據(jù)。因?yàn)镹osql數(shù)據(jù)庫(kù)是動(dòng)態(tài)結(jié)構(gòu),可以很容易適應(yīng)數(shù)據(jù)類型和結(jié)構(gòu)的變化。
3.存儲(chǔ)規(guī)范
關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)存儲(chǔ)為了更高的規(guī)范性,把數(shù)據(jù)分割為最小的關(guān)系表以避免重復(fù),獲得精簡(jiǎn)的空間利用。雖然管理起來(lái)很清晰,但是單個(gè)操作設(shè)計(jì)到多張表的時(shí)候,數(shù)據(jù)管理就顯得有點(diǎn)麻煩。而Nosql數(shù)據(jù)存儲(chǔ)在平面數(shù)據(jù)集中,數(shù)據(jù)經(jīng)??赡軙?huì)重復(fù)。單個(gè)數(shù)據(jù)庫(kù)很少被分隔開(kāi),而是存儲(chǔ)成了一個(gè)整體,這樣整塊數(shù)據(jù)更加便于讀寫
4.存儲(chǔ)擴(kuò)展
這可能是兩者之間最大的區(qū)別,關(guān)系型數(shù)據(jù)庫(kù)是縱向擴(kuò)展,也就是說(shuō)想要提高處理能力,要使用速度更快的計(jì)算機(jī)。因?yàn)閿?shù)據(jù)存儲(chǔ)在關(guān)系表中,操作的性能瓶頸可能涉及到多個(gè)表,需要通過(guò)提升計(jì)算機(jī)性能來(lái)克服。雖然有很大的擴(kuò)展空間,但是最終會(huì)達(dá)到縱向擴(kuò)展的上限。而Nosql數(shù)據(jù)庫(kù)是橫向擴(kuò)展的,它的存儲(chǔ)天然就是分布式的,可以通過(guò)給資源池添加更多的普通數(shù)據(jù)庫(kù)服務(wù)器來(lái)分擔(dān)負(fù)載。
5.查詢方式
關(guān)系型數(shù)據(jù)庫(kù)通過(guò)結(jié)構(gòu)化查詢語(yǔ)言來(lái)操作數(shù)據(jù)庫(kù)(就是我們通常說(shuō)的SQL)。SQL支持?jǐn)?shù)據(jù)庫(kù)CURD操作的功能非常強(qiáng)大,是業(yè)界的標(biāo)準(zhǔn)用法。而Nosql查詢以塊為單元操作數(shù)據(jù),使用的是非結(jié)構(gòu)化查詢語(yǔ)言(UnQl),它是沒(méi)有標(biāo)準(zhǔn)的。關(guān)系型數(shù)據(jù)庫(kù)表中主鍵的概念對(duì)應(yīng)Nosql中存儲(chǔ)文檔的ID。關(guān)系型數(shù)據(jù)庫(kù)使用預(yù)定義優(yōu)化方式(比如索引)來(lái)加快查詢操作,而Nosql更簡(jiǎn)單更精確的數(shù)據(jù)訪問(wèn)模式。
6.事務(wù)
關(guān)系型數(shù)據(jù)庫(kù)遵循ACID規(guī)則(原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)),而Nosql數(shù)據(jù)庫(kù)遵循BASE原則(基本可用(Basically Availble)、軟/柔性事務(wù)(Soft-state )、最終一致性(Eventual Consistency))。由于關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)強(qiáng)一致性,所以對(duì)事務(wù)的支持很好。關(guān)系型數(shù)據(jù)庫(kù)支持對(duì)事務(wù)原子性細(xì)粒度控制,并且易于回滾事務(wù)。而Nosql數(shù)據(jù)庫(kù)是在CAP(一致性、可用性、分區(qū)容忍度)中任選兩項(xiàng),因?yàn)榛诠?jié)點(diǎn)的分布式系統(tǒng)中,很難全部滿足,所以對(duì)事務(wù)的支持不是很好,雖然也可以使用事務(wù),但是并不是Nosql的閃光點(diǎn)。
7.性能
關(guān)系型數(shù)據(jù)庫(kù)為了維護(hù)數(shù)據(jù)的一致性付出了巨大的代價(jià),讀寫性能比較差。在面對(duì)高并發(fā)讀寫性能非常差,面對(duì)海量數(shù)據(jù)的時(shí)候效率非常低。而Nosql存儲(chǔ)的格式都是key-value類型的,并且存儲(chǔ)在內(nèi)存中,非常容易存儲(chǔ),而且對(duì)于數(shù)據(jù)的 一致性是 弱要求。Nosql無(wú)需sql的解析,提高了讀寫性能。
8.授權(quán)方式
大多數(shù)的關(guān)系型數(shù)據(jù)庫(kù)都是付費(fèi)的并且價(jià)格昂貴,成本較大(MySQL是開(kāi)源的,所以應(yīng)用的場(chǎng)景最多),而Nosql數(shù)據(jù)庫(kù)通常都是開(kāi)源的。
所以,在實(shí)際的應(yīng)用環(huán)境中,我們一般會(huì)使用MySQL存儲(chǔ)我們的業(yè)務(wù)過(guò)程中的數(shù)據(jù),因?yàn)檫@些數(shù)據(jù)之間的關(guān)系比較復(fù)雜,我們常常會(huì)需要在查詢一個(gè)表的數(shù)據(jù)時(shí)候,將其他關(guān)系表的數(shù)據(jù)查詢出來(lái),例如,查詢某個(gè)用戶的訂單,那至少是需要用戶表和訂單表的數(shù)據(jù)。
查詢某個(gè)商品的銷售數(shù)據(jù),那可能就會(huì)需要用戶表,訂單表,訂單明細(xì)表,商品表等等。
而在這樣的使用場(chǎng)景中,我們使用Redis來(lái)存儲(chǔ)的話,也就是KeyValue形式存儲(chǔ)的話,其實(shí)并不能滿足我們的需要。
即使Redis的讀取效率再高,我們也沒(méi)法用。
但,對(duì)于某些沒(méi)有關(guān)聯(lián)少,且需要高頻率讀寫,我們使用Redis就能夠很好的提高整個(gè)體統(tǒng)的并發(fā)能力。
例如商品的庫(kù)存信息,我們雖然在MySQL中會(huì)有這樣的字段,但是我們并不想MySQL的數(shù)據(jù)庫(kù)被高頻的讀寫,因?yàn)槭褂眠@樣會(huì)導(dǎo)致我的商品表或者庫(kù)存表IO非常高,從而影響整個(gè)體統(tǒng)的效率。
所以,對(duì)于這樣的數(shù)據(jù),且有沒(méi)有什么復(fù)雜邏輯關(guān)系(就只是隸屬于SKU)的數(shù)據(jù),我們就可以放在Redis里面,下單直接在Redis中減掉庫(kù)存,這樣,我們的訂單的并發(fā)能力就能夠提高了。
個(gè)人覺(jué)得應(yīng)該站出來(lái)更正一下,相反的數(shù)據(jù)量大,更不應(yīng)該用redis。
為什么?
因?yàn)閞edis是內(nèi)存型數(shù)據(jù)庫(kù)啊,是放在內(nèi)存里的。
設(shè)想一下,假如你的電腦100G的資料,都用redis來(lái)存儲(chǔ),那么你需要100G以上的內(nèi)存!
使用場(chǎng)景
Redis最明顯的用例之一是將其用作緩存。只是保存熱數(shù)據(jù),或者具有過(guò)期的cache。
例如facebook,使用Memcached來(lái)作為其會(huì)話緩存。
總之,沒(méi)有見(jiàn)過(guò)哪個(gè)大公司數(shù)據(jù)量大了,換掉mysql用redis的。
題主你錯(cuò)了,不是用redis代替MySQL,而是引入redis來(lái)優(yōu)化。
BAT里越來(lái)越多的項(xiàng)目組已經(jīng)采用了redis+MySQL的架構(gòu)來(lái)開(kāi)發(fā)平臺(tái)工具。
如題主所說(shuō),當(dāng)數(shù)據(jù)多的時(shí)候,MySQL的查詢效率會(huì)大打折扣。我們通常默認(rèn)如果查詢的字段包含索引的話,返回是毫秒級(jí)別的。但是在實(shí)際工作中,我曾經(jīng)遇到過(guò)一張包含10個(gè)字段的表,1800萬(wàn)+條數(shù)據(jù),當(dāng)某種場(chǎng)景下,我們不得不根據(jù)一個(gè)未加索引的字段進(jìn)行精確查詢的時(shí)候,單條sql語(yǔ)句的執(zhí)行時(shí)長(zhǎng)有時(shí)能夠達(dá)到2min以上,就更別提如果用like這種模糊查詢的話,其效率將會(huì)多么低下。
我們最開(kāi)始是希望能夠通過(guò)增加索引的方式解決,但是面對(duì)千萬(wàn)級(jí)別的數(shù)據(jù)量,我們也不敢貿(mào)然加索引,因?yàn)橐坏?shù)據(jù)庫(kù)hang住,期間的所有數(shù)據(jù)庫(kù)寫入請(qǐng)求都會(huì)被放到等待隊(duì)列中,如果請(qǐng)求是通過(guò)http請(qǐng)求發(fā)過(guò)來(lái)的,很有可能導(dǎo)致服務(wù)發(fā)生分鐘級(jí)別的超時(shí)不響應(yīng)。
經(jīng)過(guò)一番調(diào)研,最終敲定的解決方案是引入redis作為緩存。redis具有運(yùn)行效率高,數(shù)據(jù)查詢速度快,支持多種存儲(chǔ)類型以及事務(wù)等優(yōu)勢(shì),我們把經(jīng)常讀取,而不經(jīng)常改動(dòng)的數(shù)據(jù)放入redis中,服務(wù)器讀取這類數(shù)據(jù)的時(shí)候時(shí)候,直接與redis通信,極大的緩解了MySQL的壓力。
然而,我在上面也說(shuō)了,是redis+MySQL結(jié)合的方式,而不是替代。原因就是redis雖然讀寫很快,但是不適合做數(shù)據(jù)持久層,主要原因是使用redis做數(shù)據(jù)落盤是要以效率作為代價(jià)的,即每隔制定的時(shí)間,redis就要去進(jìn)行數(shù)據(jù)備份/落盤,這對(duì)于單線程的它來(lái)說(shuō),勢(shì)必會(huì)因“分心”而影響效率,結(jié)果得不償失。
樓主你好,首先糾正下,數(shù)據(jù)多并不是一定就用Redis,Redis歸屬于NoSQL數(shù)據(jù)庫(kù)中,其特點(diǎn)擁有高性能讀寫數(shù)據(jù)速度,主要解決業(yè)務(wù)效率瓶頸。下面就詳細(xì)說(shuō)下Redis的相比MySQL優(yōu)點(diǎn)。( 關(guān)于Redis詳細(xì)了解參見(jiàn)我近期文章: )
讀寫異???/p>
Redis非??欤棵肟蓤?zhí)行大約10萬(wàn)次的讀寫速度。
豐富的數(shù)據(jù)類型
Redis支持豐富的數(shù)據(jù)類型,有二進(jìn)制字符串、列表、集合、排序集和散列等等。這使得Redis很容易被用來(lái)解決各種問(wèn)題,因?yàn)槲覀冎滥男﹩?wèn)題可以更好使用地哪些數(shù)據(jù)類型來(lái)處理解決。
原子性
Redis的所有操作都是原子操作,這確保如果兩個(gè)客戶端并發(fā)訪問(wèn),Redis服務(wù)器能接收更新的值。
豐富實(shí)用工具 支持異機(jī)主從復(fù)制
Redis支持主從復(fù)制的配置,它可以實(shí)現(xiàn)主服務(wù)器的完全拷貝。
以上為開(kāi)發(fā)者青睞Redis的主要幾個(gè)可取之處。但是,請(qǐng)注意實(shí)際生產(chǎn)環(huán)境中企業(yè)都是結(jié)合Redis和MySQL的特定進(jìn)行不同應(yīng)用場(chǎng)景的取舍。 如緩存——熱數(shù)據(jù)、計(jì)數(shù)器、消息隊(duì)列(與ActiveMQ,RocketMQ等工具類似)、位操作(大數(shù)據(jù)處理)、分布式鎖與單線程機(jī)制、最新列表(如新聞列表頁(yè)面最新的新聞列表)以及排行榜等等 可以看見(jiàn)Redis大顯身手的場(chǎng)景??墒菍?duì)于嚴(yán)謹(jǐn)?shù)臄?shù)據(jù)準(zhǔn)確度和復(fù)雜的關(guān)系型應(yīng)用MySQL等關(guān)系型數(shù)據(jù)庫(kù)依然不可替。
web應(yīng)用中一般采用MySQL+Redis的方式,web應(yīng)用每次先訪問(wèn)Redis,如果沒(méi)有找到數(shù)據(jù),才去訪問(wèn)MySQL。
本質(zhì)區(qū)別
1、mysql:數(shù)據(jù)放在磁盤 redis:數(shù)據(jù)放在內(nèi)存。
首先要知道m(xù)ysql存儲(chǔ)在磁盤里,redis存儲(chǔ)在內(nèi)存里,redis既可以用來(lái)做持久存儲(chǔ),也可以做緩存,而目前大多數(shù)公司的存儲(chǔ)都是mysql + redis,mysql作為主存儲(chǔ),redis作為輔助存儲(chǔ)被用作緩存,加快訪問(wèn)讀取的速度,提高性能。
使用場(chǎng)景區(qū)別
1、mysql支持sql查詢,可以實(shí)現(xiàn)一些關(guān)聯(lián)的查詢以及統(tǒng)計(jì);
2、redis對(duì)內(nèi)存要求比較高,在有限的條件下不能把所有數(shù)據(jù)都放在redis;
3、mysql偏向于存數(shù)據(jù),redis偏向于快速取數(shù)據(jù),但redis查詢復(fù)雜的表關(guān)系時(shí)不如mysql,所以可以把熱門的數(shù)據(jù)放redis,mysql存基本數(shù)據(jù)。
mysql的運(yùn)行機(jī)制
mysql作為持久化存儲(chǔ)的關(guān)系型數(shù)據(jù)庫(kù),相對(duì)薄弱的地方在于每次請(qǐng)求訪問(wèn)數(shù)據(jù)庫(kù)時(shí),都存在著I/O操作,如果反復(fù)頻繁的訪問(wèn)數(shù)據(jù)庫(kù)。第一:會(huì)在反復(fù)鏈接數(shù)據(jù)庫(kù)上花費(fèi)大量時(shí)間,從而導(dǎo)致運(yùn)行效率過(guò)慢;第二:反復(fù)地訪問(wèn)數(shù)據(jù)庫(kù)也會(huì)導(dǎo)致數(shù)據(jù)庫(kù)的負(fù)載過(guò)高,那么此時(shí)緩存的概念就衍生了出來(lái)。
Redis持久化
由于Redis的數(shù)據(jù)都存放在內(nèi)存中,如果沒(méi)有配置持久化,redis重啟后數(shù)據(jù)就全丟失了,于是需要開(kāi)啟redis的持久化功能,將數(shù)據(jù)保存到磁盤上,當(dāng)redis重啟后,可以從磁盤中恢復(fù)數(shù)據(jù)。redis提供兩種方式進(jìn)行持久化,一種是RDB持久化(原理是將Reids在內(nèi)存中的數(shù)據(jù)庫(kù)記錄定時(shí)dump到磁盤上的RDB持久化),另外一種是AOF(append only file)持久化(原理是將Reids的操作日志以追加的方式寫入文件)。
redis是放在內(nèi)存的~!
數(shù)據(jù)量多少絕對(duì)不是選擇redis和mysql的準(zhǔn)則,因?yàn)闊o(wú)論是mysql和redis都可以集群擴(kuò)展,約束它們的只是硬件(即你有沒(méi)有那么多錢搭建上千個(gè)組成的集群),我個(gè)人覺(jué)得數(shù)據(jù)讀取的快慢可能是選擇的標(biāo)準(zhǔn)之一,另外工作中往往是兩者同是使用,因?yàn)閙ysql存儲(chǔ)在硬盤,做持久化存儲(chǔ),而redis存儲(chǔ)在內(nèi)存中做緩存提升效率。
關(guān)系型數(shù)據(jù)庫(kù)是必不可少的,因?yàn)橹挥嘘P(guān)系型數(shù)據(jù)庫(kù)才能提供給你各種各樣的查詢方式。如果有一系列的數(shù)據(jù)會(huì)頻繁的查詢,那么就用redis進(jìn)行非持久化的存儲(chǔ),以供查詢使用,是解決并發(fā)性能問(wèn)題的其中一個(gè)手段
網(wǎng)站名稱:nosql精簡(jiǎn),最簡(jiǎn)單的NoSQL數(shù)據(jù)庫(kù)
文章源于:http://m.rwnh.cn/article44/dsdhhhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、品牌網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、軟件開(kāi)發(fā)、標(biāo)簽優(yōu)化、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)