当前位置: 首页 > news >正文

面试题:项目中是如何使用ES(elasticsearch)的?如何优化的?数据量多少?

背景:

面试的时候要是简历上写了elasticsearch,那好巧不巧,面试官对这个一般都很感兴趣,不管你是写了解还是仅仅使用过,都会不假思索的问到你炸。有些人实际上并没有使用过或者只是增删改查,就基本上,唯唯诺诺答不出来什么。笔者就讲讲自己公司里面怎么用es的。

想了解概念的,可以自己查博客或者看看我总结的:

src/main/java/Elasticsearch.java · 游建明/java面试相关的问题解答 - Gitee.com

1. 业务:项目中一般存储企业信息,企业变更信息,企业的各类关联数据。或者存储舆情数据,就是互联网爬虫爬取的网络上的微博,今日头条的热点数据等等。一般我们系统中是对这些数据做AC算法关联词匹配查询,然后对结果分析,对热点事件进行预测。

2. 数据量:看业务吧,企业是近千万家,包含企业的各类变更法人信息等,舆情数据是亿级的,每日入库千万级数据,保留近两个月的数据

3. 集群大小:不同业务集群也不同,一般是三台集群,内存64G,磁盘单台2-4T

4. 优化:企业数据比较侧重于并发读,每日写入不大,但是对数据的可靠性可用性要求高,互联网舆情数据比较侧重于并发写,每日写入量大,但是查询较少,而且允许数据丢失,两种的优化也不一样

5.舆情数据优化:

  1. 增加refresh的时间间隔,默认是1s,一般开到30s
  2. 减少副本数量:es默认为1个,有时候不设置副本或者设置1个,看数据,因为丢失了可以再次爬取,但是设置副本占据的数据量太大了,导致磁盘不够用
  3. 设置es的堆内存,64G的机器,设置为31G,而且最大最小堆内存要设置成一样,避免内部加大内存的消耗
  4. 禁止swap:swap是内存和磁盘的交换,要是发生了会导致卡顿,一般设置锁定内存的参数bootstrap.memory_lock:true
  5. 修改translog的参数:translog是es防止数据丢失的一种策略,可以设置异步刷新到磁盘,而且可以设置的大一点,flush的时间也可以设置的久一点

5. 企业数据优化

  1. 设置分区:三台节点的话,分区最大不应该超过节点数的两倍,所以分区设置为6
  2. 设置副本:副本数设置为3,保证并发查询和可用性
  3. 查询优化
    1. scroll查询:如果要查询大数据量的话,最好避免直接查询,使用scroll翻滚查询,再聚合查询结果
    2. 自动生成id:如果不是业务上的强要求,尽量使用es自己生成id,如果使用特定id,es会检查对应的索引下是否存在相同id,随着文档越来越大,消耗也会越来越大
    3. 少使用nested:创建索引的时候尽量少使用nested类型,并且保证nested类型的字段不能过多,一个document,每一个nested都会生成一个独立的document,影响查询效率,尤其是join的
    4. 批量插入数据使用bulk,bulk默认设置批量提交的数据量不能超过100M

相关文章:

  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • smartbi 进行mongodb数据源的安装
  • C4D遇到的动力学模拟问题怎么办?看完本文就知道
  • zookeeper高级特性
  • OIDC 在 Authing 控制台的配置流程 | 认证(二)
  • 【Java】多线程编程面试题总结
  • html多图片下载方法1<a>标签 不涉及nginx
  • 使用Qt的文本转语音模块
  • 码农必备生活常识:话费慢充到账慢怎么办?
  • 阿里开源-JVM-SandBox
  • 人工神经网络基本原理概述总结
  • Zemax操作38--POP(物理光学传播)的用法
  • (小白学Java)Java简介和基本配置
  • Cyanine5.5 tetrazine|Cy5.5-tetrazine|花青素Cy5.5四嗪
  • 阿里巴巴、阿里云Java面试题、笔试题(含答案)
  • [PHP内核探索]PHP中的哈希表
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • input的行数自动增减
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • JavaScript标准库系列——Math对象和Date对象(二)
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Python socket服务器端、客户端传送信息
  • 关于Flux,Vuex,Redux的思考
  • ------- 计算机网络基础
  • 首页查询功能的一次实现过程
  • 我有几个粽子,和一个故事
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • ###C语言程序设计-----C语言学习(6)#
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (Ruby)Ubuntu12.04安装Rails环境
  • (补)B+树一些思想
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (五)关系数据库标准语言SQL
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (正则)提取页面里的img标签
  • (转)EOS中账户、钱包和密钥的关系
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • ****Linux下Mysql的安装和配置
  • ***通过什么方式***网吧
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net refrector
  • .net 使用ajax控件后如何调用前端脚本
  • .NET 使用配置文件
  • .net操作Excel出错解决
  • [BZOJ] 2006: [NOI2010]超级钢琴
  • [C++]AVL树怎么转