- 博客(106)
- 资源 (5)
- 收藏
- 关注
原创 二 redis-主从复制与哨兵模式
redis集群专题Redis主从复制1.是什么1.单机有什么问题:单机故障容量瓶颈qps瓶颈主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,mester已写为主,slaver已读为主2.能干嘛1.读写分离2.容灾备份3.怎么玩玩法原则:1.配从不配主2.使用命令 SLAVEOF 动态指定主从关系 ,如果设置了密码,关联后使用 config set masterauth 密码3.配置文件和命令混合使用时,如果混合使用,动态指定了主从,请注意一定要修
2021-01-18 20:26:40
155
原创 SpringIOC
SpringIOC---DI---DI与SpringIOC的关系:DI是SpringIOC的一种实现方式(还有一种:依赖查找---> ctx.getBean(url))。为什么要使用SpringIOC?使用SpringIOC,将实例的产生和管理交给容器去做(可以管理bean的生命周期、可见性及类之间的关系等),开发者本身则可以解放出来聚焦于业务逻辑的实现。3种编程风格两种注入方式:1 构造方法;2 get / set 方法要使用注解,需要开启注解和注解扫描(目前只需要开启注解扫
2020-07-07 22:46:08
170
原创 Spring IOC要点
一 什么是IOCIOC即Inversion of Control,控制反转,是面向对象编程中的一种设计原则,可以用来降低机代码之间的耦合度。Spring IOC是将类的依赖关系和生成交给了Spring容器去管理,至于我们自己的app则可以不需要去关系这些对象的产生了。二 IOC与DI的关系实现IOC有多种方式,比如DI(Dependency Injection 依赖注入)和DL(...
2020-05-03 16:50:29
238
转载 java中的各种锁详细介绍
作者:JYRoy出处:https://www.cnblogs.com/jyroy/p/11365935.htmlJava提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁...
2020-04-07 22:40:50
466
原创 synchronized
synchronized是Java控制多线程同步的,其实现是基于锁。一 锁机制有两种特性1. 互斥性在同一时间内,一个对象锁只允许一个线程持有。互斥性往往也称为操作的原子性。2. 可见性在锁被释放之前,对共享变量所做的修改,对于随后获得该锁的另一个线程是可见的。二synchronized用法1. 加在方法前面,用于同步方法既可以同步静态方法,也可以同步非静态...
2020-04-07 21:56:43
104
原创 JMM Java内存模型
一 硬件内存架构CPU处理速度远大于内存处理速度,因此中间设置有高速缓存(cache,可以有多级)。这样会引发数据的一致性问题,即对于共享的数据而言,怎样保证各个CPU拿到的一致。解决方案:1. 总线加锁。优点:实现简单;缺点:降低CPU吞吐量。2.缓存一致性协议(MESI)当CPU在CACHE中操作数据时,如果该数据是共享变量,数据在CACHE读到寄存器中,进行新修改,...
2020-03-16 22:57:09
199
原创 微服务之spring-cloud
一 什么事微服务微服务就是把一个原本臃肿的项目按照功能模块进行拆分,形成多个功能较为独立和单一的服务,这些服务联合起来可以完成原来整个大服务的功能。二 为什么要微服务化一个服务包含太多功能,当某个部分出现故障,或是需要维护重启时,所有功能模块都会受到影响。如果服务过大,部署时需要的时间也很长,也会对用户体验造成较大影响。微服务化后,对单个小服务的维护不会对其他服务造成影响...
2020-03-15 23:04:09
136
原创 八 tie_breaker参数优化dis_max
案例:搜索title或content中包含java beginner的帖子GET /forum/article/_search{ "query": { "dis_max": { "queries": [ { "match": { "title": "java beginner" }}, ...
2019-09-02 20:54:05
912
原创 七 dis_max--best fields策略
1. 假设数据doc1:title: black cat.content: The cat like eat fish.doc2:title: reddog.content: The dog like eat bone.doc3:title: yellow cat.content: yellow cat look good.doc4:title: wh...
2019-08-29 20:47:33
200
原创 六 多shard场景下relevance score不准确原因
shard中只有一部分的document,默认情况下,IDF是在shard本地计算的。在一个shard中,有多个title中包含Java的document,比如10个。当一个搜索title中包含Java当请求到这个shard到时候,会使用TD/IDF算法:1. 在一个document到title中,Java出现到次数。2. 在所有document的title中,Java出现的次数...
2019-08-28 20:55:53
179
原创 五 boost条件权重控制
默认情况下,搜索条件的权重都是一样的,都是1搜索条件的权重,boost,可以将某个搜索条件的权重加大,此时当匹配这个搜索条件和匹配另一个搜索条件的document,计算relevance score时,匹配权重更大的搜索条件的document,relevance score会更高,当然也就会优先被返回回来GET /forum/article/_search{ "query": {...
2019-08-28 20:38:06
576
原创 四 match的底层实现转化
1、普通match如何转换为term+should{ "match": { "title": "java elasticsearch"}}使用诸如上面的match query进行多值搜索的时候,es会在底层自动将这个match query转换为bool的语法bool should,指定多个搜索词,同时使用term query{ "bool": { "should...
2019-08-28 20:27:00
320
原创 三 查询案例
一 结构化搜索_在案例中实战基于bool组合多个filter条件来搜索数据1、搜索发帖日期为2017-01-01,或者帖子ID为XHDK-A-1293-#fJ3的帖子,同时要求帖子的发帖日期绝对不为2017-01-02select *from forum.articlewhere (post_date='2017-01-01' or article_id='XHDK-A-1293-#f...
2019-08-12 20:13:37
182
原创 二 bitset与caching机制
1. 对于document中的每一个filed,均建立一个bitset,其中存放的值为0(在文档中不存在)和1(在文档中存在)。例如,有6个文档,id和date是其中的两个filed,对于这两个filed分别建立bitset:id:[0, 1, 0, 1, 0, 1] --- id为1的值在第2、4、6个文档中存在。date:[0, 0, 1, 1, 0, 0] ---日期为2019-...
2019-07-22 23:32:12
154
原创 一 term filter搜索
1. 插入数据:POST /forum/article/_bulk{ "index": { "_id": 1 }}{ "articleID" : "XHDK-A-1293-#fJ3", "userID" : 1, "hidden": false, "postDate": "2017-01-01" }{ "index": { "_id": 2 }}{ "articleID" : "KDK...
2019-07-19 00:04:57
250
原创 富爸爸 穷爸爸 随记(1)
要学习变得富有的方法,洞悉金钱运作的原理,让钱为我工作,而不是我为钱工作。1. 面对想要但目前无法负担的物品时穷爸爸:我负担不起。富爸爸:我怎样才能负担的起呢?经常这样问,可以锻炼自己的思维,避免思维惰性。2. 关于学习穷爸爸:努力学习以便找到好工作。富爸爸:努力学习以便可以收购(创建)好的公司。3. 对于孩子的态度穷爸爸:我穷是因为有你。富爸爸:因为有你,...
2019-07-12 22:12:51
128
原创 二十九 document写入流程分析
一 document写入流程--第一版1. document写入流程:(1)document数据首先被写入内存buffer缓冲中。(2)执行commit操作,写commit point到磁盘。(3)buffer中的数据就会写入一个新的index segment。(4)等待在os cache中的index segment被fsync强制刷到磁盘上。(5)步骤(3)中的新index s...
2019-07-09 23:13:50
725
原创 二十八 不停机重建索引&倒排序索引不可变
1、重建索引一个field的设置是不能被修改的,如果要修改一个Field,那么应该重新按照新的mapping,建立一个index,然后将数据批量查询出来,重新用bulk api写入index中批量查询的时候,建议采用scroll api,并且采用多线程并发的方式来reindex数据,每次scoll就查询指定日期的一段数据,交给一个线程即可(1)一开始,依靠dynamic mapping...
2019-07-07 23:33:08
203
原创 二十七 自定义dynamic mapping策略
1. dynamic mapping策略种类3种策略:true:遇到陌生字段,就进行dynamic mappingfalse:遇到陌生字段,就忽略strict:遇到陌生字段,就报错例如:PUT /my_index{ "mappings": { "my_type": { "dynamic": "strict", ---使用strict策略 "...
2019-07-07 18:39:51
916
原创 二十六 mapping root object深入剖析
root object就是某个type对应的mapping json,包括如下几种:1. properties2. metadata(_id, _source, _type)3. setting(analyzer)4. 其它settings(比如include_in_all)例如:PUT /my_index{ "mappings": { "my_type":...
2019-07-07 18:22:36
227
原创 二十五 type底层存储方式
type,是一个index中用来区分类似的数据的,类似的数据,但是可能有不同的fields,而且有不同的属性来控制索引建立、分词器;field的value,在底层的lucene中建立索引的时候,全部是opaque bytes类型,不区分类型的;lucene是没有type的概念的,在document中,实际上将type作为一个document的field来存储,即_type,es通过_type来...
2019-07-03 23:31:27
124
原创 二十四 分词器
1. 默认的分词器standard特点:standard tokenizer:以单词边界进行切分standard token filter:什么都不做lowercase token filter:将所有字母转换为小写stop token filer(默认被禁用):移除停用词,比如a the it等等2. 修改分词器的设置启用english停用词token filterPUT...
2019-07-03 23:18:00
120
原创 二十三 手动操作索引
1. 手动创建索引创建索引的语法PUT /my_index{ "settings": { ... any settings ... }, "mappings": { "type_one": { ... any mappings ... }, "type_two": { ... any mappings ... }, ......
2019-07-03 23:09:29
166
原创 二十二 doc values正排索引、query phase & fetch phase、搜索相关参数、scroll滚动查询
1. doc values正排索引在建立索引的时候,一方面会建立倒排索引,以供搜索用;一方面会建立正排索引,也就是doc values,以供排序,聚合,过滤等操作使用,正排索引基本上存储的就是字段本身。doc values是被保存在磁盘上的,此时如果内存足够,os会自动将其缓存在内存中,性能还是会很高;如果内存不足够,os会将其写入磁盘上。2.query phase & fe...
2019-06-28 21:25:47
274
原创 二十一 _validate验证、结果排序规则、String排序问题、score计算方式
1. _validate可以用来验证搜索是否合法。示例:GET /test_index/test_type/_validate/query?explain{ "query": { "math": { "test_field": "test" } }}结果:{ "valid": false, "error": "org.elastics...
2019-06-27 21:27:44
553
原创 二十 query语法案例
1. match allGET /_search{ "query": { "match_all": {} }}2. match //会进行分词,查询一个filedGET /_search{ "query": { "match": { "title": "my elasticsearch article" }}}3. multi ...
2019-06-25 20:21:36
245
原创 十九 filter与query对比
1. filter与query示例首先存入两个document:PUT /company/employee/2{ "address": { "country": "china", "province": "jiangsu", "city": "nanjing" }, "name": "tom", "age": 30, "join_date": ...
2019-06-25 20:14:41
682
原创 十八 Query DSL
之前常用的GET /_search?xxx=xxx的查询方式,是Query String查询方式。 Query DSL的形式如下:{ QUERY_NAME: { ARGUMENT: VALUE, ARGUMENT: VALUE,... }}{ QUERY_NAME: { FIELD_NAME: { ...
2019-06-25 20:09:48
125
原创 十七 GET与POST方式获取数据
1、search api的基本语法GET /search{}GET /index1,index2/type1,type2/search{}GET /_search{ "from": 0, "size": 10}2、http协议中get是否可以带上request bodyHTTP协议,一般不允许get请求带上request body,但是因为get更加适合描述查询...
2019-06-23 15:16:43
465
原创 十六 mapping复杂数据类型
1、multivalue field{ "tags": [ "tag1", "tag2" ]}建立索引时与string是一样的,数据类型不能混2、empty fieldnull,[],[null]3、object fieldPUT /company/employee/1{ "address": { "country": "china", "provin...
2019-06-23 15:14:37
298
原创 十六 mapping手动建立&指定string是否分词
创建index时可以手动建立mapping,并且可以为mapping添加新的属性filed。但是,不能对已有的filed进行修改。创建mapping:PUT /website{ "mappings": { "article": { ---mapping名称 "properties": { ---属性filed "author_id": { ...
2019-06-23 14:48:54
231
原创 十五 mapping总结
mapping,就是index的type的元数据,每个type都有一个自己的mapping,决定了数据类型,建立倒排索引的行为,还有进行搜索的行为往es里面直接插入数据,es会自动建立索引,同时建立type以及对应的mapping mapping中就自动定义了每个field的数据类型 不同的数据类型(比如说text和date),可能有的是exact value,有的是full text ...
2019-06-22 22:08:26
1010
原创 十四 搜索相关知识点(multi-search、分页搜索、deep paging、query string、_all metadata、mapping、exact value/full text)
1. 常见的搜索模式有如下形式:/_search:所有索引,所有type下的所有数据都搜索出来/index1/_search:指定一个index,搜索其下所有type的数据/index1,index2/_search:同时搜索两个index下的数据/*1,*2/_search:按照通配符去匹 配多个索引/index1/type1/_search:搜索一个index下指定的type的数据...
2019-06-21 22:41:35
363
原创 十三 search结果项解析说明
典型的查询结果如下:GET /_search{ "took": 6, "timed_out": false, "_shards": { "total": 6, "successful": 6, "failed": 0 }, "hits": { "total": 10, "max_score": 1, "hits": [...
2019-06-20 22:08:57
339
原创 十二 ES json数据格式
1. 可读性良好的json格式:[{ "action": { }, "data": { }}]2. bulk api的json格式{"action": {"meta"}}\n{"data"}\n{"action": {"meta"}}\n{"data"}\n例子:POST /forum/article/_bulk{ "index": { "...
2019-06-19 23:31:32
4048
原创 十一 读数据原理
ES读数据流程如下:1. 客户端发送请求到任意一个node,该node成为coordinate node。2. coordinate node对document进行路由(见八 document路由原理),将请求转发到对应的node,此时会使用round-robin随机轮询算法,在primary shard以及其所有replica中选择一个,让读请求负载均衡。3. 接收请求的node返回d...
2019-06-19 21:49:06
130
原创 十 写一致性原理
一 综述在发送增删改操作的时候,可以带上一个consistency参数来指明写一致性是什么。put /index/type/id?consistency=quorum有三种写一致性:1. one:只要有一个primary shard是active活跃可用的,就可以执行。2. all:要求所有的primary shard和replica shard都是活跃的,才可以执行。3. q...
2019-06-19 17:39:14
328
原创 九 document增删改原理
1 客户端选择一个node发送请求过去,这个node就是coordinating node(协调节点)2 coordinating node,对document进行路由,将请求转发给对应的node(primary shard)3 实际的node上的primary shard处理请求(增删改只能由primary shard进行),然后将数据同步到replica node。4 coordinat...
2019-06-14 23:07:07
109
原创 八 document路由原理
1 什么是document路由?一个index会被分为多个片(shard),一个document只能放在一个shard中。在客户端创建document的时候,ES就要决定document放在index的哪个shard上。这个过程称为document routing,即数据路由。2路由算法shard = hash(routing) % number_of_primary_shard...
2019-06-14 22:56:24
191
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人