首页 > 其他 > 详细

Elasticsearch的数据组织

时间:2019-08-21 23:31:23      阅读:103      评论:0      收藏:0      [点我收藏+]

数据组织主要从以下二方面着手

  逻辑设计:文档、类型、索引

  物理设计:节点、分片

       倒排索引

前言

逻辑设计:我们把elasticsearch与关系型数据库做个客观对比

Relational DB Elasticsearch
数据库(database) 索引(indices)
表(tables) 类型(types)
行(rows) 文档(documents)
字段(columns) 字段(fields)

 

 

 

 

 

 

elasticsearch(集群)中可以包含多个索引(数据库),每个索引可以包含多个类型(表),每个类型可以包含多个文档(行),每个文档可以包含多个字段(列)。

注意:在之前版本中每个文档存储在一个索引中,并分配多个映射类型,映射类型用来表示被索引的文档或者实体的类型,这也带来一个问题(),导致后来版本6.0.0中一个文档只能包含一个映射类型,7.0.0中映射类型被弃用,到8.0.0中完全被删除。

逻辑设计:文档、类型、索引

文档属性

  elasticsearch是面向文档操作,也就是最小单位就是文档

  自我包含:一篇文档同时包含字段和对应的值 key:vaule形式

  可以是层次型的:一个文档中包含自文档

  灵活的结构:在关系型数据库中都要预先设计表才能对其操作,而elasticsearch中,有时候可以忽略某个字段或者动态的去添加一个字段(但是这样可能导致脏数据的出现,我们可以预定字段,之后不再改变字段)

  无模式:字段对应值得类型可以是不限类型的

类型

  文档的逻辑容器,就像关系型数据库一样,表格是行的容器

  类型中对于字段的定义称为映射,比如name映射为字符串类型

索引

  索引是映射类型的容器,索引是非常大的文档集合,它们都存在各个分片上

物理设计:节点和分片

节点

  一个集群至少包含一个节点,而一个节点就是一个elasticsearch进程。节点内可以有多个索引。

  默认的,如果你创建一个索引,那么这个索引将会有5个分片(primary shard,又称主分片)构成,而每个分片又有一个副本(replica shard,又称复制分片),这样,就有了10个分片。

技术分享图片

上图我们可以看到是一个有3个节点的集群,可以看到主分片和对应的复制分片都不会在同一个节点内,这样有利于某个节点挂掉了,数据也不至于丢失。

一个分片是一个Lucene索引,一个包含倒排索引的文件目录,倒排索引的结构使得elasticsearch在不扫描全部文档的情况下,就能告诉你哪些文档包含特定的关键字。

倒排索引

elasticsearch使用的是一种称为倒排索引的结构,采用Lucene倒排索作为底层。这种结构适用于快速的全文搜索,一个索引由文档中所有不重复的列表构成,对于每一个词,都有一个包含它的文档列表。

1 Study every day, good good up to forever        # 文档1包含的内容
2 To forever, study every day, good good up       # 文档2包含的内容
term doc_1 doc_2
Study ×
To ×
every
forever
day
study ×
good
every
to ×
up

 

 

 

 

 

 

 

 

 

 

 

 

 

 

若我们搜索 to forever包含每个词条的文档

term doc_1 doc_2
to ×
forever
total 2 1

 

 

 

 

 

 

elasticsearch的索引和Lucene的索引对比

  elasticsearch将索引被分为多个分片,每份分片是一个Lucene的索引。所以一个elasticsearch索引是由多个Lucene索引组成的。

了解更多: 倒排索引 | 倒排索引原理和实现

 

Elasticsearch的数据组织

原文:https://www.cnblogs.com/Alexephor/p/11387172.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!