解密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作为替代方案,尤其在数据频繁变化时。

➡️

继续阅读