99久久国产露脸精品麻豆,欧美日韩精品小说,亚洲免费在线美女视频,国产三级中文字幕,91极品国产情侣高潮对白,国产亚洲一区二区三区不卡片,欧美jizz精品欧美性,久久国产精品久久国产片

Elasticsearch 存儲結(jié)構(gòu)

袁志蒙 2186次瀏覽

摘要:本文從使用角度介紹Elasticsearch的數(shù)據(jù)模型,而不是分析Elasticsearch底層的存儲結(jié)構(gòu),教程的目的是幫助大家快速上手ES,我們要使用ES得先...

本文從使用角度介紹Elasticsearch的數(shù)據(jù)模型,而不是分析Elasticsearch底層的存儲結(jié)構(gòu),教程的目的是幫助大家快速上手ES,我們要使用ES得先知道ES是怎么存儲數(shù)據(jù)的,結(jié)構(gòu)是怎么樣的。

我們都知道MYSQL的數(shù)據(jù)模型由數(shù)據(jù)庫、表、字段、字段類型組成,自然ES也有自己的一套存儲結(jié)構(gòu),下面先介紹ES存儲相關(guān)的概念,然后跟MYSQL做一下對比方便大家理解。

MYSQL 是關(guān)系數(shù)據(jù)庫,Elasticsearch是NOSQL類型的數(shù)據(jù)庫,雖然他們都是數(shù)據(jù)庫,但是他們定位不一樣,也不是同一類型的數(shù)據(jù)庫,拿來做對比,是因為一方面大家對MYSQL比較熟悉,另外從使用角度ES的存儲結(jié)構(gòu)跟MYSQL比較相似。

1. 基本概念

1.1. index(索引)

在Elasticsearch中索引(index)類似mysql的表,代表文檔數(shù)據(jù)的集合,文檔指的是ES中存儲的一條數(shù)據(jù)。

1.2. type(文檔類型)

在新版的Elasticsearch中,已經(jīng)不使用文檔類型了,在Elasticsearch老的版本中文檔類型,代表一類文檔的集合,index(索引)類似mysql的數(shù)據(jù)庫、文檔類型類似Mysql的表。

既然新的版本文檔類型沒什么作用了,那么index(索引)就類似mysql的表的概念,ES沒有數(shù)據(jù)庫的概念了。

提示:在Elasticsearch7.0以后的版本,已經(jīng)廢棄文檔類型了,如果大家不是接手老的項目,可以不必理會文檔類型,可以直接將index(索引)類比Mysql的表。

1.3. Document(文檔)

Elasticsearch是面向文檔的數(shù)據(jù)庫,文檔是最基本的存儲單元,文檔類似mysql表中的一行數(shù)據(jù)。

簡單的說在ES中,文檔指的就是一條JSON數(shù)據(jù)。

Elasticsearch中文檔使用json格式存儲,因此存儲上比Mysql要靈活的多,Elasticsearch支持任意格式的json數(shù)據(jù)。


例如:

一個訂單數(shù)據(jù),我們可以將復(fù)雜的Json結(jié)構(gòu)保存到Elasticsearch中, mysql的就無法這樣存儲數(shù)據(jù)。

{
	"id": 12,
	"status": 1,
	"total_price": 100,
	"create_time": "2019-12-12 12:20:22",
	"user" : { // 嵌套json對象
		"id" : 11,
		"username": "yzmcms",
		"phone": "18801108888",
		"address" : "北京市海淀區(qū)"
	}
}

文檔中的任何json字段都可以作為查詢條件。

文檔的json格式?jīng)]有嚴(yán)格限制,可以隨意增加、減少字段,甚至每一個文檔的格式都不一樣也可以。

在同一個索引存中,存儲格式完全不一樣的文檔數(shù)據(jù),舉個例子:

{"id":1, "username":"yzmcms"}
{"id":1, "title":"yzmcms內(nèi)容管理系統(tǒng)", "tag":"開源cms"}
{"domain":"www.yzmcms.com", "https": true}


雖然文檔的格式?jīng)]有限制,可以隨便存儲任意格式數(shù)據(jù),但是,實際業(yè)務(wù)中不會這么干,通常一個索引只會存儲格式相同的數(shù)據(jù),例如:訂單索引,只會保存訂單數(shù)據(jù),不會保存商品數(shù)據(jù),否則你會被自己搞死,自己都不知道里面存的是什么數(shù)據(jù)。

1.4. Field(文檔字段)

文檔由多個json字段(Field)組成, 這里的字段類似mysql中表的字段。

當(dāng)然Elasticsearch中字段也有類型的,下面是常用的字段類型:

數(shù)值類型(包括: long、integer、short、byte、double、float)

text - 支持全文搜索

keyword - 不支持全文搜索,例如:email、電話這些數(shù)據(jù),作為一個整體進(jìn)行匹配就可以,不需要分詞處理。

date - 日期類型

boolean 后面的章節(jié)會專門介紹字段類型,Elasticsearch支持的字段類型遠(yuǎn)比這里介紹的多。


提示:Elasticsearch支持動態(tài)映射,我們可以不必預(yù)先定義文檔的json結(jié)構(gòu)和對應(yīng)的字段類型,Elasticsearch會自動推斷字段的類型。

1.5. mapping (映射)

Elasticsearch的mapping (映射)類似mysql中的表結(jié)構(gòu)定義,每個索引都有一個映射規(guī)則,我們可以通過定義索引的映射規(guī)則,提前定義好文檔的json結(jié)構(gòu)和字段類型,如果沒有定義索引的映射規(guī)則,Elasticsearch會在寫入數(shù)據(jù)的時候,根據(jù)我們寫入的數(shù)據(jù)字段推測出對應(yīng)的字段類型,相當(dāng)于自動定義索引的映射規(guī)則。

提示:雖然Elasticsearch的自動映射功能很方便,但是實際業(yè)務(wù)中,對于關(guān)鍵的字段類型,通常預(yù)先定義好,避免Elasticsearch自動生成的字段類型不是你想要的類型,例如: ES默認(rèn)將字符串類型數(shù)據(jù)自動定義為text類型,但是關(guān)于手機號,我們希望是keyword類型,這個時候就需要通過mapping預(yù)先定義號對應(yīng)的字段類型了。

2. 類比MYSQL存儲結(jié)構(gòu)

Elasticsearch存儲結(jié)構(gòu) ---	MYSQL存儲結(jié)構(gòu)
index(索引)	----- 表
文檔  ----	一行數(shù)據(jù)
Field(字段) ----	表字段
mapping (映射)  ----	表結(jié)構(gòu)定義


隨機內(nèi)容

表情

共0條評論
  • 這篇文章還沒有收到評論,趕緊來搶沙發(fā)吧~