数据库 ES
2024-03-24 21:22:21 0 举报
AI智能生成
数据库 ES
作者其他创作
大纲/内容
Elasticsearch 全称叫全文搜索引擎,简称 ES,一个分布式可扩展的实时搜索和分析引擎,一个建立在搜索引擎 Apache Lucene™ 基础上的搜索引擎。
使用 Java 编写的,它的内部使用 Lucene 做索引与搜索。
Lucene 就是一个 Jar 包,里面包含了各种建立倒排索引的方法。
原理
一个分布式的实时文档存储,每个字段可以被索引与搜索。
一个分布式实时分析搜索引擎。
能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据。
作用
支持 Http 和 Tcp 两种协议去访问,不过目前 Tcp 只支持 Java。Http 和 Tcp 端口默认9200,如果是 Java 应用建议是 Tcp 方式访问 ES,性能更好。
Client(客户端)
ES 天生就是集群方式,哪怕只有一个节点。
一个集群有一个唯一的名字标志,默认为“elasticsearch”。
集群名称非常重要,具体相同集群名的节点才会组成一个集群,集群名称可以在配置文件中指定。
Cluster(集群)
EsMaster 负责存放 Elasticsearch 的元数据。
ES元数据包括(身份元数据、索引元数据、文档元数据、路由元数据以及其他类型的元数据),管理集群节点状态。
EsMaster(Master 节点)
Node 节点:存储集群的数据,参与集群的索引和搜索功能。
同一个集群内节点的名字不能重复,ES会自动分配,也可以在配置文件中指定。通常在一个节点上分配一个或者多个分片。
EsNode(Node 节点)
分片,就是把索引的数据做水平切分,类似于mysql的分区。
在一个多分片的索引中写入数据时,通过路由来确定具体写入那一个分片中,所以在创建索引时需要指定分片的数量,并且分片的数量一旦确定就不能更改。
分片还有可以有副本,解决当某个节点宕机后不影响索引正常访问。分片数据量可按照每个分片<30G设置,默认5个分片。
Shards(分片)
副本,是指对主分片的备份。主分片和备份分片都可以对外提供查询服务,写操作时先在主分片上完成,然后分发到备份上。
当主分片不可用时,会在备份的分片中选举出一个作为主分片,所以备份不仅可以提升系统的高可用性能,还可以提升搜索时的并发性能。
副本数不宜太多,会增加数据写入负担,副本数要 <= 集群节点数 - 1。
Replicas(副本)
索引: 一个索引是一个文档的集合。每个索引有唯一的名字,通过这个名字来操作它。
Index 可以理解为 RDBMS 里的数据库,也可理解一张表,要看我们怎么使用。
Index(索引-数据库/表)
类型,指索引内部的逻辑分区,通过Type的名字在索引内进行唯一标识。
在查询时如果没有该值,则表示在整个索引中查询。可以理解为表。
在 ES6.x 中一个 Index 只能有一个 Type,在 ES7.x 后就取消了 Type,逐渐减少 Type 是为了提高查询效率。
Type(类型-表)
文档,索引中的每一条数据叫作一个文档。
ES 中一个可以被检索的基本单位,每一 Document 都有一个唯一的 ID 作为区分,以 Json 格式来表示。
Document(文档-行)
好比关系型数据库中列的概念,一个 Document 有一个或者多个 Field 组成。
Field(字段-列)
类似于关系型数据库中的表结构信息,用于定义索引中字段(Field)的存储类型、分词方式、是否存储等信息。
ES 中的 Mapping 是可以动态识别的,根据插入的数据自动识别字段类型。
一个索引的 Mapping 一旦创建,若已经存储了数据,就不可修改了。
可以创建索引 Mapping 模板,只要索引名字匹配了就会按照该 Mapping 插入数据。
Mapping(映射-表结构)
Green(绿色):所有的主分片和副本分片都正常运行。
Yellow(黄色):所有的主分片都正常运行,但不是所有的副本分片都正常运行。
Red(红色):有主分片没能正常运行。
Status(集群状态)
ES数据架构的主要概念与关系数据库Mysql对比表。
组件
字符串按照一定规则分成多个独立的词元(token)。
Elasticsearch 内置的分词器对中文不友好,会把中文分成单个字来进行全文检索,不能达到想要的结果 。其中IK分词器对中文很好,一般都使用它。
分词
也可以称反向索引,倒排索引是搜索引擎到核心。
记录所有文档的单词,一般都比较大。
记录单词到倒排列表的关联信息(文档ID)。
单词词典(Term Dictionary)
记录了单词对应的文档集合,由倒排索引项(Posting)组成。
单词词典的实现一般是 B+Tree。
文档ID,用于获取原始信息。
位置(Position),记录单词在文档中的分词位置(多个),用于做词语搜索(Phrase Query)。
偏移(Offset),记录单词在文档的开始和结束位置,用于做高亮显示。
倒排索引项组成
倒排列表(Posting List)
组成
倒排索引
核心技术
天生分片和集群,从 ES 出生开始就天然的支持分布式的特征,且无需第三方组件,自带。
天生索引,ES 所有数据都是默认进行索引的,这点和 MySQL 正好相反,ES 只有不加索引才需要说明。
支持PB级海量数据实时全文搜索。
支持多语言访问,支持 TCP 和 RESTFUL API两种方式访问。
优点
不适合做复杂聚合,会影响ES集群性能。
不支持高并发写入数据。
ES 耗 CPU 和内存资源,需要用高配置的机器来搭建集群,使用成本比较高。
缺点
数据库 ES
0 条评论
回复 删除
下一页