解密Elasticsearch:深入探究这款搜索和分析引擎
💡
原文中文,约5500字,阅读约需13分钟。
📝
内容提要
最近使用Elasticsearch实现画像系统,调研了竞品架构选型,重温了redis原理。Elasticsearch的通讯使用netty,内存分为on heap和off heap,不能回收的部分有node query cache、shard request cache、file data cache、segments cache。持久化分为快照和translog日志。应用方面,使用es解决人群预估、人群包圈选和人包判定问题。优化方面,需要优化mapping,使用线程池和适当的拒绝策略,调整refresh policy等。瓶颈方面,可以使用redis或MongoDB存储人包数据。总结来说,Elasticsearch在实时检索方面表现出色,但实时写会降低检索性能。
🎯
关键要点
- 最近使用Elasticsearch实现画像系统,调研竞品架构选型,重温redis原理。
- Elasticsearch的通讯使用netty,节点间RPC通讯基于Netty4Transport。
- 内存分为on heap和off heap,不能回收的部分包括node query cache、shard request cache等。
- 持久化分为快照和translog日志,类似于redis的RDB+AOF模式。
- Elasticsearch在实时检索方面表现出色,但实时写会降低检索性能。
- 应用方面,使用Elasticsearch解决人群预估、人群包圈选和人包判定问题。
- 人群预估需要秒级返回结果,人群包圈选要求分钟级构建。
- 人包判定接口要求10毫秒返回结果,优化查询性能至关重要。
- 优化方面包括mapping优化、使用线程池、调整refresh policy等。
- 瓶颈方面可以使用redis或MongoDB存储人包数据。
- 总结来说,Elasticsearch在实时场景下表现优异,但实时写入会影响检索性能。
❓
延伸问答
Elasticsearch的主要应用场景是什么?
Elasticsearch主要用于人群预估、人群包圈选和人包判定等应用场景。
Elasticsearch如何处理内存管理?
Elasticsearch的内存分为on heap和off heap,on heap由JVM管理,off heap由Lucene管理,且有部分内存不能被回收。
Elasticsearch的持久化机制是怎样的?
Elasticsearch的持久化分为快照和translog日志,类似于Redis的RDB+AOF模式。
使用Elasticsearch时如何优化查询性能?
优化查询性能的方法包括优化mapping、使用线程池、调整refresh policy等。
Elasticsearch在实时写入时会遇到什么问题?
实时写入会降低检索性能,尤其是在写操作和查操作并行时,内存和磁盘IO会非常高。
Elasticsearch与Redis或MongoDB的比较如何?
在存储人包数据时,可以使用Redis或MongoDB作为替代方案,尤其在数据频繁变化时。
🏷️
标签
➡️