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 ...
随机推荐
- opencv基本图像操作
// Basic_OpenCV_2.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #i ...
- Xshell 链接 Could not connect to '192.168.80.129' (port 22): Connection failed
在使用Xshell链接虚拟机VM里面的Linux的时候.链接失败,报 Could not connect to ): Connection failed 解决步骤: 1.重启VM.Linux.Xshe ...
- Linux笔记2
touch 创建文件. echo 输出 >> 将输出写入到文件中 echo sss >> a.txt cat 查看文件内容 帮助命令 man 命令 man ...
- Python基本数据类型之列表、元组、字典、集合及其魔法
列表 1.列表可存放任何东西,并且可修改 2.列表有序 3.列表支持索引与切片 4.支持for,while循环,所以列表为可迭代对象 5支持in操作,判断元素是否在列表中 6可多重索引嵌套列表 7.字 ...
- springMVC 中的restful 架构风格
RESTful架构 : 是一种设计的风格,并不是标准,只是提供了一组设计原则和约束条件,也是目前比较流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用. ...
- zxg项目准备的技术资料
bootstrap工具大全:http://www.w3cplus.com/source/the-best-bootStrap-resources.html ubuntu-安装aptana3 http ...
- 记住这个网站:服务器相关数据统计网站 http://news.netcraft.com/
http://news.netcraft.com/ 需要参考现在服务器相关数据,可以上这个网站. 当然google趋势也是一个可选得备案. 有一个数据统计更全面的: http://w3techs.co ...
- hadoop配置文件详解系列(一)-core-site.xml篇
接上一个属性,这个属性就是设置阈值的. hadoop.security.groups.cache.secs 300 配置用户组映射缓存时间的,当过期时重新获取并缓存. hadoop.security. ...
- Mybatis批量更新数据库与批量插入数据库(以oracle为例)
一.批量更新 1.普通写法(一条记录update一次,性能比较差,容易造成阻塞.不建议使用) <update id="updateBatch" parameterType=& ...
- node传统读取文件和promise,async await,
先上传统文件加载方式代码,传统方式在处理多层嵌套时代码比较混乱 const fs = require('fs') //引入文件系统 function readFile (cb) { fs.readFi ...