MySQL與Elasticsearch對比
MySQL | Elasticsearch | 說明 |
---|---|---|
Table | Index | 索引(index),就是文檔的集合,類似數(shù)據(jù)庫的表(table) |
Row | Document | 文檔(Document),就是一條條的數(shù)據(jù),類似數(shù)據(jù)庫中的行(Row),文檔都是JSON格式 |
Column | Field | 字段(Field),就是JSON文檔中的字段,類似數(shù)據(jù)庫中的列(Column) |
Schema | Mapping | Mapping(映射)是索引中文檔的約束,例如字段類型約束。類似數(shù)據(jù)庫的表結(jié)構(gòu)(Schema) |
SQL | DSL | DSL是elasticsearch提供的JSON風(fēng)格的請求語句,用來操作elasticsearch,實現(xiàn)CRUD |
如果我們用了Elasticsearch,還需MySQL嗎?
根據(jù)需要選型,兩者各自有自己的擅長之處:
Mysql:擅長事務(wù)類型操作,可以確保數(shù)據(jù)的安全和一致性
Elasticsearch:擅長海量數(shù)據(jù)的搜索、分析、計算
因此在企業(yè)中,往往是兩者結(jié)合使用:
- 對安全性要求較高的寫操作,使用MySQL實現(xiàn)
- 對查詢性能要求較高的搜索需求,使用Elasticsearch實現(xiàn)
- 兩者再基于某種方式,實現(xiàn)數(shù)據(jù)的同步,保證一致性
ES與MySQL配合使用
基本概念
索引
- 索引(index)是Elasticsearch對邏輯數(shù)據(jù)的邏輯存儲,可以分為更小的部分??梢园阉饕闯申P(guān)系型數(shù)據(jù)庫的表,索引的結(jié)構(gòu)是為快速有效的全文索引準(zhǔn)備的,特別是它不存儲原始值。
- Elasticsearch可以把索引存放在一臺機器或者分散在多臺服務(wù)器上,每個索引有一或多個分片(shard),每個分片可以有多個副本(replica)。
文檔
- 存儲在Elasticsearch中的主要實體叫文檔(document)。用關(guān)系型數(shù)據(jù)庫來類比的話,一個文檔相當(dāng)于數(shù)據(jù)庫表中的一行記錄。
- Elasticsearch和MongoDB中的文檔類似,都可以有不同的結(jié)構(gòu),但Elasticsearch的文檔中,相同字段必須有相同類型。
- 文檔由多個字段組成,每個字段可能多次出現(xiàn)在一個文檔里,這樣的字段叫多值字段(multivalued)。
- 每個字段的類型,可以是文本、數(shù)值、日期等。字段類型也可以是復(fù)雜類型,一個字段包含其他子文檔或者數(shù)組。
映射
- 所有文檔寫進(jìn)索引之前都會先進(jìn)行分析,如何將輸入的文本分割為詞條、哪些詞條又會被過濾,這種行為叫做映射(mapping)。一般由用戶自己定義規(guī)則。
- 文檔類型在Elasticsearch中,一個索引對象可以存儲很多不同用途的對象。例如,一個博客應(yīng)用程序可以保存文章和評論。
- 每個文檔可以有不同的結(jié)構(gòu)。不同的文檔類型不能為相同的屬性設(shè)置不同的類型。例如,在同一索引中的所有文檔類型中,一個叫title的字段必須具有相同的類型。