1. 由ElasticSearch開始的思考
??官方介紹Elasticsearch(以下簡稱ES)是一個(gè)基于Apache Lucene(TM)的開源搜索引擎。但我最初了解ES卻是從NoSQL數(shù)據(jù)庫開始,在使用、研究了ES一段時(shí)間后,我發(fā)現(xiàn)這是一個(gè)優(yōu)秀的分布式部署軟件,不僅是一個(gè)全文搜索引擎、還是一個(gè)分布式存儲(chǔ)系統(tǒng)、一個(gè)分布式數(shù)據(jù)庫。
??在ES之前我們習(xí)慣使用關(guān)系數(shù)據(jù)庫(RDBMS)來進(jìn)行現(xiàn)實(shí)數(shù)據(jù)世界的建模,將現(xiàn)實(shí)世界中的領(lǐng)域模式表示為實(shí)體-關(guān)系模型(E-R模型)。但現(xiàn)實(shí)世界的領(lǐng)域本體(Ontology)是如此復(fù)雜,領(lǐng)域?qū)ο笾械年P(guān)系不止是關(guān)聯(lián)關(guān)系,可能還有父子(從屬)關(guān)系,依賴關(guān)系等一些更復(fù)雜的關(guān)系。在軟件世界中,我們一直在苦苦探索如何有效表達(dá)現(xiàn)實(shí)世界領(lǐng)域本體的軟件模型,對(duì)象數(shù)據(jù)庫一直是數(shù)據(jù)庫界希冀用來表達(dá)領(lǐng)域模型的利器,但時(shí)至今日,仍缺乏具有口碑的產(chǎn)品。
??十幾年前,我還在攻讀計(jì)算機(jī)科學(xué)博士學(xué)位,研究領(lǐng)域本體的知識(shí)表達(dá)與軟件建模。那時(shí)XML和RDF(Resource Description Framework, 資源描述框架)是流行的領(lǐng)域本體表達(dá)形式,因而也催生了XML數(shù)據(jù)庫,XML柔性查詢(或半柔性查詢)之類的技術(shù)與一些不太成熟的產(chǎn)品。當(dāng)時(shí)感覺最需要的就是一個(gè)能夠存儲(chǔ),快速檢索領(lǐng)域知識(shí)的數(shù)據(jù)庫,但主流的關(guān)系數(shù)據(jù)庫產(chǎn)品在這方面存在一些天然的缺陷。
??ES是我使用過的NoSQL數(shù)據(jù)庫產(chǎn)品中被認(rèn)為最適合用于領(lǐng)域本體建模的系統(tǒng)(如內(nèi)置父子關(guān)系的映射),同時(shí)也是學(xué)習(xí)分布式軟件架構(gòu)的最好示例系統(tǒng)。
2. 知識(shí)導(dǎo)圖全景
??ES的知識(shí)點(diǎn)眾多,發(fā)展到今天,已經(jīng)release到7.0版本。從6.0版本開始,ES在數(shù)據(jù)模型上做了一個(gè)重大變化:基于查詢和存儲(chǔ)效率考慮,ES在index中刪除了type的概念,即在一個(gè)index中只有一個(gè)type,而在6.0之前的版本,一個(gè)index中允許創(chuàng)建多個(gè)type。
??ES的生態(tài)也在逐漸發(fā)展,ES與Logstash及Kibana構(gòu)成應(yīng)用棧,可輕松構(gòu)建一個(gè)采集大數(shù)據(jù),多維度分析大數(shù)據(jù)的數(shù)據(jù)倉庫系統(tǒng)。
??在這里,我把ES中一些主要的知識(shí)點(diǎn)以導(dǎo)圖的形式(還會(huì)不斷完善)展現(xiàn)出來,如圖1所示。
??圖1中的知識(shí)點(diǎn)簡單描述如下:
- ? 分布式構(gòu)架:ES采用典型的主/從(master/slave)分布式架構(gòu)。ES集群中只有一個(gè)主節(jié)點(diǎn)(node,最小的可用主節(jié)點(diǎn)數(shù)目可設(shè)置),主從節(jié)點(diǎn)通過選舉機(jī)制產(chǎn)生。在ES中,一個(gè)index可使用多個(gè)分片(shard)來存貯,分片同樣使用主/從方式,主從分片在讀寫數(shù)據(jù)的權(quán)限不同。
- ?映射(mapping):如同XML使用XML Schema作為元數(shù)據(jù)來描述XML數(shù)據(jù)對(duì)象的框架一樣,ES中的映射本質(zhì)是描述index中數(shù)據(jù)對(duì)象的元數(shù)據(jù),它定義了數(shù)據(jù)對(duì)象的結(jié)構(gòu)、格式已經(jīng)各個(gè)字段(field)對(duì)應(yīng)的數(shù)據(jù)類型。ES中的映射可以在創(chuàng)建index時(shí)自行創(chuàng)建,也可以由系統(tǒng)實(shí)現(xiàn)動(dòng)態(tài)映射。
- ?集群數(shù)據(jù)管理:對(duì)于ES中的數(shù)據(jù)對(duì)象:index和document(在ES中,將一個(gè)使用JSON對(duì)象表示的數(shù)據(jù)對(duì)象稱為一個(gè)文檔),ES提供訪問接口實(shí)現(xiàn)對(duì)index和document的增刪改查操作(支持批量操作)。對(duì)于集群中的其它元數(shù)據(jù),ES也提供訪問接口對(duì)集群,節(jié)點(diǎn)進(jìn)行操作。
- ? 搜索(search):全文搜索時(shí)ES的核心功能,ES提供了專用于查詢的DSL(Domain Specified Language,領(lǐng)域?qū)S谜Z言),也提供了基于URL的簡易搜索形式。在搜索的同時(shí)ES也提供聚合(Aggregation)和排序?qū)?shù)據(jù)進(jìn)行處理。
- ?SQL訪問:ES提供了xpack插件形式的SQL訪問形式,用戶可以使用Rest API訪問接口使用SQL語言像使用關(guān)系數(shù)據(jù)庫一樣對(duì)數(shù)據(jù)進(jìn)行查詢。
3. 參考文獻(xiàn)
- https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
- Clinton Gormley &Zachary Tong, Elasticsearch: The Definitive Guide,2015
本系列文章:
編程隨筆-ElasticSearch知識(shí)導(dǎo)圖(1):全景
編程隨筆-ElasticSearch知識(shí)導(dǎo)圖(2):分布式架構(gòu)
編程隨筆-ElasticSearch知識(shí)導(dǎo)圖(3):映射
編程隨筆-ElasticSearch知識(shí)導(dǎo)圖(4):搜索
編程隨筆-ElasticSearch知識(shí)導(dǎo)圖(5):聚合
編程隨筆-ElasticSearch知識(shí)導(dǎo)圖(6):管理