ES在MySQL、PHP中的使用-php教程

资源魔 38 0

ES简介

一个高扩大、开源的全文检索以及剖析引擎,它能够准及时地疾速存储、搜寻、剖析海量的数据。
全文检索是指较量争论机索引顺序经过扫描文章中的每个词,对每个词建设一个索引,指明该词正在文章中呈现的次数以及地位,当用户查问时,检索顺序就依据事前建设的索引进行查找,并将查找的后果反馈给用户的检索形式。这个进程相似于经过字典中的检索字表查字的进程。全文搜寻搜寻引擎数据库中的数据

ES 为何比 mysql 快

Mysql 只有 term dictionary 这一层,是以 b-tree 排序的形式存储正在磁盘上的。检索一个 term 需求若干次的 random access 的磁盘操作。而 Lucene 正在 term dictionary 的根底上增加了 term index 来减速检索,term index 以树的方式缓存正在内存中。从 term index 查到对应的 term dictionary 的 block 地位之后,再去磁盘上找 term,年夜年夜缩小了磁盘的 random access 次数。另外:term index 正在内存中是以 FST(finite state transducers)的方式保留的,其特性长短常节流内存。Term dictionary 正在磁盘上是以分 block 的形式保留的,一个 block 外部行使公共前缀紧缩,比方都是 Ab 扫尾的单词就能够把 Ab 省去。这样 term dictionary 能够比 b-tree 更节约磁盘空间。

同步数据库

咱们采取 MySQL 的数据存储,行使 MySQL 的事务特点保护数据分歧性,应用 ElasticSearch 进行数据会集以及查问,此时 es 与数据库的同步计划就尤其首要。

流程

起首增加商品入数据库,增加商品胜利后,商品入 ES,若入 ES 失败,将失败的商品 ID 放入 redis 的缓存行列步队,且失败的商品 ID 入 log 文件(若呈现 redis 挂掉,可从日记中取异样商品 ID 而后再入 ES),task 义务每一秒刷新一下 redis 缓存行列步队,若是从缓存行列步队中取到商品 ID,则依据商品 ID 从数据库中猎取商品数据而后入 ES。

应用

logstash-input-jdbc 插件同步数据库,装置,设置装备摆设:创立一个 .conf 文件,设置装备摆设了要同步的数据库以及.sql 用于执行的 sql 语句,最初把一个 jdbc 驱动放到这个文件夹下,用来衔接 mysql 数据库

【相干学习保举:mysql教程

可能遇到的成绩

elasticsearch 数据反复和增量同步

正在默许设置装备摆设下,tracking_column 这个值是 @timestamp,存正在 elasticsearch 就是_id 值,是 logstash 存入 elasticsearch 的工夫,这个值的次要作用相似 mysql 的主键,是惟一的,然而咱们的工夫戳实际上是不断正在变的,以是咱们每一次应用 select 语句查问的数据城市存入 elasticsearch 中,招致数据反复。

处理办法

正在要查问的表中,找主键或许自增值的字段,将它设置为_id 的值,由于_id 值是惟一的,以是,当有反复的_id 的时分,数据就没有会反复

数据同步频仍,影响 mysql 数据库功能

咱们写入 jdbc.sql 文件的 mysql 语句是写死的,以是每一次查问的数据库有不少是曾经没有需求去查问的,尤为是每一次 select * from table; 的时分,对 mysql 数据库造成为了十分年夜的压力

处理:

(1) 依据营业需要,能够适当修正按时同步工夫,我这里对及时性绝对要求较高,因而设置了 10 分钟 schedule => “*/10 * * * *”
(2) 设置 mysql 查问范畴,避免年夜量的查问拖死数据库,正在 sql 语句这里设置 select * from WHERE autoid > :sql_last_value;

elasticsearch 存储容量一直回升

elasticsearch 为了数据平安,接纳到数据后,先将数据写入内存以及 translog,而后再建设索引写入到磁盘,这样即便忽然断电,重启后,还能够经过 translog 规复,不外这里因为咱们每一次查问都有不少反复的数据,而这些反复的数据又不写入到 elasticsearch 的索引中,以是就囤积了上去,招致 elasticsearch 容量就一直回升

处理:

查问官网说会活期 refresh,会主动清算掉老的日记,因而可没有做解决

增量同步以及 mysql 范畴查问招致 mysql 数据库有修正时无奈同步到之前的数据。

处理了 mysql 每一次都小范畴查问,处理了数据库压力的成绩,不外却招致无奈同步老数据的修正成绩

处理:

可依据营业状态来做,假如你数据库是修正频仍类型,那只能做全量更新了,然而高频次年夜范畴扫描数据库来做的索引还没有如没有做索引了 (由于建设索引也是有老本的),咱们做索引次要是针对一些数据量年夜,没有常修正,很耗费数据库功能的状况。我这里是数据修正较少,并且修正也普通是近期数据,由于同步时,我正在 mysql 范畴下面略微调整一下

php 应用 ES

php composer 装置 composer require elasticsearch/elasticsearch
引入 es 文件 autoload.php 文件,设置 IP 地点
创立 index,index 对应关系型数据(如下简称 MySQL)外面的数据库,而没有是对应 MySQL 外面的索引
有了数据库还没有行,还需求建设表,ES 也是同样的,ES 中的 type 对应 MySQL 外面的表。type 没有是独自界说的,而是以及字段一同界说,字段界说正在 body 中;当然能够正在 body 字段中也能应用 ik 分词;
应用 EsClient->search () 完成搜寻;
同义词以及近义词的应用

【相干学习保举:php编程(视频)】

设置装备摆设分词器:设置装备摆设 IK

下载 es 的 ik 版本包
正在 es 目次下的 plugins 正在创立 ik 目次,把下载 ik 的 zip 包一切文件解压出来。
出来 es 的 config 目次,编纂 elasticsearch.yml,正在空缺中央加之 index.analysis.analyzer.default.type : “ik” 便可。
拼音分词器设置装备摆设:应用曾经编译好的:elasticsearch-analysis-pinyin-1.3.0
正在 elasticsearch 的 plugins 目次下,新建 analysis-pinyin 文件夹,解压紧缩包,将外面的 jar 包放到 analysis-pinyin 文件夹。
正在 elasticsearch.yml 外面设置装备摆设拼音分词器的过滤器

同义词分词器设置装备摆设

正在 elasticsearch.yml 外面设置装备摆设好同义词分词器的过滤器
设置装备摆设同义词词库,正在 elasticsearch 的 config 目次下新建 sysnonym.txt。
设置装备摆设 ik+pinying + 同义词的分词器,次要有分词器的称号,类型,宰割词元的组件,对宰割的次元做解决:这里应用的是拼音以及同义词

ES 要害字高亮显示

ES 经过正在查问的时分能够正在查问之后的字段数据加之 html 标具名段,使文档正在正在 web 界面上显示的时分是由颜色或许字体魄式的,是正在 highlight 润饰高亮字段, 这个局部蕴含了 name 属性婚配的文本片断,并以 HTML 标签 封装

ES 查问分页

Elasticsearch 中数据都存储正在分片中,当执行搜寻时每一个分片自力搜寻后,数据再通过整合前往。

普通查问流程为

1) 客户端申请发给某个节点
2) 节点转发给个个分片,查问每一个分片上的前 10 条
3) 后果前往给节点,整合数据,提取前 10 条
4) 前往给申请客户端
当咱们查问第 10 条到第 20 条的数据时,有两种形式,包罗深度分页 (from-size) 以及快照分页 (scroll);
深度分页 (from-size)

from 界说了指标数据的偏偏移值,size 界说以后前往的事情数量。默许 from 为 0,size 为 10,也就是说一切的查问默许仅仅前往前 10 条数据。查问前 20 条数据,而后截断前 10 条,只前往 10-20 的数据。糜费了前 10 条的查问。越日后的分页,执行的效率越低。分页的偏偏移值越年夜,执行分页查问工夫就会越长

快照分页 (scroll)

绝对于 from 以及 size 的分页来讲,应用 scroll 能够模仿一个传统数据的游标,记载以后读取的文档信息地位。这个分页的用法,没有是为了及时查问数据,而是为了一次性查问年夜量的数据(乃至是全副的数据)。由于这个 scroll 相称于保护了一份以后索引段的快照信息,这个快照信息是你执行这个 scroll 查问时的快照。正在这个查问后的任何新索引出去的数据,都没有会正在这个快照中查问到。然而它绝对于 from 以及 size,没有是查问一切数据而后剔除了没有要的局部,而是记载一个读取的地位,保障下一次疾速持续读取。
流程:

  • 挪用: index/type/_search?pretty&scroll=2m,前往一个 scroll 值
  • 间接用 scroll_id 进行查问。
  • 肃清 scroll,咱们正在设置开启 scroll 时,设置了一个 scroll 的存活工夫,然而假如可以正在应用完随手封闭,能够延迟开释资本,升高 ES 的累赘

想理解更多编程学习,敬请存眷php培训栏目!

以上就是ES正在MySQL、PHP中的应用的具体内容,更多请存眷资源魔其它相干文章!

标签: php mysql php开发教程 php开发资料 php开发自学 ES

抱歉,评论功能暂时关闭!