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 ...
随机推荐
- ubuntu下无法编译ruby-2.1.5提示something wrong with CFLAGS -arch x86_64
在Mac OS X10.10下以下语句运行没有问题: ./configure -prefix=/Users/apple/src/ruby_src/ruby2.1.5_installed --with- ...
- Nginx安装Nginx-echo模块
Nginx-echo可以在Nginx中用来输出一些信息,是在测试排错过程中一个比较好的工具.它也可以做到把来自不同链接地址的信息进行一个汇总输出.总之能用起来可以给开发人员带来挺大帮助的.下面看看我们 ...
- Java IO学习--(五)字节和字符数组
内容列表 从InputStream或者Reader中读入数组 从OutputStream或者Writer中写数组 在java中常用字节和字符数组在应用中临时存储数据.而这些数组又是通常的数据读取来源或 ...
- HTML DOM 实例
DOMAnchor 对象 更改一个链接的文本.URL 以及 target 使用 focus() 和 blur() 向超链接添加快捷键 Document 对象 使用 document.write() 向 ...
- 第15章-输入/输出 --- 理解Java的IO流
(一)理解Java的IO流 JAVA的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在Java中把不同的输入/输出(键盘.文件.网络连接等)抽象表述为"流"( ...
- JavaScript 将两个数组合并,且删除重复的值
var a=[1,2,3,4,5,8,9,10]; var b=[6,7,8,9,10]; var c = a.concat(b);//合并成一个数组 console.log(c) temp = {} ...
- scala函数
1.probablePrime(6,Random) Random是scala.util._中的包 probablePrime是scala.math.BigInt._伴生对象中的方法: probable ...
- java之SpringMVC配置!配置!配置!
工欲善其事,必先利其器,要想使用SpringMVC自然要先把配置文件写好. 1.web.xml文件 新建web项目之后webRoot目录下面会有一个web.xml文件,我们先来对其进行配置. < ...
- FastDfs上传图片
1.1. 上传步骤 1.加载配置文件,配置文件中的内容就是tracker服务的地址. 配置文件内容:tracker_server=192.168.25.133:22122 2.创建一个TrackerC ...
- zabbix 3.4 ubuntu 16 用腾讯企业邮箱作为告警邮箱
最近一直在研究zabbix监控系统,今天调试了腾讯企业邮箱作为告警邮箱的设置,本次方式是用内置email组件. 第一步: 选择Administration-->Media Types--> ...