文档章节

ElasticSearch工作原理及使用建议

selfless
 selfless
发布于 2017/02/12 16:29
字数 541
阅读 42
收藏 1

准实时索引的实现

如果对mysql的innodb有了解的话,es的实现原理相似

  1. client只能搜索到commit point指向的segment
  2. 写入到memory buffer和translog之后,即写入成功
  3. memory buffer中的内容,每隔1s(可以通过/_refresh控制),异步刷新到磁盘
  4. 刷新到磁盘后,flush掉translog
  5. 很过个segment由单独merge线程处理segment的merge操作

上图:

ES准实时的实现

routing和replica

  1. 每个对象都有routing字段,默认是_id值
计算对象所在的shard通过以下方式:
shard = hash(routing) % number_of_primary_shards
所以创建索引,指定的分片数不能变,一旦变化,所有的索引数据都会读取失败
  1. replica一致性
默认写完一半以上即为成功。
int((primary + number_of_replicas) / 2) + 1
也可以设置为one或者all

如何提升写入性能

参见:https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-for-indexing-speed.html

  1. 使用bulk request
  2. 使用多线程发送数据
  3. 增加refresh interval
  4. 在批量数据加载初始化的时候,可以关闭refresh
  5. 禁用交换空间
  6. 给文件系统较大的memory
  7. 使用自生成的id
  8. 使用更高效的硬件,例如:SSD
  9. 如果索引比较大,调大indices.memory.index_buffer_size

如何提升读取性能

参见:https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-for-search-speed.html

  1. 给文件系统缓存更大的内存
  2. 使用更高效的硬件,例如:SSD
  3. 优化查询条件:避免join操作、nested操作和parent-child关系
  4. 数据预处理
  5. 一些情况下mapping使用keyword而不是integer或者long
  6. 强制merge read-only索引
  7. 文件系统缓存预热

如何减少磁盘使用空间

参见:https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-for-disk-usage.html

  1. 禁用不必要的feature
  2. 不要使用默认的string mapping
  3. 禁用_all
  4. 使用best_compression

其他建议

参见:https://www.elastic.co/guide/en/elasticsearch/reference/current/general-recommendations.html

  1. 避免返回大的结果集,使用scroll代替
  2. 避免索引大文档,默认最大是100MB,(http.max_context_length)
  3. 避免在同一个索引下加入不相关的数据
  4. 避免过多的types,使用单独的index代替

© 著作权归作者所有

共有 人打赏支持
selfless
粉丝 24
博文 26
码字总数 21597
作品 0
海淀
程序员
当ES赶超Redis,这份ES进修攻略不容错过!

从4月DB-Engines最新发布的全球数据库排名中,我们赫然发现ElasticSearch逆袭超越了Redis,从原先的第9名上升至第8名,而Redis则落后一名,排在了其后。 事实上,这场逆袭并不算太让人意外。...

DBAplus社群
04/15
0
0
Java搜索引擎选择: Elasticsearch与Solr(转)

Elasticsearch简介 Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。 它可以用于全文搜索,结构化搜索以及分析,当然你也可以将这三者进行组...

easonjim
2017/11/13
0
0
快速上手 Elasticsearch 的几个建议

相信不少同学都听说过 Elasticsearch,作为目前最流行的搜索引擎实现方案,越来越多的公司在自己的架构中引入,而其应用场景也从搜索引擎扩展到了日志存储分析、大数据分析领域,本文尝试给初...

rockybean
05/21
0
0
ElasticSearch大数据分布式弹性搜索引擎使用—从0到1

阅读目录: 背景 安装 下载elasticsearch servicewrapper 包 elasticsearch servicewrapper开源包的配置小bug servicewrapper安装 chkconfig -add 加入linux启动服务列表 查找、下载rpm包 、...

王清培
06/26
0
0
Logstash迁移Elasticsearch数据方法解读

Elasticsearch中数据搬迁是工程师们经常会做的,有时是为了集群迁移、有时是为了数据备份、有时是为了升级等等,迁移的方式也有很多种,比如说通过elasticsearch-dump、通过snapshot、甚至是...

pcdog
05/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

kernel version does not match DSO version

错误信息: kernel version 384.11 does not match DSO version 384.130.0 原因是: cuda driver版本太低,不匹配DSO 简单有效的修复方法,升级nvidia driver, 步骤如下: 1. google seach ...

刘小米
今天
0
0
maven坐标和依赖

一、maven坐标详解 <groupId>com.fgt.club</groupId><artifactId>club-common-service-facade</artifactId><version>3.0.0</version><packaging>jar</packaging> maven的坐标元素说......

老韭菜
今天
1
0
springmvc-servlet.xml配置表功能解释

问:<?xml version="1.0" encoding="UTF-8" ?> 答: xml version="1.0"表示是此xml文件的版本是1.0 encoding="UTF-8"表示此文件的编码方式是UTF-8 问:<!DOCTYPE beans PUBLIC "-//SPRING//......

隐士族隐逸
今天
1
0
基于TP5的微信的公众号获取登录用户信息

之前讲过微信的公众号自动登录的菜单配置,这次记录一下在TP5项目中获取自动登录的用户信息并存到数据库的操作 基本的流程为:微信设置自动登录的菜单—>访问的URL指定的函数里获取用户信息—...

月夜中徘徊
今天
0
0
youTrack

package jetbrains.teamsys.license.runtime; 计算lis package jetbrains.ring.license.reader; 验证lis 安装后先不要生成lis,要把相关文件进行替换 ring-license-checker-1.0.41.jar char......

max佩恩
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部