Elasticsearch笔记九之优化
curl命令可以在linux中建立一个定时任务每天执行一次,同样java代码也可以建立一个定时器来执行。
2:内存设置
之前介绍过es集群有两种启动方式
第一种是bin目录下bin/ elasticsearch
打开/usr/local/elasticsearch-1.4.4/bin/elasticsearch.in.sh文件修改文件中的两个参数,将ES_MIN_MEM=256m和ES_MAX_MEM=1g的值改成一样一般设置为可用内存的60%,这样可以避免频繁的内存交换。
另一种是searchwrapper插件方式启动bin/service/ elasticsearch start
打开/usr/local/elasticsearch-1.4.4/bin/service/修改set.default.ES_HEAP_SIZE=1024
另外在es的配置文件中修改bootstrap.mlockall: true,这样禁止内存交换。
3:分片设置
Es将数据存储在多个分片中那么分片的数量就影响到了查询效率。
分片数少了导致分片过大打开一个太大的分片太慢,分片数量过多查询时会打开过多的分片而且还有多台服务器之间的通信问题。所以过多过少都不行,一般情况下分片数量维持在5~20个之间单个分片最大不要超过20G。我们可以根据实际的业务来评估分片数量。
比如我有5个分片,预计3个月会产生100G的数据,那么我们可以每3个月当5个分片达到20G时就重新建立一个索引库。
4:副本设置
副本多了可以增强es集群的安全性提高搜索能力但是也会相应的增加服务器同步数据的压力,一般可以设置2~3个副本即可。
另外当初次建立索引库时需要大量倒入数据时我们可以临时将副本改为0不让其同步数据以减轻服务器压力,倒入完成后通过mappings来更改副本数,这种方式只针对当前索引库后期添加的索引库仍会读取elasticsearch.yml中的副本个数,es重启后仍然会保持之前mappings修改的副本数。
5:删除文档
在es中删除一个文档后不会立即从硬盘中删除只会标记这个文档被删除,lucene会产生一个.del文件,而在检索过程中这个文件还会参与检索只不过在最后会被过滤掉,这样其实也会影响效率,我们可以定期删除这些文件,同合并索引片断一样可以通过curl和java两种方式来执行。
Curl
curl -XPOST http://192.168.79.131:9200/_optimize?only_expunge_deletes=true
Java
- /**
- * 删除.del文件
- */
- @Test
- public void testOptimizeDel()
- {
- transportClient.admin().indices().prepareOptimize("shb01", "shb02")
- .setOnlyExpungeDeletes(true).get();
- }
6:日志输出
可以调整es的日志级别,es的默认级别是trace,超过500ms就属于慢查询就需要打印日志,一般改为info或error级别。
日志文件/usr/local/elasticsearch-1.4.4/config/logging.yml
ndex.search.slowlog: TRACE, index_search_slow_log_file 将TRACE改为INFO
或者更改elasticsearch.yml文件中对于慢查询的设置
index.search.slowlog.threshold.query.trace: 500ms
7:单态获取es对象
在java代码中使用单实例的方式来获取org.elasticsearch.client.transport.TransportClient对象。
8:es极速查询
Es将数据存储在不同的分片中,根据文档id通过内部算法得出要将文档存储在哪个分片上,所以在查询时只有指定在对应的分片上进行查询就可以实现基于es的极速查询,但是前提是你需要知道数据在那个分片上。
还可以通过路由参数来设置数据存储在同一个分片中,setRouting(“”)
- /**
- * 路由参数
- */
- @Test
- public void testRoutingInsert()
- {
- String source = "{\"name\":\"中山大学l\",\"num\":1800}";
- IndexResponse indexResponse = transportClient.prepareIndex(index, "stu")
- .setRouting("student")
- .setSource(source).get();
- System.out.println(indexResponse.getVersion());
- }
- /**
- * 路由参数
- */
- @Test
- public void testRoutingSearch()
- {
- SearchResponse searchResponse = transportClient.prepareSearch(index)
- .setTypes("stu")
- .setQuery(QueryBuilders.matchAllQuery())
- //.setPreference("_shards:0,1,2")
- .setRouting("student", "teacher")
- .get();
- SearchHits hits = searchResponse.getHits();
- SearchHit[] hits2 = hits.getHits();
- for(SearchHit h : hits2)
- {
- System.out.println(h.getSourceAsString());
- }
- }

9:去掉mapping中_all域
Elasticsearch笔记九之优化的更多相关文章
- Webpack学习笔记九 webpack优化总结
webpack 优化笔记 webpack4 自带的优化包括 swingTree(摇摆树)和作用域提升 swingTree 比如入口文件 index.js引入通用方法 util, 里面有 10个方法, ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- Direct12优化
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- Direct12优化 第一章:向量代数 1.向量计算的时候,使用XMV ...
- 《MFC游戏开发》笔记九 游戏中的碰撞判定初步&怪物运动简单AI
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9374935 作者:七十一雾央 新浪微博:http:// ...
- Android App性能优化笔记之一:性能优化是什么及为什么?
By Long Luo 周星驰的电影<功夫>里面借火云邪神之口说出了一句至理名言:“天下武功,唯快不破”. 在移动互联网时代,同样如此,留给一个公司的窗口往往只有很短的时间,如何把握住 ...
- Elasticsearch笔记八之脑裂
Elasticsearch笔记八之脑裂 概述: 一个正常es集群中只有一个主节点,主节点负责管理整个集群,集群的所有节点都会选择同一个节点作为主节点所以无论访问那个节点都可以查看集群的状态信息. 而脑 ...
- Elasticsearch笔记七之setting,mapping,分片查询方式
Elasticsearch笔记七之setting,mapping,分片查询方式 setting 通过setting可以更改es配置可以用来修改副本数和分片数. 1:查看,通过curl或浏览器可以看到副 ...
- Elasticsearch笔记二之Curl工具基本操作
Elasticsearch笔记二之Curl工具基本操作 简介: Curl工具是一种可以在命令行访问url的工具,支持get和post请求方式.-X指定http请求的方法,-d指定要传输的数据. 创建索 ...
- 工作随笔—Elasticsearch大量数据提交优化
问题:当有大量数据提交到Elasticsearch时,怎么优化处理效率? 回答: 批量提交 当有大量数据提交的时候,建议采用批量提交. 比如在做 ELK 过程中 ,Logstash indexer 提 ...
- 多线程学习笔记九之ThreadLocal
目录 多线程学习笔记九之ThreadLocal 简介 类结构 源码分析 ThreadLocalMap set(T value) get() remove() 为什么ThreadLocalMap的键是W ...
随机推荐
- 一个div在另一个div中水平垂直的方法
html <div id="main"> <div id="box"> 一个div在另一个div中垂直居中实现方法 </div&g ...
- iOS中用UILabel实现UITextView的占位文字
@interface BSPublishTextView : UITextView /** 对外属性占位字符 placeholder */ @property (nonatomic, copy) NS ...
- wamp 服务监控和启动
近日我的 wamp 莫名其妙的崩溃重启,apache 能自动起来, mysql 却悲剧了. 于是有了下面的wamp服务监控和启动的批处理文件 @echo off rem define loop tim ...
- 百度java开发面试题
第一面 项目: 1.找一个项目,介绍下情况.其中遇到了什么问题,每种问题怎么样的解决方案. 算法题: 2.一个排好序的数组,找出两数之和为m的所有组合 3.自然数序列,找出任意连续之和等于n ...
- Flex编码随笔
1.CSS定义最好放在application里面. 2.数据源是数组数据时,最好把数组转换为ArrayCollection. 3.List.CheckBox等控件的HttpService Params ...
- Vue--学习过程中遇到的坑
在这里总结一下学习Vue遇到的易错点,持续更新 1.实例化一个Vue对象: 通过new Vue({ el:'#id', data:{ a:'字符串1', b:‘字符串2’ }) 这里的Vue必须大写V ...
- FP-growth算法思想和其python实现
第十二章 使用FP-growth算法高效的发现频繁项集 一.导语 FP-growth算法是用于发现频繁项集的算法,它不能够用于发现关联规则.FP-growth算法的特殊之处在于它是通过构建一棵Fp树, ...
- 什么是C语言。C语言入门
C语言是一种通用计算机编程语言,应用广泛. C语言的设计目标是提供一种编程语言,它可以编译,处理低级内存,生成少量机器代码,并以简单的方式运行,而无需任何操作环境的支持.虽然C语言提供了许多低级处理功 ...
- js 对XML文件的保存与读取
一.保存(在前端用js创建xml格式) function exportToXml(jsonStr){ var obj = eval('('+ jsonStr + ')'); var xmlDoc = ...
- Spring MVC 的 XML 配置方式
索引: 开源Spring解决方案--lm.solution 参看代码 GitHub: solution/pom.xml solution/webapi/pom.xml solution/mapper/ ...