Elasticsearch(ES)
相較于MongoDB和redis,晚一年發(fā)布的ES可能知名度要低一些,但是ES在搜索引擎領(lǐng)域的名聲絕對(duì)是是響當(dāng)當(dāng)?shù)摹?/p>
課程推薦→:《elasticsearch全文搜索實(shí)戰(zhàn)》(實(shí)戰(zhàn)視頻)來(lái)自課程《千萬(wàn)級(jí)數(shù)據(jù)并發(fā)解決方案(理論+實(shí)戰(zhàn))》
相較于其他高大上的數(shù)據(jù)庫(kù)產(chǎn)品,ES的出身要屌絲很多。
ES的創(chuàng)建者Shay Banon曾經(jīng)是一個(gè)失業(yè)的屌絲程序員,在無(wú)事可干的時(shí)候?yàn)榱朔奖憷掀潘阉魇匙V而創(chuàng)建了ES(當(dāng)然,當(dāng)時(shí)還不叫ES)。不料無(wú)心插柳柳成蔭,成就了今天最熱門(mén)的搜索引擎數(shù)據(jù)庫(kù),果然妹子才是程序員工作的最大動(dòng)力啊!
ES也專(zhuān)門(mén)成立了自己的Elastic公司已經(jīng)獲得數(shù)億美金融資,當(dāng)年的屌絲程序員Shay Banon也早已逆襲成為CEO并走上人生巔峰。諸位程序員看官讀完這個(gè)故事是不是也已經(jīng)開(kāi)始內(nèi)心澎湃的想象自己出任CEO迎娶白富美那一天了?
ES的特點(diǎn),正如其名,那就是搜索。嚴(yán)格的說(shuō),ES不是一個(gè)數(shù)據(jù)庫(kù),而是一個(gè)搜索引擎,ES的方方面面也都是圍繞搜索設(shè)計(jì)的。
ES支持全文搜索,這里簡(jiǎn)單解釋下什么是全文搜索:對(duì)于“我在北京的一家互聯(lián)網(wǎng)公司工作”這樣的數(shù)據(jù),如果你搜索“北京”、“互聯(lián)網(wǎng)”、“工作”這些關(guān)鍵詞都能命中這條數(shù)據(jù)的話(huà),這就是全文搜索,你每天都在用的百度、Google都屬于全文搜索。
值得一提的是,ES的全文搜索對(duì)中文也有很好的支持(單是中文分詞器就有很多種),絕對(duì)能夠滿(mǎn)足國(guó)內(nèi)大多數(shù)人的全文搜索需求。
除了搜索之外,ES還會(huì)自動(dòng)的替你對(duì)所有字段建立索引,以實(shí)現(xiàn)高性能的復(fù)雜聚合查詢(xún),因此只要是存入ES的數(shù)據(jù),無(wú)論再?gòu)?fù)雜的聚合查詢(xún)也可以得到不錯(cuò)的性能,而且你再也不用為如何建立各種復(fù)雜索引而頭痛了。
Redis
Redis是現(xiàn)在最熱門(mén)的key-value數(shù)據(jù)庫(kù)。它與MongoDB同在2009年發(fā)布,也同樣是早期大數(shù)據(jù)時(shí)代的數(shù)據(jù)庫(kù)代表作。
Redis的最大特點(diǎn)當(dāng)然就是key-value存儲(chǔ)所帶來(lái)的簡(jiǎn)單和高性能了。(推薦學(xué)習(xí):Redis視頻教程)
所謂key-value存儲(chǔ),就是每一條記錄只包含一個(gè)用于查詢(xún)數(shù)據(jù)的Key,以及與之對(duì)應(yīng)的存儲(chǔ)數(shù)據(jù)的value,就如同現(xiàn)實(shí)生活中的門(mén)牌號(hào)與住戶(hù),而沒(méi)有諸如表、字段這些常規(guī)數(shù)據(jù)庫(kù)中必需有的復(fù)雜概念,所有的查詢(xún)都僅僅依賴(lài)于key值。
因此,key-value數(shù)據(jù)庫(kù)可謂是數(shù)據(jù)庫(kù)中數(shù)據(jù)結(jié)構(gòu)最簡(jiǎn)單的一種,也得益于這種簡(jiǎn)單的結(jié)構(gòu),再加上Redis會(huì)把所有數(shù)據(jù)加載到內(nèi)存中的,Redis能得到遠(yuǎn)高于MongoDB這類(lèi)常規(guī)數(shù)據(jù)庫(kù)的讀寫(xiě)性能。
當(dāng)然,Redis的功能還不止key-value存儲(chǔ)這么簡(jiǎn)單,相較它的key-value前輩Memcached,Redis還支持?jǐn)?shù)據(jù)持久化,list、set等多種數(shù)據(jù)結(jié)構(gòu),主從復(fù)制備份等一些列功能,因此Redis絕對(duì)稱(chēng)得上是key-value數(shù)據(jù)庫(kù)中功能最全面、最簡(jiǎn)單易用的款。
Redis的key-valule存儲(chǔ)帶來(lái)了性能這個(gè)優(yōu)勢(shì),但是也給復(fù)雜查詢(xún)帶來(lái)了很多局限。由于閹割掉了數(shù)據(jù)表、字段這樣的重要特性,且所有的查詢(xún)都依賴(lài)key,因此Redis無(wú)法提供常規(guī)數(shù)據(jù)庫(kù)所具備的多列查詢(xún)、區(qū)段查詢(xún)等復(fù)雜查詢(xún)功能。同時(shí),由于Redis需要把數(shù)據(jù)存在內(nèi)存中,這也大大限制了Redis可存儲(chǔ)的數(shù)據(jù)量,這也決定了Redis難以用在數(shù)據(jù)規(guī)模很大的應(yīng)用場(chǎng)景中。
區(qū)別
如果你對(duì)數(shù)據(jù)的讀寫(xiě)要求極高,并且你的數(shù)據(jù)規(guī)模不大,也不需要長(zhǎng)期存儲(chǔ),選redis;
如果你需要構(gòu)造一個(gè)搜索引擎或者你想搞一個(gè)看著高大上的數(shù)據(jù)可視化平臺(tái),并且你的數(shù)據(jù)有一定的分析價(jià)值或者你的老板是土豪,選ElasticSearch;
更多Redis相關(guān)技術(shù)文章,請(qǐng)?jiān)L問(wèn)Redis視頻教程欄目進(jìn)行學(xué)習(xí)!