{eval=Array;=+count(Array);}

国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

問(wèn)答專欄Q & A COLUMN

elasticsearch(lucene)可以代替NoSQL(mongodb)嗎?

RaoMengRaoMeng 回答0 收藏1
問(wèn)題描述:最近做一個(gè)信息抓取的項(xiàng)目:“需求很簡(jiǎn)單,就是把信息取回來(lái),存在數(shù)據(jù)庫(kù)里,可以搜索“,一開始先用mongodb,但是mongodb的搜索太弱了,就打算用elasticsearch(基于lucene的)做搜索??赡芪覞u漸產(chǎn)生一個(gè)疑惑:為什么要用mongodb,可不可以用elasticsearch代替?elasticsearch在數(shù)據(jù)的安全性、備份、導(dǎo)出到SQL數(shù)據(jù)庫(kù)等方面怎么樣?
收藏問(wèn)題

5條回答

Jacendfeng

Jacendfeng

回答于2022-06-28 15:45

首先需要明確一點(diǎn)的是,ElasticSearch和MongoDB是不同的技術(shù)選型,兩者定位不同,是不能混為一談和相互替代的。

ElasticSearch是企業(yè)級(jí)搜索引擎

ElasticSearch是用Java語(yǔ)言基于Lucene開發(fā)的分布式搜索服務(wù)器,對(duì)外提供RESTful API,而且慢慢演變成了數(shù)據(jù)分析和可視化系統(tǒng)(如:ELK)。

ES可以當(dāng)成是一種特殊的NoSQL。

  • 優(yōu)點(diǎn):查詢性能高、高效分詞、支持各類復(fù)雜檢索、支持海量數(shù)據(jù)存儲(chǔ);

  • 缺點(diǎn):數(shù)據(jù)寫入性能差、缺乏權(quán)限機(jī)制、mapping一旦確定就不好變更(索引重建很麻煩)、field是可以動(dòng)態(tài)添加的不利于數(shù)據(jù)規(guī)范。

MongoDB是一款NoSQL數(shù)據(jù)庫(kù)

MongoDB是用C++開發(fā)的一款NoSQL數(shù)據(jù)庫(kù)(面向文檔的數(shù)據(jù)庫(kù),BSON格式存儲(chǔ)),雖然支持搜索功能,但是索引性能和精確度遠(yuǎn)不如ElasticSearch。

  • 優(yōu)點(diǎn):數(shù)據(jù)寫入性能優(yōu)于ElasticSearch(但比不上Redis)、數(shù)據(jù)約束性強(qiáng)、完善的權(quán)限機(jī)制;

  • 缺點(diǎn):只適合數(shù)據(jù)存儲(chǔ)、雖有全文檢索但一個(gè)集合只能創(chuàng)建一個(gè)全文索引

兩者通常搭配使用

在實(shí)際項(xiàng)目中,我們通常是將ElasticSearch和MongoDB搭配使用的。MongoDB可作為持久化數(shù)據(jù)存儲(chǔ)倉(cāng)庫(kù),而ElasticSearch作復(fù)雜檢索工作。千萬(wàn)不要把ES當(dāng)數(shù)據(jù)庫(kù)來(lái)使用,因?yàn)镋S數(shù)據(jù)結(jié)構(gòu)是不嚴(yán)謹(jǐn)?shù)?,一旦涉及索引重建?shù)據(jù)全部會(huì)丟失,另外也導(dǎo)出不了SQL。

以上就是我的觀點(diǎn),對(duì)于這個(gè)問(wèn)題大家是怎么看待的呢?歡迎在下方評(píng)論區(qū)交流 ~ 我是科技領(lǐng)域創(chuàng)作者,十年互聯(lián)網(wǎng)從業(yè)經(jīng)驗(yàn),歡迎關(guān)注我了解更多科技知識(shí)!
評(píng)論0 贊同0
  •  加載中...
XUI

XUI

回答于2022-06-28 15:45

一.ElasticSearch介紹

ElasticSearch 是一個(gè)分布式、高擴(kuò)展、高實(shí)時(shí)的搜索與數(shù)據(jù)分析引擎。它能很方便的使大量數(shù)據(jù)具有搜索、分析和探索的能力。充分利用ElasticSearch的水平伸縮性,能使數(shù)據(jù)在生產(chǎn)環(huán)境變得更有價(jià)值。ElasticSearch 的實(shí)現(xiàn)原理主要分為以下幾個(gè)步驟,首先用戶將數(shù)據(jù)提交到Elastic Search 數(shù)據(jù)庫(kù)中,再通過(guò)分詞控制器去將對(duì)應(yīng)的語(yǔ)句分詞,將其權(quán)重和分詞結(jié)果一并存入數(shù)據(jù),當(dāng)用戶搜索數(shù)據(jù)時(shí)候,再根據(jù)權(quán)重將結(jié)果排名,打分,再將返回結(jié)果呈現(xiàn)給用戶。

Elasticsearch可以用于搜索各種文檔。它提供可擴(kuò)展的搜索,具有接近實(shí)時(shí)的搜索,并支持多租戶?!盓lasticsearch是分布式的,這意味著索引可以被分成分片,每個(gè)分片可以有0個(gè)或多個(gè)副本。每個(gè)節(jié)點(diǎn)托管一個(gè)或多個(gè)分片,并充當(dāng)協(xié)調(diào)器將操作委托給正確的分片。再平衡和路由是自動(dòng)完成的?!跋嚓P(guān)數(shù)據(jù)通常存儲(chǔ)在同一個(gè)索引中,該索引由一個(gè)或多個(gè)主分片和零個(gè)或多個(gè)復(fù)制分片組成。一旦創(chuàng)建了索引,就不能更改主分片的數(shù)量。

Elasticsearch是一個(gè)開源的高擴(kuò)展的分布式全文檢索引擎,它可以近乎實(shí)時(shí)的存儲(chǔ)、檢索數(shù)據(jù);本身擴(kuò)展性很好,可以擴(kuò)展到上百臺(tái)服務(wù)器,處理PB級(jí)別的數(shù)據(jù)。

Elasticsearch也使用Java開發(fā)并使用Lucene作為其核心來(lái)實(shí)現(xiàn)所有索引和搜索的功能,但是它的目的是通過(guò)簡(jiǎn)單的RESTful API來(lái)隱藏Lucene的復(fù)雜性,從而讓全文搜索變得簡(jiǎn)單。

Elasticsearch基本概念

1)全文搜索(Full-text Search)

全文檢索是指計(jì)算機(jī)索引程序通過(guò)掃描文章中的每一個(gè)詞,對(duì)每一個(gè)詞建立一個(gè)索引,指明該詞在文章中出現(xiàn)的次數(shù)和位置,當(dāng)用戶查詢時(shí),檢索程序就根據(jù)事先建立的索引進(jìn)行查找,并將查找的結(jié)果反饋給用戶的檢索方式。

2)倒排索引(Inverted Index)

該索引表中的每一項(xiàng)都包括一個(gè)屬性值和具有該屬性值的各記錄的地址。由于不是由記錄來(lái)確定屬性值,而是由屬性值來(lái)確定記錄的位置,因而稱為倒排索引(inverted index)。Elasticsearch能夠?qū)崿F(xiàn)快速、高效的搜索功能,正是基于倒排索引原理。

3)節(jié)點(diǎn) & 集群(Node & Cluster)

Elasticsearch 本質(zhì)上是一個(gè)分布式數(shù)據(jù)庫(kù),允許多臺(tái)服務(wù)器協(xié)同工作,每臺(tái)服務(wù)器可以運(yùn)行多個(gè)Elasticsearch實(shí)例。單個(gè)Elasticsearch實(shí)例稱為一個(gè)節(jié)點(diǎn)(Node),一組節(jié)點(diǎn)構(gòu)成一個(gè)集群(Cluster)。

4)索引(Index)

Elasticsearch 數(shù)據(jù)管理的頂層單位就叫做 Index(索引),相當(dāng)于關(guān)系型數(shù)據(jù)庫(kù)里的數(shù)據(jù)庫(kù)的概念。另外,每個(gè)Index的名字必須是小寫。

5)文檔(Document)

Index里面單條的記錄稱為 Document(文檔)。許多條 Document 構(gòu)成了一個(gè) Index。Document 使用 JSON 格式表示。同一個(gè) Index 里面的 Document,不要求有相同的結(jié)構(gòu)(scheme),但是最好保持相同,這樣有利于提高搜索效率。

6)類型(Type)

Document 可以分組,比如employee這個(gè) Index 里面,可以按部門分組,也可以按職級(jí)分組。這種分組就叫做 Type,它是虛擬的邏輯分組,用來(lái)過(guò)濾 Document,類似關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù)表。

不同的 Type 應(yīng)該有相似的結(jié)構(gòu)(Schema),性質(zhì)完全不同的數(shù)據(jù)(比如 products 和 logs)應(yīng)該存成兩個(gè) Index,而不是一個(gè) Index 里面的兩個(gè) Type(雖然可以做到)。

7)文檔元數(shù)據(jù)(Document metadata)

文檔元數(shù)據(jù)為_index, _type, _id, 這三者可以唯一表示一個(gè)文檔,_index表示文檔在哪存放,_type表示文檔的對(duì)象類別,_id為文檔的唯一標(biāo)識(shí)。

8)字段(Fields)

每個(gè)Document都類似一個(gè)JSON結(jié)構(gòu),它包含了許多字段,每個(gè)字段都有其對(duì)應(yīng)的值,多個(gè)字段組成了一個(gè) Document,可以類比關(guān)系型數(shù)據(jù)庫(kù)數(shù)據(jù)表中的字段。

二.MongoDB介紹

MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)。由C++語(yǔ)言編寫。旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。

MongoDB是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的。它支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似JSON的BSON格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。Mongo最大的特點(diǎn)是它支持的查詢語(yǔ)言非常強(qiáng)大,其語(yǔ)法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z(yǔ)言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫(kù)單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。

MongoDB基本概念

數(shù)據(jù)庫(kù)

一個(gè)MongoDB中可以建立多個(gè)數(shù)據(jù)庫(kù)。

MongoDB的默認(rèn)數(shù)據(jù)庫(kù)為"db",該數(shù)據(jù)庫(kù)存儲(chǔ)在data目錄中。

MongoDB的單個(gè)實(shí)例可以容納多個(gè)獨(dú)立的數(shù)據(jù)庫(kù),每一個(gè)都有自己的集合和權(quán)限,不同的數(shù)據(jù)庫(kù)也放置在不同的文件中。

文檔

文檔是一組鍵值(key-value)對(duì)(即BSON)。MongoDB 的文檔不需要設(shè)置相同的字段,并且相同的字段不需要相同的數(shù)據(jù)類型,這與關(guān)系型數(shù)據(jù)庫(kù)有很大的區(qū)別,也是 MongoDB 非常突出的特點(diǎn)。比如說(shuō){“username”}

需要注意的是:

  • 文檔中的鍵/值對(duì)是有序的。

  • 文檔中的值不僅可以是在雙引號(hào)里面的字符串,還可以是其他幾種數(shù)據(jù)類型(甚至可以是整個(gè)嵌入的文檔)。

  • MongoDB區(qū)分類型和大小寫。

  • MongoDB的文檔不能有重復(fù)的鍵。

  • 文檔的鍵是字符串。除了少數(shù)例外情況,鍵可以使用任意UTF-8字符。

文檔鍵命名規(guī)范:

  • 鍵不能含有