編程隨筆-ElasticSearch知識導圖(1):全景

1. 由ElasticSearch開始的思考

  官方介紹Elasticsearch(以下簡稱ES)是一個基於Apache Lucene(TM)的開源搜索引擎。但我最初瞭解ES卻是從NoSQL數據庫開始,在使用、研究了ES一段時間後,我發現這是一個優秀的分佈式部署軟件,不僅是一個全文搜索引擎、還是一個分佈式存儲系統、一個分佈式數據庫。
  在ES之前我們習慣使用關係數據庫(RDBMS)來進行現實數據世界的建模,將現實世界中的領域模式表示爲實體-關係模型(E-R模型)。但現實世界的領域本體(Ontology)是如此複雜,領域對象中的關係不止是關聯關係,可能還有父子(從屬)關係,依賴關係等一些更復雜的關係。在軟件世界中,我們一直在苦苦探索如何有效表達現實世界領域本體的軟件模型,對象數據庫一直是數據庫界希冀用來表達領域模型的利器,但時至今日,仍缺乏具有口碑的產品。
  十幾年前,我還在攻讀計算機科學博士學位,研究領域本體的知識表達與軟件建模。那時XML和RDF(Resource Description Framework, 資源描述框架)是流行的領域本體表達形式,因而也催生了XML數據庫,XML柔性查詢(或半柔性查詢)之類的技術與一些不太成熟的產品。當時感覺最需要的就是一個能夠存儲,快速檢索領域知識的數據庫,但主流的關係數據庫產品在這方面存在一些天然的缺陷。
  ES是我使用過的NoSQL數據庫產品中被認爲最適合用於領域本體建模的系統(如內置父子關係的映射),同時也是學習分佈式軟件架構的最好示例系統。

2. 知識導圖全景

  ES的知識點衆多,發展到今天,已經release到7.0版本。從6.0版本開始,ES在數據模型上做了一個重大變化:基於查詢和存儲效率考慮,ES在index中刪除了type的概念,即在一個index中只有一個type,而在6.0之前的版本,一個index中允許創建多個type。
  ES的生態也在逐漸發展,ES與Logstash及Kibana構成應用棧,可輕鬆構建一個採集大數據,多維度分析大數據的數據倉庫系統。
  在這裏,我把ES中一些主要的知識點以導圖的形式(還會不斷完善)展現出來,如圖1所示。
圖1
  圖1中的知識點簡單描述如下:

  • 分佈式構架:ES採用典型的主/從(master/slave)分佈式架構。ES集羣中只有一個主節點(node,最小的可用主節點數目可設置),主從節點通過選舉機制產生。在ES中,一個index可使用多個分片(shard)來存貯,分片同樣使用主/從方式,主從分片在讀寫數據的權限不同。
  • 映射(mapping):如同XML使用XML Schema作爲元數據來描述XML數據對象的框架一樣,ES中的映射本質是描述index中數據對象的元數據,它定義了數據對象的結構、格式已經各個字段(field)對應的數據類型。ES中的映射可以在創建index時自行創建,也可以由系統實現動態映射。
  • 集羣數據管理:對於ES中的數據對象:index和document(在ES中,將一個使用JSON對象表示的數據對象稱爲一個文檔),ES提供訪問接口實現對index和document的增刪改查操作(支持批量操作)。對於集羣中的其它元數據,ES也提供訪問接口對集羣,節點進行操作。
  • 搜索(search):全文搜索時ES的核心功能,ES提供了專用於查詢的DSL(Domain Specified Language,領域專用語言),也提供了基於URL的簡易搜索形式。在搜索的同時ES也提供聚合(Aggregation)和排序對數據進行處理。
  • SQL訪問:ES提供了xpack插件形式的SQL訪問形式,用戶可以使用Rest API訪問接口使用SQL語言像使用關係數據庫一樣對數據進行查詢。

    3. 參考文獻

    1. https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
    2. Clinton Gormley &Zachary Tong, Elasticsearch: The Definitive Guide,2015
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章