面试题答案
一键面试索引设置优化
- 合理设置分片数
- 分析:初始分片数设置不当,可能导致数据分布不均衡,影响读写性能。若分片过多,会增加索引管理开销;分片过少,可能无法充分利用集群资源。
- 示例:假设一个新闻网站的文章索引,预计数据量在千万级别。若初始设置为1个分片,随着数据量增长,单个分片读写压力增大,查询响应时间变长。此时可根据预估数据量和服务器资源,设置合适分片数,如10个分片。这样在数据写入和查询时,可并行处理,提升性能。
- 调整副本数
- 分析:副本数主要用于数据冗余和高可用,但副本过多会增加写入负担,因为每次写入都要同步到多个副本。在对写入性能要求较高,且对数据可用性有一定容忍度的场景下,可适当降低副本数。
- 示例:在开发测试环境中,对数据可用性要求相对生产环境较低,可将副本数设置为1,减少写入时同步副本的开销,提升写入性能。而在生产环境,根据业务对数据可用性要求,设置合适副本数,如2 - 3个副本。
分片策略调整
- 基于路由规则优化
- 分析:通过自定义路由规则,可将相关文档路由到特定分片,提高查询效率。例如,对于电商订单数据,按照用户ID进行路由,同一用户的订单集中在少数分片上,查询该用户订单时可减少扫描分片数量。
- 示例:在处理酒店预订系统数据时,可根据酒店ID进行路由。每个酒店的预订记录集中在特定分片,当查询某酒店预订情况时,直接定位到相关分片,快速返回结果,提升查询响应速度。
- 动态分片分配
- 分析:根据集群节点负载情况,动态调整分片分配。当某个节点负载过高时,将部分分片迁移到其他负载较低的节点,平衡集群负载,提升整体性能。
- 示例:在一个包含多个节点的电商搜索集群中,若发现某个节点由于数据量集中,导致读写性能下降。此时可利用ElasticSearch的动态分片分配机制,将该节点上部分分片迁移到其他负载低的节点,恢复集群整体性能。
文档设计优化
- 避免大文档
- 分析:大文档会占用更多内存和磁盘空间,写入时也会增加处理时间。应尽量将大文档拆分成多个小文档,保持文档结构简洁。
- 示例:对于一篇包含大量图片和长文本的产品介绍文档,可将图片存储在对象存储中,在ElasticSearch文档中仅保存图片链接,文本部分按需进行合理分段存储,减小文档体积,提升写入和查询性能。
- 字段类型优化
- 分析:选择合适的字段类型能有效减少存储空间,提升查询性能。例如,对于固定长度的标识字段,使用keyword类型比text类型更节省空间且查询更快;对于数值型字段,根据数值范围选择合适的整数类型,避免使用默认的double类型浪费空间。
- 示例:在学生信息管理系统中,学生ID为固定长度的字符串,设置为keyword类型。年龄字段为整数,根据实际年龄范围设置为byte类型(假设年龄最大不超过127岁),相比使用默认的double类型,节省存储空间,提升索引和查询效率。