1.elasticsearch对比mysql有什么有优势?
1. 天然支持分布式存储,支持数据分片;
2.横向扩展性好:只需要增加一台服务器,做一点配置,启动一下ES进程就可以并入集群。
3.可靠性高:提供复制(replica),一个分片可以设置多个复制分片,使得某台服务器宕机的情况下,集群仍旧可以照常运行;
3.数据支持分词组合索引;
4.支持倒排索引,搜索速度很快;
缺点:
1.各节点数据的一致性问题:其默认的机制是通过多播机制,同步元数据信息,但是在比较繁忙的集群中,可能会由于网络的阻塞,或者节点处理能力达到饱和,导致各数据节点数据不一致——也就是所谓的脑裂问题,这样会使得集群处于不一致状态。目前并没有一个彻底的方案来解决这个问题,但是可以通过参数配置和节点角色配置来缓解这种情况。
2.没有细致的权限管理,也就是说,没有像mysql那样的分各种用户,每个用户又有不同的权限。所以在操作上的限制需要自己开发一个系统化来完成。
3.不支持事务,
4. 更新数据或者删除字段,仅删除相应的标记,并产生新的段,都会导致数据占用内存很大,但是由于没有修改,检索很快;
2.elasticsearch插入数据变得很慢是什么原因?
1.内存不够(扩张机器数量);
2.段数太多,索引过大,搜索速度慢(段合并);
3.业务进程收到阻塞(添加消息队列);
3.elasticsearch中的倒排索引?
根据内容分词term建立索引,结果对象是doc的id的list集合;
所有的term组成term dic,由于dic过大可以建立新索引字典树;
通过字典树查找term在dic中的位置,找出term后取出所有的list,通过bitmap将不同分词的结果合并;
4.elasticsearch中的文档索引过程?
第一步:客户从集群某节点写入数据,发送请求。
第二步:节点 1 接受到请求后,使用文档_id 来确定文档属于分片 0。而分片0属于节点3,请求会被转到节点 3。分片 0 的主分片也分配到节点 3 上;
第三步:节点 3 在主分片上执行写操作,成功后将请求并行转发到节点1和节点 2 的副本分片上。所有的副本分片都报告成功,节点3将向协调节点(节点 1)报告成功,节点 1 向请求客户端报告写入成功。
5. Elasticsearch 的基本概念?
(1)index 索引: 索引类似于mysql 中的数据库,Elasticesearch 中的索引是存在数据的地方,包含了一堆有相似结构的文档数据。
(2)type 类型: 类型是用来定义数据结构,可以认为是 mysql 中的一张表,type 是 index 中的一个逻辑数据分类
(3)document 文档: 类似于 MySQL 中的一行,不同之处在于 ES 中的每个文档可以有不同的字段,但是对于通用字段应该具有相同的数据类型,文档是es中的最小数据单元,可以认为一个文档就是一条记录。
(4)Field 字段: Field是Elasticsearch的最小单位,一个document里面有多个field
(5)shard 分片: 单台机器无法存储大量数据,es可以将一个索引中的数据切分为多个shard,分布在多台服务器上存储。有了shard就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能。
(6)replica 副本: 任何一个服务器随时可能故障或宕机,此时 shard 可能会丢失,因此可以为每个 shard 创建多个 replica 副本。replica可以在shard故障时提供备用服务,保证数据不丢失,多个replica还可以提升搜索操作的吞吐量和性能。primary shard(建立索引时一次设置,不能修改,默认5个),replica shard(随时修改数量,默认1个),默认每个索引10个 shard,5个primary shard,5个replica shard,最小的高可用配置,是2台服务器。
(7)段:每个分片是由多个段组成,每个段存储一部分的倒排索引;
6. ElasticSearch的搜索流程?
搜索被执行成一个两阶段过程:
第一个阶段:Query阶段客户端发送请求到 coordinate node,协调节点将搜索请求广播到所有的 primary shard 或 replica,每个分片在本地执行搜索并构建一个匹配文档的大小为 from + size 的优先队列。接着每个分片返回各自优先队列中 所有 docId 和 打分值 给协调节点,由协调节点进行数据的合并、排序、分页等操作,产出最终结果。
第二个阶段:Fetch阶段协调节点根据 Query阶段产生的结果,去各个节点上查询 docId 实际的 document 内容,最后由协调节点返回结果给客户端。
7.ElasticSearch的搜索方式有哪些?
1.基于json格式的搜索方式;
2.基于url格式的搜索方式;
3.基于类sql的搜索方式;
8.Elasticsearch 更新和删除文档的过程?
删除和更新也都是写操作,但是Elasticsearch中的文档是不可变的,因此不能被删除或者改 动以展示其变更;磁盘上的每个段都有一个相应的.del文件。当删除请求发送后,文档并没有真的被删除,而是 在.del文件中被标记为删除。该文档依然能匹配查询,但是会在结果中被过滤掉。当段合并时,在.del文件中被标记为删除的文档将不会被写入新段。
在新的文档被创建时,Elasticsearch会为该文档指定一个版本号,当执行更新时,旧版本的 文档在.del文件中被标记为删除,新版本的文档被索引到一个新段。旧版本的文档依然能匹配 查询,但是会在结果中被过滤掉。
9. ElasticSearch索引多了怎么办,如何调优部署?
1)在设计的时候可以基于模板+时间滚动方式创建索引,每天递增数据,避免单个索引很大的情况出现;
2)在存储的时候冷热数据分开存储,比如最近3天的数据作为热数据,其他的作为冷数据。冷数据的话由于不会再写入新数据了,可以考虑定期force_merge(强制合并)和shrink(压缩)的方式进行处理,节约空间和检索效率。
3)由于es支持动态扩展,所有可以多加几台机器来缓解集群压力
参考:
1.ElasticSearch面试题及答案(19道必考题解析) – mikechen
2.es 插入很慢_ElasticSearch插入性能优化_weixin_39680380的博客-CSDN博客
3.mysql分布式数据库优点,elasticsearch、redis、mysql、mongodb这四种分布式数据库的优缺点和应用选择注意点分别是什么?..._晚点LatePost的博客-CSDN博客