ITPub博客

首页 > 大数据 > ELK > ES数据库架构

ES数据库架构

ELK 作者:mcxiaoracle 时间:2022-06-26 00:43:23 0 删除 编辑

  数据可以分为结构化数据和非结构化数据,比如说我们常用的sql语句就都是操作结构化数据,邮件等信息都是非结构化数据;

    对于结构化数据的查询可以使用sql语句进行查询,速度较快;


    对于非结构化数据的查询可以把非结构化数据变成结构化数据:先根据空格进行字符串拆分,得到一个基础的单词列表。需要去掉标点符号、转换大小写、去除停用词、重复的单词只记录一次,就得到了一个最终的单词列表。然后基于单词列表创建一个索引。查询时直接查询索引,找到关键词后根据关键词和文档的对应关系,找到文档列表。这个过程就是全文检索的过程。

全文检索技术有:

    Lucene:使用该技术需要对Lucene的API和底层架构非常了解,而且需要编写大量的JAVA代码

    Solr:使用JAVA实现一个web应用,可以使用rest方式的http请求,进程远程API调用

    ElasticSearch(ES):可以使用rest方式的http请求,进行远程API调用

ElasticSearch是一款开源的高扩展分布式全文检索引擎。其是使用JAVA开发并使用Lucene作为核心来实现所有索引和搜索功能的。

    ES与Lucene对比:ES通过简单的Restful API来隐藏Lucene的复杂性,从而让全文检索变得简单。

    ES与Solr对比:Solr是通过ZK进行分布式管理的,而ES自身带的有分布式协调管理功能;Solr支持更多格式的数据,ES只支持Json格式的数据;Solr在传统搜索应用中表现好于ES,但是在处理实时搜索应用时效率明显低于ES,因为Solr创建索引时,会产生IO阻塞。

  ES不仅仅是存储,还会索引整个文档的内容让其可以进行搜索,在ES中,可以对文档进行索引、搜索、排序、过滤等操作。

  ES的概念有索引index、类型type、文档document、字段field和映射mapping

1、索引index

    索引可以看作是MySQL中的数据库,一套数据可以使用一套索引。

    一个索引由一个名字来标识,名字必须全部是小写字母,当我们对这个索引中文档进行索引、搜索、更新和删除的时候,都需要使用这个名字。

2、类型type

    类型类似与MySQL中的表,在一个索引中可以创建多个type。这个在es7及以后已经被废弃,只有_doc。

3、文档document

    文档类似MySQL中的一条数据,存储的是具体的数据,存储格式为Json

4、字段field

    相当于MySQL中的字段。

  5、映射mapping

    mapping对处理数据方式和规则做的一些限制,如某个字段的数据类型、默认值、分析器、是否被索引等






   ES的架构总体如上图所示,从下到上分为网关、搜索引擎、四大组件、自动发现、通信和Restful API



1、Gateway网关

    其作用是用来对数据进行持久化以及ES重启后重新恢复数据。

    es支持多种类型的gateway,有本地文件系统、分布式文件系统、Hadoop的HDFS等。

    其存储的信息包括索引信息、集群信息、mapping等




 2、districted lucene directory搜索引擎

    Gateway上层就是Lucene的分布式检索框架。

    ES是分布式的搜索引擎,虽然底层用的是Lucene,但是需要在每个节点上都运行Lucene进行相应的索引、查询、更新等操作,所以需要做成一个分布式的运行框架来满足业务需要。




 3、四大组件模块

    districted lucene directory之上就是ES的四大模块。

    Index Model:索引模块,对数据建立索引(通常是建立倒排索引)

    Seacher Model:搜索模块,就是对数据进行查询搜索

    Mapping Model:是数据映射与解析模块,数据的每个字段可以根据建立的表结构通过mapping进行映射解析;如果没有建立表结构,那么ES会根据数据类型来推测数据结构,并自动生成一个mapping,然后根据mapping进行解析

    River Model:在es2.0之后被取消了,表示可以使用插件处理。例如可以通过一些自定义脚本将传统数据库的数据实时同步到es中。

  4、自动发现Discovery Script

    es集群中各个节点通过discovery相互发现的,默认使用的是Zen。es是一个基于p2p的系统,他先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。

    es还可以支持多种script脚本语言,例如mvel、js、python等。



5、通信(Transport)

    代表es内部节点或集群与客户的交互方式,默认内部使用tcp协议进行交互,同时其还支持http协议,thrift、servlet、memcached、zeroMQ等通信协议。

    节点间通信端口默认9300-9400

  6、Restful接口

    最上层就是ES暴漏给我们的访问接口。





其中VERB是请求方式(post、get....),PROTOCOL是协议(http、https......),HOST和PORT是es的ip和端口,PATH是API的终端路径,QUERY_STRING表示任何可选的查询字符串参数(例如@pertty将格式化的输出JSON格式),BODY是一个Json格式的请求体。




{

    "settings":{

        "index":{

            "number_of_shards":"5",

            "number_of_replicas":"1"

        }

    },

    "mappings":{

        "_doc":{

            "properties":{

                "orderId":{

                    "type":"long",

                    "store":true,

                    "index":true

                },

                "orderName":{

                    "type":"text",

                    "store":true,

                    "index":true,

                    "analyzer":"standard"

                },

                "content":{

                    "type":"text",

                    "store":true,

                    "index":true,

                    "analyzer":"standard"

                }

            }

        }

    }

}





五、IK分词器和ElasticScher集成使用




  访问IK分词器查看分词效果:post  ip:9200/_analyze,里面只需要传入analyzer和text,其中text为测试分词的文本,analyzer在IK分词器中有ik_smart和ik_max_word两种,分别是最少切分和最细力度切分。



推荐阅读:

https://www.cnblogs.com/liconglong/p/15010606.html

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69949806/viewspace-2902826/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: ETL脚本的实现
请登录后发表评论 登录
全部评论
数据方向,了解oracle ,IBM DB2 730

注册时间:2019-09-30

  • 博文量
    286
  • 访问量
    226568