笔记
Elasticsearch 优化之路
593246075 0 2017-02-08 10:16
1、index 创建的时候一定要计算好shard,因为主分片一经确认是不能修改的,每一个分片上面独立运行着一个lucene程序;因此设置主分片的时候尽量考虑未来发展需求,如果当前有1G数据,使用默认分片5个,每一个主分片数据相当于200M数据(hash(ID)%max_shards进行数据分片存储的),但是随着时间推移如果3个月后数据变成100G了,但是主分片还是5个,每一个上面就是20G的数据,会大大降低处理性能;(2.3.1版本增加了对index的动态迁移能力,也许可以快速的处理这一问题)。
2、字段的colum,可以设定需要不需要分词,使用什么样的分词,当然这只针对于string类型,其他类型不能分词。如果不定义mapping文件,es默认会根据字段判断一个类型,比如带"的默认是string类型,但是如果变成string类型就不能执行比较查询(日期或者数字的 >、<、=),因此在做mapping定义的时候一定要注意。如果是动态构建,es会在处理第一个文档的时候固定类型,下一次如果同一个字段类型不匹配将抛出异常。增加新字段也可以自动增加类型,也可以手动通过命令行提前指定好。
3、内部对象或者对象数组,都将在es里面做扁平化处理,如blog.user.firstname,扁平化之后内部的关联关系将会消失。如下:

内部对象数组
最后,一个包含内部对象的数组如何索引。 我们有个数组如下所示:
{ "followers": [
        { "age": 35, "name": "Mary White"},
        { "age": 26, "name": "Alex Jones"},
        { "age": 19, "name": "Lisa Smith"}
    ]

此文件会如我们以上所说的被扁平化,但其结果会像如此:
{ "followers.age": [19, 26, 35], "followers.name": [alex, jones, lisa, smith, mary, white]

{age: 35}与{name: Mary White}之间的关联会消失,因每个多值的栏位会变成一个值集合,而非有序的阵列。 这让我们可以知道:
    - 是否有26岁的追随者?
但我们无法取得准确的资料如:
    - 是否有26岁的追随者且名字叫Alex Jones?
关联内部对象可解决此类问题,我们称之为嵌套对象,我们之後会在嵌套对象中提到它。

4、深分页,由于es内部排序机制和分片的原因,如果进行深分页将造成大量cpu和内存的耗费,甚至是集群崩溃。如,我们要搜索第1000页数据,每页10个记录,如果有10个分片,每一个分片都需要获取 1000*10+10条记录并携带记录返回请求服务器,服务器要将 10*(1000*10+10)=100100条数据进行结果排序,对服务器来说本身就是一个极大的资源耗费和压力。


5、类型陷阱,可能在某些情况下我们会为不同的文档在同一个index下设置不同的type,如果blog_en英语版本博客,blog_es西班牙版本博客,两种类型都有 title 字段,但是其中一种类型使用 english 分析器,另一种使用 spanish 分析器。未来搜索两个文本中的title字段数据并且保证都是用各自的分词器,

我们可以通过给字段取不同的名字来避免这种错误 —— 比如,用 title_en  title_es。或者在查询中明确包含各自的类型名。

GET /_search
{
    "query": {
        "multi_match": { <1>
            "query": "The quick brown fox",
            "fields": [ "blog_en.title", "blog_es.title" ]
        }
    }
}

<1> multi_match 查询在多个字段上执行 match 查询并一起返回结果。

新的查询中 english 分析器用于 blog_en.title 字段,spanish 分析器用于 blog_es.title 字段,然后通过综合得分组合两种字段的结果。


6、当执行 filtered 查询时,filter 会比 query 早执行。结果字节集会被传给 query 来跳过已经被排除的文档。这种过滤器提升性能的方式,查询更少的文档意味着更快的速度。








笔记评论
作者
晨色星空J2EE的头像

晨色星空J2EE

已学习课程数:12

已发表笔记数:57

Ta的笔记
01    Elasticsearch 优化之路

1、index 创建的时候一定要计算好shard,因为主分片一经确认是不能修改的,每一个分片上面独立运行着一个lucene程序;因此设置主分片的时候尽量考虑未来发展需求,如果当前有1G数据,使用默认分片5个,每一个主分片数据相当于200M数据(hash(ID)%max_shards进行数据分片存储的),但是随着时间推移如果3个月后数据变成100G了,但是主分片还是5个,每一个上面就是20G的数据,会大大降低处理性能;(2.3.1版本增加了对index的动态迁移能力,也许可以快速的处理这一问题)。2、字段的

02    ejabberd 安装手册

ejabberd 安装手册1、首先进入http://www.process-one.net/en/ejabberd/downloads 下载对应的版本2、执行文件chmod +x ejabberd-14.12-linux-x86_64-installer.run./ejabberd-14.12-linux-x86_64-installer.run配置好选项(注意安装路径,默认在/opt下面)3、配置mysql数据库a、创建数据库 ejabberdb、找到数据库初始化脚本 /opt/ejabberd-14.

03    IM- 即时通讯技术

调研:openfire:Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议。您可以使用它轻易的构建高效率的即时通信服务器.Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。由于是采用开放的XMPP协议,您可以使用各种支持XMPP协议的IM客户端软件登陆服务.Ejabberd2:http://wiki.jabbercn.org/Ejabberd2:%E5%AE%89%E8%A3%85%E5%92%8C%E6%93%8D%

04    Docker 手册

CentOS 6.5下面实现docker(http://segmentfault.com/blog/seanlook/1190000000735011  安装记录过程)1、安装epelhttp://teddysun.com/153.html   -----------------------------------------------------------------------------Centos 6.xwget http://dl.fedoraproject.o

05    Elasticsearch 实战使用

1、elasticSearch1.4.0 整合 kibana3.1.2 注意事项在elasticsearch.yml 文件末尾增加http.cors.enabled: truehttp.cors.allow-origin: 'http://192.168.10.167:8080'2、动态模板定义:对所有新增的index 的所有string类型的字段不进行分词http://blog.csdn.net/cnweike/article/details/38397707http://www.cnblogs.com

06    elasticsearch 知识总结

ElasticSearch封装(创建索引,删除索引,创建Mapping,批量插入,批量删除,搜索)http://www.cnblogs.com/bigfanofcpp/archive/2013/01/22/2871852.htmlhttp://www.nosqldb.cn/1368777378160.htmlElasticsearch强大的会合功能Facethttp://www.myexception.cn/open-source/1310994.htmlhttp://www.csdn123.com/ht

07    awk 实战使用

统计访问日志里面的IP数据,通过IP分类统计出每一个IP最近访问次数,并进行访问次数排序,日志文件格式如下,看似比较混乱的结构:{"referer":"http://www.52ipr.com/index.html","headers":{"X-Proxy":"nginx","Accept":"*/*"},"scheme":"http

08    Linux 学习笔记 Sed命令详解

简介sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。 sed使用参数 # sed 选项与参数: -n :使用安静(silent)模式。在一般 sed 的用法中,所有

09    Linux 学习笔记 Grep篇

grep 是一个很常见也很常用的命令,他最重要的功能就是进行字串数据的比对,然后将符合使用者需求的字串列印出来。需要说明的是『grep 在数据中查寻一个字串时,是以 "整行" 为单位来进行数据的撷取的!』也就是说,假如一个文件内有 10 行,其中有两行具有你所搜寻的字串,则将那两行显示在萤幕上,其他的就丢弃了!在关键字的显示方面,grep 可以使用 --color=auto 来将关键字部分使用颜色显示。这可是个很不错的功能啊!但是如果每次使用 grep 都得要自行加上 --color=

10    Spark中文手册 编程指南-3

共享变量一般情况下,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的一个独立副本。这些变量被复制到每台机器上,并且这些变量在远程机器上 的所有更新都不会传递回驱动程序。通常跨任务的读写变量是低效的,但是,Spark还是为两种常见的使用模式提供了两种有限的共享变量:广播变量(broadcast variable)和累加器(accumulator)广播变量广播变量允许程序员缓存一个只读的变量在每台机器上面,而不是每个任务保存一份拷

相关笔记
[无]
最新笔记
01    Mysql DBA

基本知识1.mysql的编译安装2.mysql 第3方存储引擎安装配置方法3.mysql主流存储引擎(MyISAM/innodb/MEMORY)的特点4.字符串编码知识5.MySQL用户账户管理6.数据备份/数据入导出7.mysql 支持的基本数据类型8.库/表/字段/索引 的创建/修改/删除9.基本sql语法:select/insert/update/delete,掌握最基本的语法即可,什么inner join,left join的了解就行mysql的应用场景大多都是高并发访问/业务逻辑简单,join/

02    mysql 备份

备份:mysqldump -uroot-p'root' jpstudy > /opt/mysql_jpstudy_bak.sql恢复:mysql -uroot-p'root' jpstudy < /opt/mysql_jpstudy_bak.sql参数说明:1、备份sql文件名以 -B ,即:mysqldump -uroot-p'root' -B jpstudy >/opt/mysql_jpstudy_bak_B.sql表示:备份的sql语句中有创建数据库和字符集的语句2、参数--com

03    mysql 索引失效

1.全值匹配2.最佳左前缀法则:如果索引了多列,要遵守最佳左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。3.不在索引列上做任何操作(计算、函数、类型转换),会导致索引失效而转向全表扫描4.存储引擎不能使用索引中范围条件右边的列5.尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select*6.mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描7.is null ,is not null也无法使用索引8.like以通配符开头(‘%abc’)

04    tomcat安全问题4

7 脚本权限回收去除其他用户对bin目录下可执行权限,防止其他用户起停tomcat# chmod -R 744bin/*8 访问日志格式规范开启Referer和User-Agetn是为了一旦出现安全问题能够更好的根据日志进行排查       <Hostname="23.83.xx.xx" appBase="webapps"     

05    tomcat安全问题2

3 禁用管理端对于tomcat的web管理端属于高危安全隐患,一旦被攻破,黑客通过上传web shell方式取得服务器的控制权,那是非常可怕的。我们需要删除tomcat安装目录下conf/tomcat- user.xml或者删除webapps下默认的目录和文件。 # mv webapps/*/tmp 4 降权启动tomcattomcat 启动用户权限必须为非root,避免一旦tomcat服务被入侵,获取root权限,普通用户只能使用大于1024端口,如果要想使用80端

06    tomcat安全问题

1、telnet管理端口保护使用telnet连接进来可以输入SHUTDOWN可以直接关闭tomcat,极不安全,必须关闭。可以修改默认的管理端口8005改为其他端口,修改SHUTDOWN指令为其他字符串。# viconf/server.xml <Server port="8365" shutdown="IN0IT">2 AJP连接端口保护Tomcat 服务器通过Connector连接器组件与客户程序建立连接,Connector组件负责接收客户的

07    发个测试

发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试 发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试 发个测试发个测试发个测

08    Elasticsearch 优化之路

1、index 创建的时候一定要计算好shard,因为主分片一经确认是不能修改的,每一个分片上面独立运行着一个lucene程序;因此设置主分片的时候尽量考虑未来发展需求,如果当前有1G数据,使用默认分片5个,每一个主分片数据相当于200M数据(hash(ID)%max_shards进行数据分片存储的),但是随着时间推移如果3个月后数据变成100G了,但是主分片还是5个,每一个上面就是20G的数据,会大大降低处理性能;(2.3.1版本增加了对index的动态迁移能力,也许可以快速的处理这一问题)。2、字段的

09    SQL-触发器

1.触发器的定义触发器是一种特殊的存储过程 在表或视图上执行insert、update、delete操作自动被调用的存储过程 用途: 1.检测数据的有效性(check) 2.*记录操作的日志 3.拦截数据 rollback 4.*统计某表中的数据 分类: 1.after —— 在数据操作完成之后触发 2.inserted of —— 在数据操作完成之前触发  after可以创建在普通表上和视图上  inserted of可以创建在表 触发器的创建 表示:在指定表上执行upd

10    Java面试题—2016最新Java面试考题知识详解(1)

    动力节点Java培训  下面给出的Java开发中ClassLoader中的描述,哪些描述是正确的(C) AClassLoader没有层次关系 B所有类中的ClassLoader都是AppClassLoader C通过classforname(StringclassName)能够动态加载一个类 D不同的ClassLoader加载同一个Class文件,所得的类是相同的   拓展知识ClassLoader知识

热门笔记
01    Storm单机+zookeeper集群安装

Storm单机+zookeeper集群安装 1、安装zookeeper集群 2、准备机器 10.10.3.44 flumemaster1 zk 10.10.3.129 flumemaster2 zk 10.10.3.132 flumecollector1 zk 10.10.3.115 flumeNg1 storm 3、配置hosts文件(4台服务器上面都需要配置) vi /etc/hosts

02    sqoop安装使用手册

sqoop使用 需求:将mysql中的表b05_age的数据导入hive中 1、安装 yum install sqoop(sqoop必须安装在有hive client的服务器上面,如果没有执行yum install hive) 复制mysql的驱动jar到/usr/lib/sqoop/lib下面 2、异常处理 正确命令:(将关系型数据的表结构复制到hive中) sudo -u hive sqoop create-hive-table --connect jdbc:my

03    CDH hadoop集群安装-1

准备机器: 192.168.1.241 192.168.1.242 192.168.1.243 1、查看ip地址是否为静态ip,如果不是进行配置 vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none IPADDR=192.168.1.241 NE

04    Oracle SQL使用心得

1. 我用的Oracle 客户端最好的工具是PL/SQL Developer, 当然,如果用免费的Toad也不错,感觉现在用Toad的人还是挺多的。 2. Oracle SQL如果想提高速度有几个方式 1)创建索引,尽量建立唯一索引 2)当要创建的索引列的值取值比较小,建议创建Bitmap的索引而不是默认的Btree的。(比如性别,学历等) 3)在where条件后尽量采用数字类型的字段,比varchar的速度快 4)尽量不用用IN,Not In,union这样的条件查

05    JAVA网站静态化方法

1. 通过freemarker静态化 2. 通过jsp filter静态化 主要思路:请求servlet->判断静态文件是否存在并且静态文件创建时间是否在阀值之内-->如果不是,则访问数据库生成静态文件->否则直接跳转静态文件 然后通过urlReWrite直接将访问servlet的请求改为html,完成seo 最后通过SQUID缓存前台数据 一、从数据库中取相应数据并替换掉模板中的对应标签,下面是一个简单的示例

06    使用JAVA 6 构建自己的HTTP服务器

import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetSocketAddress; import java.util.List; import java.util.Map; import c

07    linux下优化tomcat服务器性能

服务器优化说明 WEB服务器优化 1、 更换tomcat5为tomcat6 版本copy测试服务版本即可 2、 加大tomcat内存 修改bin下的catalina.sh文件,增加青绿色部分 JAVA_OPTS='-Xms768m -Xmx1648m -XX:MaxPermSize=512m' 3、 加大tomcat连接数 修改conf下的server.xml文件,修改青绿色部分参数值 maxThrea

08    Oracle 如何查询锁表的对象

select s.username, decode(l.type,'tm','table lock','tx','row lock',null) lock_level, o.owner, o.object_name, o.object_type, s.sid, s.serial#, s.terminal, s.machine, s.program, s.osuser from v$session s,v$lock l,dba_objects o where l.sid = s.s

09    【Twitter Storm系列】flume-ng+Kafka+Storm+HDFS 实时系统搭建

一直以来都想接触Storm实时计算这块的东西,最近在群里看到上海一哥们罗宝写的Flume+Kafka+Storm的实时日志流系统的搭建文档,自己也跟着整了一遍,之前罗宝的文章中有一些要注意点没提到的,以后一些写错的点,在这边我会做修正;内容应该说绝大部分引用罗宝的文章的,这里要谢谢罗宝兄弟,还有写这篇文章@晨色星空J2EE也给了我很大帮助,这里也谢谢@晨色星空J2EE之前在弄这个的时候,跟群里的一些人讨论过,有的人说,直接用storm不就可以做实时处理了,用不着那么麻烦;其实不然,做软件开发的都知道模块化

10    实时流处理框架——Storm(介绍篇)

1. Storm介绍2. Storm环境配置3. Storm程序流程4. Storm总结及问题1. Storm介绍 1.1 实时流计算背景 随着互联网的更进一步发展,信息浏览、搜索、关系交互传递型,以及电子商务、互联网旅游生活产品等将生活中的流通环节在线化。对于实时性的要求进一步提升,而信息的交互和沟通正在从点对点往信息链甚至信息网的方向发展,这样必然带来数据在各个维度的交叉关联,数据爆炸已不可避免。因此流式处理和NoSQL产品应运而生,分别解决实时框架和数据大 规模存储计算的问题。 流式处理可

友情链接