文档章节

ElasticSearch工作原理及使用建议

selfless
 selfless
发布于 2017/02/12 16:29
字数 541
阅读 53
收藏 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
ELK技术栈ElasticSearch,Logstash,Kibana

基础部分 工作原理 es增删改内部原理 ELK集群安装部署 文档管理 索引管理 搜索 聚合分析 分词 数据建模 Java api 零停机 index segment merge 乐观锁并发控制 索引别名 相关度评分算法与定制...

马士兵优效学院
08/19
0
0
ES(elasticsearch)搜索引擎

ES(elasticsearch)搜索引擎 0、授人以渔,少走半年弯路! 死磕 Elasticsearch 方法论:普通程序员高效精进的 10 大狠招! 一、Elasitcsearch基础篇 1.1 Elasitcsearch基础认知 1、Elasticse...

Ocean_K
09/11
0
0
Elasticsearch最佳实践之使用场景

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zwgdft/article/details/82917861 序   最开始使用Elasticsearch是两年多前,在一家创业公司负责数据系统的...

Mr-Bruce
10/08
0
0
快速上手 Elasticsearch 的几个建议

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

rockybean
05/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

jena RDF学习笔记

一、首先要了解RDF和Jena RDF的介绍: An Introduction to RDF and the Jena RDF API RDF及Jena RDF API介绍(中翻) 在Jena中,用于表示单个三元组的Java类是Statement。根据RDF规范,只有资...

孙幼凌
28分钟前
1
0
HTML5 240行代码实现粒子漩涡特效

效果 源码如下 <!doctype html><html><head><meta charset="utf-8"><title>H5,200行代码实现粒子漩涡特效</title><style>html,body{margin:0px;width:100%;height:100%......

lanyu96
35分钟前
2
0
fine report

FineReport xx no: 0941626c-5e513d196-f528-74a7c52d8e61

youngjdong
36分钟前
2
0
get right firefox version for your selenium

find the selenium location path find / -name selenium output: /usr/local/lib/python2.7/dist-packages/selenium get the "webdriver.xpi" file, the file is under "/usr/local/lib/pyt......

关上越
43分钟前
1
0
为小程序端添加一个session机制

我们做后台用户认证的时候一般会借助于session机制,非常方便,今天我们使用小程序的Storage机制自己实现一个session。 本文思路来自于前几日对微信wafer的源码阅读,感谢wafer所有代码编写者...

阿北2017
46分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部