NoSQL,指的是非關(guān)系型的數(shù)據(jù)庫(kù)。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)在應(yīng)付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的
成都創(chuàng)新互聯(lián)專(zhuān)注于網(wǎng)站建設(shè)|成都網(wǎng)站維護(hù)|優(yōu)化|托管以及網(wǎng)絡(luò)推廣,積累了大量的網(wǎng)站設(shè)計(jì)與制作經(jīng)驗(yàn),為許多企業(yè)提供了網(wǎng)站定制設(shè)計(jì)服務(wù),案例作品覆蓋成都隧道混凝土攪拌車(chē)等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷(xiāo)售的產(chǎn)品,結(jié)合品牌形象的塑造,量身開(kāi)發(fā)品質(zhì)網(wǎng)站。
SNS類(lèi)型的web2.0純動(dòng)態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問(wèn)題,而非關(guān)系型的數(shù)據(jù)庫(kù)則由于其本身的特點(diǎn)得到了非常迅速的發(fā)展。
NoSQL(NoSQL
= Not Only SQL
),意即“不僅僅是SQL”,是一項(xiàng)全新的數(shù)據(jù)庫(kù)革命性運(yùn)動(dòng),早期就有人提出,發(fā)展至2009年趨勢(shì)越發(fā)高漲。NoSQL的擁護(hù)者們提倡運(yùn)用非關(guān)系型的數(shù)
據(jù)存儲(chǔ),相對(duì)于鋪天蓋地的關(guān)系型數(shù)據(jù)庫(kù)運(yùn)用,這一概念無(wú)疑是一種全新的思維的注入。
從這一新興技術(shù)中選擇一款正確的NoSQL數(shù)據(jù)庫(kù)是非常具有挑戰(zhàn)性的。比一下網(wǎng)建議在選擇時(shí)考慮以下因素:
并發(fā)控制
并
發(fā)控制指的是當(dāng)多個(gè)用戶(hù)同時(shí)更新運(yùn)行時(shí),用于保護(hù)數(shù)據(jù)庫(kù)完整性的各種技術(shù)。并發(fā)機(jī)制不正確可能導(dǎo)致臟讀、幻讀和不可重復(fù)讀等此類(lèi)問(wèn)題。并發(fā)控制的目的是保
證一個(gè)用戶(hù)的工作不會(huì)對(duì)另一個(gè)用戶(hù)的工作產(chǎn)生不合理的影響。在某些情況下,這些措施保證了當(dāng)用戶(hù)和其他用戶(hù)一起操作時(shí),所得的結(jié)果和她單獨(dú)操作時(shí)的結(jié)果是
一樣的。在另一些情況下,這表示用戶(hù)的工作按預(yù)定的方式受其他用戶(hù)的影響。
封鎖
就是事務(wù)T在對(duì)某個(gè)數(shù)據(jù)對(duì)象(例如表、記錄等)操作之前,先向系統(tǒng)發(fā)出請(qǐng)求,對(duì)其加鎖。加鎖后事務(wù)T就對(duì)該數(shù)據(jù)對(duì)象有了一定的控制,在事務(wù)T釋放它的鎖之前,其它的事務(wù)不能更新此數(shù)據(jù)對(duì)象。
封鎖是一次只允許一個(gè)用戶(hù)讀取或修改的一種機(jī)制,是實(shí)現(xiàn)并發(fā)控制的一個(gè)非常重要的技術(shù)。
MVCC
Multi-Version Concurrency Control多版本并發(fā)控制,維持一個(gè)數(shù)據(jù)的多個(gè)版本使讀寫(xiě)操作沒(méi)有沖突。MVCC優(yōu)化了數(shù)據(jù)庫(kù)并發(fā)系統(tǒng),使系統(tǒng)在有大量并發(fā)用戶(hù)時(shí)得到最高的性能,并且可以不用關(guān)閉服務(wù)器就直接進(jìn)行熱備份。
ACID
指
數(shù)據(jù)庫(kù)事務(wù)正確執(zhí)行的四個(gè)基本要素的縮寫(xiě)。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久
性(Durability)。一個(gè)支持事務(wù)(Transaction)的數(shù)據(jù)庫(kù)系統(tǒng),必需要具有這四種特性,否則在事務(wù)過(guò)程(Transaction
processing)當(dāng)中無(wú)法保證數(shù)據(jù)的正確性,交易過(guò)程極可能達(dá)不到交易方的要求。
None
一些系統(tǒng)不提供原子性。
鏡像
數(shù)據(jù)庫(kù)鏡像是DBMS根據(jù)DBA的要求,自動(dòng)把整個(gè)數(shù)據(jù)庫(kù)或其中的關(guān)鍵數(shù)據(jù)復(fù)制到另一個(gè)磁盤(pán)上,每當(dāng)主數(shù)據(jù)庫(kù)更新時(shí),DBMS會(huì)自動(dòng)把更新后的數(shù)據(jù)復(fù)制過(guò)去,即DBMS自動(dòng)保證鏡像數(shù)據(jù)與主數(shù)據(jù)的一致性。
鏡像分為同步和異步。
數(shù)據(jù)存儲(chǔ)
指的是數(shù)據(jù)的物理特性怎樣被存儲(chǔ)在數(shù)據(jù)庫(kù)中。
磁盤(pán) 數(shù)據(jù)被存儲(chǔ)在硬盤(pán)驅(qū)動(dòng)器里;
GFS或谷歌文件系統(tǒng)是一個(gè)由谷歌開(kāi)發(fā)的專(zhuān)有的分布式文件系統(tǒng);
Hadoop是Apache軟件框架,免費(fèi)許可下支持?jǐn)?shù)據(jù)密集型分布式應(yīng)用程序;
RAM隨機(jī)存儲(chǔ)器;
插件 可以添加外部插件;
Amazon S3通過(guò)Web服務(wù)接口提供存儲(chǔ);
BDB:BDB
全稱(chēng)是 “Berkeley DB”,它是MySQL具有事務(wù)能力的表類(lèi)型,由Sleepycat
Software開(kāi)發(fā)。BDB表類(lèi)型提供了MySQL用戶(hù)長(zhǎng)久期盼的功能,即事務(wù)控制能力。在任何RDBMS中,事務(wù)控制能力都是一種極其重要和寶貴的功
能。事務(wù)控制能力使得我們能夠確保一組命令確實(shí)已經(jīng)全部執(zhí)行成功,或者確保當(dāng)任何一個(gè)命令出現(xiàn)錯(cuò)誤時(shí)所有命令的執(zhí)行結(jié)果均被退回。
實(shí)現(xiàn)語(yǔ)言
實(shí)現(xiàn)語(yǔ)言會(huì)影響數(shù)據(jù)庫(kù)的發(fā)展速度。典型的NoSQL數(shù)據(jù)庫(kù)是用低級(jí)語(yǔ)言如C / C + +編寫(xiě)的。另一方面,那些更高層次的語(yǔ)言如Java,使自定義更容易。
實(shí)現(xiàn)語(yǔ)言有:C, C++, Erlang, Java, Python
特性
考慮下列哪一個(gè)特點(diǎn)對(duì)你的數(shù)據(jù)庫(kù)是最重要的:
持久性
可用性
一致性
分區(qū)容忍性
證書(shū)類(lèi)型
下面這些許可證是一個(gè)不同的開(kāi)放源碼許可的形式:
GPL:通用公共許可證
BSD:伯克利軟件分發(fā)
MPL:Mozilla公共許可證
EPL:Eclipse公共許可證
IDPL:最初的開(kāi)發(fā)者的公共許可證
LGPL:較寬松通用公共許可證
存儲(chǔ)類(lèi)型
存儲(chǔ)類(lèi)型是NoSQL數(shù)據(jù)庫(kù)最大的不同,是決定使用哪款數(shù)據(jù)庫(kù)的一個(gè)首要指標(biāo)。
關(guān)鍵字:支持get、put和刪除操作
按列存儲(chǔ):相對(duì)于傳統(tǒng)的按行存儲(chǔ),數(shù)據(jù)集成容易多了
面向文件系統(tǒng):存儲(chǔ)像是JSON或XML這樣的結(jié)構(gòu)化文件,很容易就能從面向?qū)ο筌浖蝎@取數(shù)據(jù)。
在大數(shù)據(jù)時(shí)代,“多種架構(gòu)支持多類(lèi)應(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)都不能完全滿(mǎn)足應(yīng)用場(chǎng)景對(duì)海量結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)管理、復(fù)雜分析、關(guān)聯(lián)查詢(xún)、實(shí)時(shí)性處理和控制建設(shè)成本等多方面的需要,因此不同架構(gòu)數(shù)據(jù)庫(kù)混合部署應(yīng)用成為滿(mǎn)足復(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)行介紹。
OldSQL+NewSQL 在數(shù)據(jù)中心類(lèi)應(yīng)用中混合部署
采用OldSQL+NewSQL模式構(gòu)建數(shù)據(jù)中心,在充分發(fā)揮OldSQL數(shù)據(jù)庫(kù)的事務(wù)處理能力的同時(shí),借助NewSQL在實(shí)時(shí)性、復(fù)雜分析、即席查詢(xún)等方面的獨(dú)特優(yōu)勢(shì),以及面對(duì)海量數(shù)據(jù)時(shí)較強(qiáng)的擴(kuò)展能力,滿(mǎn)足數(shù)據(jù)中心對(duì)當(dāng)前“熱”數(shù)據(jù)事務(wù)型處理和海量歷史“冷”數(shù)據(jù)分析兩方面的需求。OldSQL+NewSQL模式在數(shù)據(jù)中心類(lèi)應(yīng)用中的互補(bǔ)作用體現(xiàn)在,OldSQL彌補(bǔ)了NewSQL不適合事務(wù)處理的不足,NewSQL彌補(bǔ)了OldSQL在海量數(shù)據(jù)存儲(chǔ)能力和處理性能方面的缺陷。
商業(yè)銀行數(shù)據(jù)中心采用OldSQL+NewSQL混合部署方式搭建,OldSQL數(shù)據(jù)庫(kù)滿(mǎn)足各業(yè)務(wù)系統(tǒng)數(shù)據(jù)的歸檔備份和事務(wù)型應(yīng)用,NewSQL MPP數(shù)據(jù)庫(kù)集群對(duì)即席查詢(xún)、多維分析等應(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倍以上,即席查詢(xún)和統(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在A(yíng)CID特性和復(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)的查詢(xún)請(qǐng)求,平均響應(yīng)時(shí)間在28毫秒,足以滿(mǎn)足未來(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)分析、即席查詢(xún)、數(shù)據(jù)強(qiáng)一致性等都比互聯(lián)網(wǎng)大數(shù)據(jù)有更高的要求。行業(yè)大數(shù)據(jù)應(yīng)用場(chǎng)景主要是分析類(lèi)應(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)分析、即席查詢(xún)、數(shù)據(jù)強(qiáng)一致性等要求,以及對(duì)海量非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)和精確查詢(xún)的要求。在應(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查詢(xún)較少的低價(jià)值密度結(jié)構(gòu)化數(shù)據(jù)的工作。
當(dāng)前電信運(yùn)營(yíng)商在集中化BI系統(tǒng)建設(shè)過(guò)程中面臨著數(shù)據(jù)規(guī)模大、數(shù)據(jù)處理類(lèi)型多等問(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ù)雜分析、即席查詢(xún)等方面處理性能的優(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ù)類(lèi)型和處理方式的不同,將結(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查詢(xún)較少的數(shù)據(jù)保存在NoSQL數(shù)據(jù)庫(kù)或Hadoop平臺(tái);結(jié)構(gòu)化、需要關(guān)聯(lián)分析或經(jīng)常ad-hoc查詢(xún)的數(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ù)都不能完全滿(mǎn)足應(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ù)廠(chǎng)商所壟斷,達(dá)夢(mèng)、金倉(cāng)等國(guó)產(chǎn)廠(chǎng)商仍處于追趕狀態(tài);南大通用憑借國(guó)產(chǎn)新型數(shù)據(jù)庫(kù)GBase 8a異軍突起,與EMC的Greenplum和HP的Vertica躋身NewSQL市場(chǎng)三強(qiáng);NoSQL方面用戶(hù)則大多采用Hadoop開(kāi)源方案。
什么是NoSQL
大家有沒(méi)有聽(tīng)說(shuō)過(guò)“NoSQL”呢?近年,這個(gè)詞極受關(guān)注??吹健癗oSQL”這個(gè)詞,大家可能會(huì)誤以為是“No!SQL”的縮寫(xiě),并深感憤怒:“SQL怎么會(huì)沒(méi)有必要了呢?”但實(shí)際上,它是“Not Only SQL”的縮寫(xiě)。它的意義是:適用關(guān)系型數(shù)據(jù)庫(kù)的時(shí)候就使用關(guān)系型數(shù)據(jù)庫(kù),不適用的時(shí)候也沒(méi)有必要非使用關(guān)系型數(shù)據(jù)庫(kù)不可,可以考慮使用更加合適的數(shù)據(jù)存儲(chǔ)。
為彌補(bǔ)關(guān)系型數(shù)據(jù)庫(kù)的不足,各種各樣的NoSQL數(shù)據(jù)庫(kù)應(yīng)運(yùn)而生。
為了更好地了解本書(shū)所介紹的NoSQL數(shù)據(jù)庫(kù),對(duì)關(guān)系型數(shù)據(jù)庫(kù)的理解是必不可少的。那么,就讓我們先來(lái)看一看關(guān)系型數(shù)據(jù)庫(kù)的歷史、分類(lèi)和特征吧。
關(guān)系型數(shù)據(jù)庫(kù)簡(jiǎn)史
1969年,埃德加?6?1弗蘭克?6?1科德(Edgar Frank Codd)發(fā)表了劃時(shí)代的論文,首次提出了關(guān)系數(shù)據(jù)模型的概念。但可惜的是,刊登論文的《IBM Research Report》只是IBM公司的內(nèi)部刊物,因此論文反響平平。1970年,他再次在刊物《Communication of the ACM》上發(fā)表了題為“A Relational Model of Data for Large Shared Data banks”(大型共享數(shù)據(jù)庫(kù)的關(guān)系模型)的論文,終于引起了大家的關(guān)注。
科德所提出的關(guān)系數(shù)據(jù)模型的概念成為了現(xiàn)今關(guān)系型數(shù)據(jù)庫(kù)的基礎(chǔ)。當(dāng)時(shí)的關(guān)系型數(shù)據(jù)庫(kù)由于硬件性能低劣、處理速度過(guò)慢而遲遲沒(méi)有得到實(shí)際應(yīng)用。但之后隨著硬件性能的提升,加之使用簡(jiǎn)單、性能優(yōu)越等優(yōu)點(diǎn),關(guān)系型數(shù)據(jù)庫(kù)得到了廣泛的應(yīng)用。
通用性及高性能
雖然本書(shū)是講解NoSQL數(shù)據(jù)庫(kù)的,但有一個(gè)重要的大前提,請(qǐng)大家一定不要誤解。這個(gè)大前提就是“關(guān)系型數(shù)據(jù)庫(kù)的性能絕對(duì)不低,它具有非常好的通用性和非常高的性能”。毫無(wú)疑問(wèn),對(duì)于絕大多數(shù)的應(yīng)用來(lái)說(shuō)它都是最有效的解決方案。
突出的優(yōu)勢(shì)
關(guān)系型數(shù)據(jù)庫(kù)作為應(yīng)用廣泛的通用型數(shù)據(jù)庫(kù),它的突出優(yōu)勢(shì)主要有以下幾點(diǎn):
保持?jǐn)?shù)據(jù)的一致性(事務(wù)處理)
由于以標(biāo)準(zhǔn)化為前提,數(shù)據(jù)更新的開(kāi)銷(xiāo)很小(相同的字段基本上都只有一處)
可以進(jìn)行JOIN等復(fù)雜查詢(xún)
存在很多實(shí)際成果和專(zhuān)業(yè)技術(shù)信息(成熟的技術(shù))
這其中,能夠保持?jǐn)?shù)據(jù)的一致性是關(guān)系型數(shù)據(jù)庫(kù)的最大優(yōu)勢(shì)。在需要嚴(yán)格保證數(shù)據(jù)一致性和處理完整性的情況下,用關(guān)系型數(shù)據(jù)庫(kù)是肯定沒(méi)有錯(cuò)的。但是有些情況不需要JOIN,對(duì)上述關(guān)系型數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)也沒(méi)有什么特別需要,這時(shí)似乎也就沒(méi)有必要拘泥于關(guān)系型數(shù)據(jù)庫(kù)了。
關(guān)系型數(shù)據(jù)庫(kù)的不足
不擅長(zhǎng)的處理
就像之前提到的那樣,關(guān)系型數(shù)據(jù)庫(kù)的性能非常高。但是它畢竟是一個(gè)通用型的數(shù)據(jù)庫(kù),并不能完全適應(yīng)所有的用途。具體來(lái)說(shuō)它并不擅長(zhǎng)以下處理:
大量數(shù)據(jù)的寫(xiě)入處理
為有數(shù)據(jù)更新的表做索引或表結(jié)構(gòu)(schema)變更
字段不固定時(shí)應(yīng)用
對(duì)簡(jiǎn)單查詢(xún)需要快速返回結(jié)果的處理
。。。。。。
NoSQL數(shù)據(jù)庫(kù)
為了彌補(bǔ)關(guān)系型數(shù)據(jù)庫(kù)的不足(特別是最近幾年),NoSQL數(shù)據(jù)庫(kù)出現(xiàn)了。關(guān)系型數(shù)據(jù)庫(kù)應(yīng)用廣泛,能進(jìn)行事務(wù)處理和JOIN等復(fù)雜處理。相對(duì)地,NoSQL數(shù)據(jù)庫(kù)只應(yīng)用在特定領(lǐng)域,基本上不進(jìn)行復(fù)雜的處理,但它恰恰彌補(bǔ)了之前所列舉的關(guān)系型數(shù)據(jù)庫(kù)的不足之處。
易于數(shù)據(jù)的分散
如前所述,關(guān)系型數(shù)據(jù)庫(kù)并不擅長(zhǎng)大量數(shù)據(jù)的寫(xiě)入處理。原本關(guān)系型數(shù)據(jù)庫(kù)就是以JOIN為前提的,就是說(shuō),各個(gè)數(shù)據(jù)之間存在關(guān)聯(lián)是關(guān)系型數(shù)據(jù)庫(kù)得名的主要原因。為了進(jìn)行JOIN處理,關(guān)系型數(shù)據(jù)庫(kù)不得不把數(shù)據(jù)存儲(chǔ)在同一個(gè)服務(wù)器內(nèi),這不利于數(shù)據(jù)的分散。相反,NoSQL數(shù)據(jù)庫(kù)原本就不支持JOIN處理,各個(gè)數(shù)據(jù)都是獨(dú)立設(shè)計(jì)的,很容易把數(shù)據(jù)分散到多個(gè)服務(wù)器上。由于數(shù)據(jù)被分散到了多個(gè)服務(wù)器上,減少了每個(gè)服務(wù)器上的數(shù)據(jù)量,即使要進(jìn)行大量數(shù)據(jù)的寫(xiě)入操作,處理起來(lái)也更加容易。同理,數(shù)據(jù)的讀入操作當(dāng)然也同樣容易。
提升性能和增大規(guī)模
下面說(shuō)一點(diǎn)題外話(huà),如果想要使服務(wù)器能夠輕松地處理更大量的數(shù)據(jù),那么只有兩個(gè)選擇:一是提升性能,二是增大規(guī)模。下面我們來(lái)整理一下這兩者的不同。
首先,提升性能指的就是通過(guò)提升現(xiàn)行服務(wù)器自身的性能來(lái)提高處理能力。這是非常簡(jiǎn)單的方法,程序方面也不需要進(jìn)行變更,但需要一些費(fèi)用。若要購(gòu)買(mǎi)性能翻倍的服務(wù)器,需要花費(fèi)的資金往往不只是原來(lái)的2倍,可能需要多達(dá)5到10倍。這種方法雖然簡(jiǎn)單,但是成本較高。
另一方面,增大規(guī)模指的是使用多臺(tái)廉價(jià)的服務(wù)器來(lái)提高處理能力。它需要對(duì)程序進(jìn)行變更,但由于使用廉價(jià)的服務(wù)器,可以控制成本。另外,以后只要依葫蘆畫(huà)瓢增加廉價(jià)服務(wù)器的數(shù)量就可以了。
不對(duì)大量數(shù)據(jù)進(jìn)行處理的話(huà)就沒(méi)有使用的必要嗎?
NoSQL數(shù)據(jù)庫(kù)基本上來(lái)說(shuō)為了“使大量數(shù)據(jù)的寫(xiě)入處理更加容易(讓增加服務(wù)器數(shù)量更容易)”而設(shè)計(jì)的。但如果不是對(duì)大量數(shù)據(jù)進(jìn)行操作的話(huà),NoSQL數(shù)據(jù)庫(kù)的應(yīng)用就沒(méi)有意義嗎?
答案是否定的。的確,它在處理大量數(shù)據(jù)方面很有優(yōu)勢(shì)。但實(shí)際上NoSQL數(shù)據(jù)庫(kù)還有各種各樣的特點(diǎn),如果能夠恰當(dāng)?shù)乩眠@些特點(diǎn)將會(huì)是非常有幫助。具體的例子將會(huì)在第2章和第3章進(jìn)行介紹,這些用途將會(huì)讓你感受到利用NoSQL的好處。
希望順暢地對(duì)數(shù)據(jù)進(jìn)行緩存(Cache)處理
希望對(duì)數(shù)組類(lèi)型的數(shù)據(jù)進(jìn)行高速處理
希望進(jìn)行全部保存
多樣的NoSQL數(shù)據(jù)庫(kù)
NoSQL數(shù)據(jù)庫(kù)存在著“key-value存儲(chǔ)”、“文檔型數(shù)據(jù)庫(kù)”、“列存儲(chǔ)數(shù)據(jù)庫(kù)”等各種各樣的種類(lèi),每種數(shù)據(jù)庫(kù)又包含各自的特點(diǎn)。下一節(jié)讓我們一起來(lái)了解一下NoSQL數(shù)據(jù)庫(kù)的種類(lèi)和特點(diǎn)。
NoSQL數(shù)據(jù)庫(kù)是什么
NoSQL說(shuō)起來(lái)簡(jiǎn)單,但實(shí)際上到底有多少種呢?我在提筆的時(shí)候,到NoSQL的官方網(wǎng)站上確認(rèn)了一下,竟然已經(jīng)有122種了。另外官方網(wǎng)站上也介紹了本書(shū)沒(méi)有涉及到的圖形數(shù)據(jù)庫(kù)和對(duì)象數(shù)據(jù)庫(kù)等各個(gè)類(lèi)別。不知不覺(jué)間,原來(lái)已經(jīng)出現(xiàn)了這么多的NoSQL數(shù)據(jù)庫(kù)啊。
本節(jié)將為大家介紹具有代表性的NoSQL數(shù)據(jù)庫(kù)。
key-value存儲(chǔ)
這是最常見(jiàn)的NoSQL數(shù)據(jù)庫(kù),它的數(shù)據(jù)是以key-value的形式存儲(chǔ)的。雖然它的處理速度非常快,但是基本上只能通過(guò)key的完全一致查詢(xún)獲取數(shù)據(jù)。根據(jù)數(shù)據(jù)的保存方式可以分為臨時(shí)性、永久性和兩者兼具三種。
臨時(shí)性
memcached屬于這種類(lèi)型。所謂臨時(shí)性就是 “數(shù)據(jù)有可能丟失”的意思。memcached把所有數(shù)據(jù)都保存在內(nèi)存中,這樣保存和讀取的速度非???,但是當(dāng)memcached停止的時(shí)候,數(shù)據(jù)就不存在了。由于數(shù)據(jù)保存在內(nèi)存中,所以無(wú)法操作超出內(nèi)存容量的數(shù)據(jù)(舊數(shù)據(jù)會(huì)丟失)。
在內(nèi)存中保存數(shù)據(jù)
可以進(jìn)行非??焖俚谋4婧妥x取處理
數(shù)據(jù)有可能丟失
永久性
Tokyo Tyrant、Flare、ROMA等屬于這種類(lèi)型。和臨時(shí)性相反,所謂永久性就是“數(shù)據(jù)不會(huì)丟失”的意思。這里的key-value存儲(chǔ)不像memcached那樣在內(nèi)存中保存數(shù)據(jù),而是把數(shù)據(jù)保存在硬盤(pán)上。與memcached在內(nèi)存中處理數(shù)據(jù)比起來(lái),由于必然要發(fā)生對(duì)硬盤(pán)的IO操作,所以性能上還是有差距的。但數(shù)據(jù)不會(huì)丟失是它最大的優(yōu)勢(shì)。
在硬盤(pán)上保存數(shù)據(jù)
可以進(jìn)行非??焖俚谋4婧妥x取處理(但無(wú)法與memcached相比)
數(shù)據(jù)不會(huì)丟失
兩者兼具
Redis屬于這種類(lèi)型。Redis有些特殊,臨時(shí)性和永久性兼具,且集合了臨時(shí)性key-value存儲(chǔ)和永久性key-value存儲(chǔ)的優(yōu)點(diǎn)。Redis首先把數(shù)據(jù)保存到內(nèi)存中,在滿(mǎn)足特定條件(默認(rèn)是15分鐘一次以上,5分鐘內(nèi)10個(gè)以上,1分鐘內(nèi)10000個(gè)以上的key發(fā)生變更)的時(shí)候?qū)?shù)據(jù)寫(xiě)入到硬盤(pán)中。這樣既確保了內(nèi)存中數(shù)據(jù)的處理速度,又可以通過(guò)寫(xiě)入硬盤(pán)來(lái)保證數(shù)據(jù)的永久性。這種類(lèi)型的數(shù)據(jù)庫(kù)特別適合于處理數(shù)組類(lèi)型的數(shù)據(jù)。
同時(shí)在內(nèi)存和硬盤(pán)上保存數(shù)據(jù)
可以進(jìn)行非??焖俚谋4婧妥x取處理
保存在硬盤(pán)上的數(shù)據(jù)不會(huì)消失(可以恢復(fù))
適合于處理數(shù)組類(lèi)型的數(shù)據(jù)
面向文檔的數(shù)據(jù)庫(kù)
MongoDB、CouchDB屬于這種類(lèi)型。它們屬于NoSQL數(shù)據(jù)庫(kù),但與key-value存儲(chǔ)相異。
不定義表結(jié)構(gòu)
面向文檔的數(shù)據(jù)庫(kù)具有以下特征:即使不定義表結(jié)構(gòu),也可以像定義了表結(jié)構(gòu)一樣使用。關(guān)系型數(shù)據(jù)庫(kù)在變更表結(jié)構(gòu)時(shí)比較費(fèi)事,而且為了保持一致性還需修改程序。然而NoSQL數(shù)據(jù)庫(kù)則可省去這些麻煩(通常程序都是正確的),確實(shí)是方便快捷。
可以使用復(fù)雜的查詢(xún)條件
跟key-value存儲(chǔ)不同的是,面向文檔的數(shù)據(jù)庫(kù)可以通過(guò)復(fù)雜的查詢(xún)條件來(lái)獲取數(shù)據(jù)。雖然不具備事務(wù)處理和JOIN這些關(guān)系型數(shù)據(jù)庫(kù)所具有的處理能力,但除此以外的其他處理基本上都能實(shí)現(xiàn)。這是非常容易使用的NoSQL數(shù)據(jù)庫(kù)。
不需要定義表結(jié)構(gòu)
可以利用復(fù)雜的查詢(xún)條件
面向列的數(shù)據(jù)庫(kù)
Cassandra、Hbase、HyperTable屬于這種類(lèi)型。由于近年來(lái)數(shù)據(jù)量出現(xiàn)爆發(fā)性增長(zhǎng),這種類(lèi)型的NoSQL數(shù)據(jù)庫(kù)尤其引人注目。
面向行的數(shù)據(jù)庫(kù)和面向列的數(shù)據(jù)庫(kù)
普通的關(guān)系型數(shù)據(jù)庫(kù)都是以行為單位來(lái)存儲(chǔ)數(shù)據(jù)的,擅長(zhǎng)進(jìn)行以行為單位的讀入處理,比如特定條件數(shù)據(jù)的獲取。因此,關(guān)系型數(shù)據(jù)庫(kù)也被稱(chēng)為面向行的數(shù)據(jù)庫(kù)。相反,面向列的數(shù)據(jù)庫(kù)是以列為單位來(lái)存儲(chǔ)數(shù)據(jù)的,擅長(zhǎng)以列為單位讀入數(shù)據(jù)。
高擴(kuò)展性
面向列的數(shù)據(jù)庫(kù)具有高擴(kuò)展性,即使數(shù)據(jù)增加也不會(huì)降低相應(yīng)的處理速度(特別是寫(xiě)入速度),所以它主要應(yīng)用于需要處理大量數(shù)據(jù)的情況。另外,利用面向列的數(shù)據(jù)庫(kù)的優(yōu)勢(shì),把它作為批處理程序的存儲(chǔ)器來(lái)對(duì)大量數(shù)據(jù)進(jìn)行更新也是非常有用的。但由于面向列的數(shù)據(jù)庫(kù)跟現(xiàn)行數(shù)據(jù)庫(kù)存儲(chǔ)的思維方式有很大不同,應(yīng)用起來(lái)十分困難。
高擴(kuò)展性(特別是寫(xiě)入處理)
應(yīng)用十分困難
最近,像Twitter和Facebook這樣需要對(duì)大量數(shù)據(jù)進(jìn)行更新和查詢(xún)的網(wǎng)絡(luò)服務(wù)不斷增加,面向列的數(shù)據(jù)庫(kù)的優(yōu)勢(shì)對(duì)其中一些服務(wù)是非常有用的,但是由于這與本書(shū)所要介紹的內(nèi)容關(guān)系不大,就不進(jìn)行詳細(xì)介紹了。
總結(jié):
NoSQL并不是No-SQL,而是指Not Only SQL。
NoSQL的出現(xiàn)是為了彌補(bǔ)SQL數(shù)據(jù)庫(kù)因?yàn)槭聞?wù)等機(jī)制帶來(lái)的對(duì)海量數(shù)據(jù)、高并發(fā)請(qǐng)求的處理的性能上的欠缺。
NoSQL不是為了替代SQL而出現(xiàn)的,它是一種替補(bǔ)方案,而不是解決方案的首選。
絕大多數(shù)的NoSQL產(chǎn)品都是基于大內(nèi)存和高性能隨機(jī)讀寫(xiě)的(比如具有更高性能的固態(tài)硬盤(pán)陣列),一般的小型企業(yè)在選擇NoSQL時(shí)一定要慎重!不要為了NoSQL而NoSQL,可能會(huì)導(dǎo)致花了冤枉錢(qián)又耽擱了項(xiàng)目進(jìn)程。
NoSQL不是萬(wàn)能的,但在大型項(xiàng)目中,你往往需要它!
隨著大數(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)物可能還想買(mǎi)什么,愛(à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ù)格式。現(xiàn)今流行的流式計(jì)算引擎有Spark Streaming和Flink。
5. 內(nèi)存數(shù)據(jù)結(jié)構(gòu)
通過(guò)在分布式計(jì)算機(jī)系統(tǒng)中動(dòng)態(tài)隨機(jī)訪(fǎng)問(wèn)內(nèi)存(DRAM)、閃存或SSD上分布數(shù)據(jù),提供低延遲的訪(fǎng)問(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è)客戶(hù)用戶(hù)視圖。
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)品。
關(guān)系數(shù)據(jù)庫(kù)經(jīng)過(guò)幾十年的發(fā)展,已經(jīng)非常成熟,但同時(shí)也存在不足:
表結(jié)構(gòu)是強(qiáng)約束的,業(yè)務(wù)變更時(shí)擴(kuò)充很麻煩。
如果對(duì)大數(shù)據(jù)量的表進(jìn)行統(tǒng)計(jì)運(yùn)算,I/O會(huì)很高,因?yàn)榧词怪会槍?duì)某列進(jìn)行運(yùn)算,也需要將整行數(shù)據(jù)讀入內(nèi)存。
全文搜索只能使用 Like 進(jìn)行整表掃描,性能非常低。
針對(duì)這些不足,產(chǎn)生了不同的 NoSQL 解決方案,在某些場(chǎng)景下比關(guān)系數(shù)據(jù)庫(kù)更有優(yōu)勢(shì),但同時(shí)也犧牲了某些特性,所以不能片面的迷信某種方案,應(yīng)將其作為 SQL 的有利補(bǔ)充。
NoSQL != No SQL,而是:
NoSQL = Not Only SQL
典型的 NoSQL 方案分為4類(lèi):
Redis 是典型,其 value 是具體的數(shù)據(jù)結(jié)構(gòu),包括 string, hash, list, set, sorted set, bitmap, hyperloglog,常被稱(chēng)為數(shù)據(jù)結(jié)構(gòu)服務(wù)器。
以 list 為例:
LPOP key 是移除并返回隊(duì)列左邊的第一個(gè)元素。
如果用關(guān)系數(shù)據(jù)庫(kù)就比較麻煩了,需要操作:
Redis 的缺點(diǎn)主要體現(xiàn)在不支持完成的ACID事務(wù),只能保證隔離性和一致性,無(wú)法保證原子性和持久性。
最大的特點(diǎn)是 no-schema,無(wú)需在使用前定義字段,讀取一個(gè)不存在的字段也不會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤。
特點(diǎn):
以電商為例,不同商品的屬性差異很大,如冰箱和電腦,這種差異性在關(guān)系數(shù)據(jù)庫(kù)中會(huì)有很大的麻煩,而使用文檔數(shù)據(jù)庫(kù)則非常方便。
文檔數(shù)據(jù)庫(kù)的主要缺點(diǎn):
關(guān)系數(shù)據(jù)庫(kù)是按行來(lái)存儲(chǔ)的,列式數(shù)據(jù)庫(kù)是按照列來(lái)存儲(chǔ)數(shù)據(jù)。
按行存儲(chǔ)的優(yōu)勢(shì):
在某些場(chǎng)景下,這些優(yōu)勢(shì)就成為劣勢(shì)了,例如,計(jì)算超重人員的數(shù)據(jù),只需要讀取體重這一列進(jìn)行統(tǒng)計(jì)即可,但行式存儲(chǔ)會(huì)將整行數(shù)據(jù)讀取到內(nèi)存中,很浪費(fèi)。
而列式存儲(chǔ)中,只需要讀取體重這列的數(shù)據(jù)即可,I/O 將大大減少。
除了節(jié)省I/O,列式存儲(chǔ)還有更高的壓縮比,可以節(jié)省存儲(chǔ)空間。普通行式數(shù)據(jù)庫(kù)的壓縮比在 3:1 到 5:1 左右,列式數(shù)據(jù)庫(kù)在 8:1 到 30:1,因?yàn)閱蝹€(gè)列的數(shù)據(jù)相似度更高。
列式存儲(chǔ)的隨機(jī)寫(xiě)效率遠(yuǎn)低于行式存儲(chǔ),因?yàn)樾惺酱鎯?chǔ)時(shí)同一行多個(gè)列都存儲(chǔ)在連續(xù)空間中,而列式存儲(chǔ)將不同列存儲(chǔ)在不連續(xù)的空間。
一般將列式存儲(chǔ)應(yīng)用在離線(xiàn)大數(shù)據(jù)分析統(tǒng)計(jì)場(chǎng)景,因?yàn)檫@時(shí)主要針對(duì)部分列進(jìn)行操作,而且數(shù)據(jù)寫(xiě)入后無(wú)須更新。
關(guān)系數(shù)據(jù)庫(kù)通過(guò)索引進(jìn)行快速查詢(xún),但在全文搜索的情景下,索引就不夠了,因?yàn)椋?/p>
假設(shè)有一個(gè)交友網(wǎng)站,信息表如下:
需要匹配性別、地點(diǎn)、語(yǔ)言列。
需要匹配性別、地點(diǎn)、愛(ài)好列。
實(shí)際搜索中,各種排列組合非常多,關(guān)系數(shù)據(jù)庫(kù)很難支持。
全文搜索引擎是使用 倒排索引 技術(shù),建立單詞到文檔的索引,例如上面的表信息建立倒排索引:
所以特別適合根據(jù)關(guān)鍵詞來(lái)查詢(xún)文檔內(nèi)容。
上面介紹了幾種典型的NoSQL方案,及各自的適用場(chǎng)景和特點(diǎn),您可以根據(jù)實(shí)際需求進(jìn)行選擇。
標(biāo)題名稱(chēng):什么是NoSQL技術(shù)介紹,nosql概念
本文鏈接:http://www.sd-ha.com/article20/dscojco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、做網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、服務(wù)器托管、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)