
其它
森林森
java学习
展开
-
Elasticsearch-并发冲突处理机制
详解并发冲突在电商场景下,工作流程为:读取商品信息,包括库存数量用户下单购买更新商品信息,将库存数减一如果是多线程操作,就可能有多个线程并发的去执行上述的3步骤流程,假如此时有两个人都来读取商品数据,两个线程并发的服务于两个人,同时在进行商品库存数据的修改。假设库存为100件 正确的情况:线程A将库存-1,设置为99件,线程B接着读取99件,再-1,变为98件。如果A,B线程都读取的为100件,A处理完之后修改为99件,B处理完之后再次修改为99件,此时结果就出错了解决方案悲观锁原创 2020-11-24 19:05:38 · 4417 阅读 · 0 评论 -
Elasticsearch-索引文档存储段合并机制(segment merge、policy、 optimize)
索引文档存储段合并机制(segment merge、policy、 optimize)段合并机制由于自动刷新流程每秒会创建一个新的段 ,这样会导致短时间内的段数量暴增。而段数目太多会带来较大的麻烦。 每一个段都会消耗文件句柄、内存和 CPU 运行周期。更重要的是,每个搜索请求都必须轮流检查每个段;所以段越多,搜索也就越慢。Elasticsearch 通过在后台进行段合并来解决这个问题。小的段被合并到大的段,然后这些大的段再被合并到更大的段。段合并的时候会将那些旧的已删除文档 从文件系统中清除。 被删除原创 2020-11-24 17:55:38 · 1765 阅读 · 0 评论 -
Elasticsearch-索引文档写入和近实时搜索原理
索引文档写入和近实时搜索原理基本概念Segments in Lucene众所周知,Elasticsearch 存储的基本单元是 shard , ES 中一个 Index 可能分为多个 shard, 事实上每个 shard 都是一个 Lucence 的 Index,并且每个 Lucence Index 由多个 Segment 组成, 每个Segment 事实上是一些倒排索引的集合, 每次创建一个新的 Document , 都会归属于一个新的Segment, 而不会去修改原来的 Segment 。且每原创 2020-11-24 17:52:07 · 703 阅读 · 0 评论 -
Elasticsearch-数据模型
什么是数据模型数据模型是抽象描述现实世界的一种工具和方法,是通过抽象实体及实体之间联系的形式,用图形化的形式去描述业务规则的过程,从而表示现实世界中事务以及相互关系的一种映射。核心概念:实体:现实世界中存在的可以相互区分的事物或概念称为实体。实体可以分为事物实体和概念实体。例如:一个学生、一个程序员等是事物实体。一门课、一个班级等称为概念实体。实体的属性:每个实体都有自己的特征,利用实体的属性可以描述不同的实体。例如。学生实体的属性为姓名、性别、年龄等数据建模的过程数据建模大致分为三个阶段原创 2020-11-24 15:01:44 · 1215 阅读 · 0 评论 -
Elasticsearch-分布式集群调优策略
1. Index(写)调优职位数据和简历数据,首先都是进入MySQL集群的,我们从MySQL的原始表里面抽取并存储到ES 的Index,而MySQL的原始数据也是经常在变化的,所以快速写入Elasticsearch、以保持Elasticsearch和MySQL的数据及时同步也是很重要的副本数置0如果是集群首次灌入数据,可以将副本数设置为0,写入完毕再调整回去,这样副本分片只需要拷贝,节省了索引过程PUT /my_temp_index/_settings{"number_of_replicas原创 2020-11-24 14:14:23 · 225 阅读 · 0 评论 -
Elasticsearch-集群规划
4.1 我们需要多大规模的集群需要从以下两个方面考虑:1)当前的数据量有多大?数据增长情况如何?2)你的机器配置如何?cpu、多大内存、多大硬盘容量?推算的依据:Elasticsearch JVM heap 最大可以设置32G 。30G heap 大概能处理的数据量 10 T。如果内存很大如128G,可在一台机器上运行多个ES节点实例。备注:集群规划满足当前数据规模+适量增长规模即可,后续可按需扩展两类应用场景:A. 用于构建业务搜索功能模块,且多是垂直领域的搜索。数据量级几千万到数十亿级原创 2020-11-24 14:06:28 · 386 阅读 · 0 评论 -
Elasticsearch-集群环境搭建
集群环境搭建我们搭建一个三个节点的集群环境,为了学习方便,我这边只在一台服务器上来演示主从环境。调整虚拟机内存到3g以上一、节点搭建elasticsearch.yml配置文件说明:配置说明:我们要只需要在之前的基础上,打开配置文件elasticsearch.yml,添加如下配置:cluster.name: my-es #集群名称 ---node.name: node-1 # 节点名称node.master: true #当前节点是否可以被选举为master节点,是:true、否:fal原创 2020-11-24 14:02:21 · 222 阅读 · 0 评论 -
Elasticsearch之企业级高可用分布式集群-概念
概念集群(Cluster)一个Elasticsearch集群由多个节点(Node)组成,每个集群都有一个共同的集群名称作为标识节点(Node)一个Elasticsearch实例即一个Node,一台机器可以有多个实例,正常使用下每个实例都应该会部署在不同的机器上。Elasticsearch的配置文件中可以通过node.master、node.data来设置节点类型。node.master:表示节点是否具有成为主节点的资格true代表的是有资格竞选主节点false代表的是没有资格竞选主原创 2020-11-24 13:47:59 · 276 阅读 · 0 评论 -
Elasticsearch Java Client
ES提供多种不同的客户端:1、TransportClient ES提供的传统客户端,官方计划8.0版本删除此客户端2、RestClient RestClient是官方推荐使用的,它包括两种:Java Low Level REST Client和 Java HighLevel REST Client。 ES在6.0之后提供 Java High Level REST Client, 两种客户端官方更推荐使用 JavaHigh Level REST Client, 使用时加入对应版本的依赖即可Sprin原创 2020-11-24 13:38:41 · 368 阅读 · 0 评论 -
Elasticsearch Suggester智能搜索建议
现代的搜索引擎,一般会具备"Suggest As You Type"功能,即在用户输入搜索的过程中,进行自动补全或者纠错。 通过协助用户输入更精准的关键词,提高后续全文搜索阶段文档匹配的程度。例如在京东上输入部分关键词,甚至输入拼写错误的关键词时,它依然能够提示出用户想要输入的内容如果自己亲手去试一下,可以看到京东在用户刚开始输入的时候是自动补全的,而当输入到一定长度,如果因为单词拼写错误无法补全,就开始尝试提示相似的词。那么类似的功能在Elasticsearch里如何实现呢? 答案就在Suggest原创 2020-11-24 09:03:15 · 1108 阅读 · 0 评论 -
Elasticsearch零停机索引重建
Elasticsearch是一个实时的分布式搜索引擎,为用户提供搜索服务,当我们决定存储某种数据时,在创建索引的时候需要数据结构完整确定下来,与此同时索引的设定和很多固定配置将不能改变。当需要改变数据结构时就需要重建索引,为此,Elasticsearch团队提供了辅助工具帮助开发人员进行索引重建零停机完成索引重建的三种方案方案一:外部数据导入方案1)整体介绍系统架构设计中,有关系型数据库用来存储数据,Elasticsearch在系统架构里起到查询加速的作用,如果遇到索引重建的操作,待系统模块发布原创 2020-11-23 20:59:27 · 618 阅读 · 0 评论 -
Elasticsearch-Filter DSL
Filter DSLElasticsearch中的所有的查询都会触发相关度得分的计算。对于那些我们不需要相关度得分的场景下,Elasticsearch以过滤器的形式提供了另一种查询功能,过滤器在概念上类似于查询,但是它们有非常快的执行速度,执行速度快主要有以下两个原因:过滤器不会计算相关度的得分,所以它们在计算上更快一些。过滤器可以被缓存到内存中,这使得在重复的搜索查询上,其要比相应的查询快出许多。为了理解过滤器,可以将一个查询(像是match_all,match,bool等)和一个过滤器结合起来。原创 2020-11-23 20:44:30 · 542 阅读 · 0 评论 -
Elasticsearch-词条级搜索(term-level queries)
词条级搜索(term-level queries)可以使用term-level queries根据结构化数据中的精确值查找文档。结构化数据的值包括日期范围、IP地址、价格或产品ID。与全文查询不同,term-level queries不分析搜索词。相反,词条与存储在字段级别中的术语完全匹配。PUT /book{ "settings": {}, "mappings": { "properties": { "description": { "type": "t原创 2020-11-23 19:37:16 · 557 阅读 · 0 评论 -
Elasticsearch-Query DSL
https://www.elastic.co/guide/en/elasticsearch/reference/7.3/query-dsl.htmlElasticsearch提供了基于JSON的完整查询DSL(Domain Specific Language 特定域的语言)来定义查询。将查询DSL视为查询的AST(抽象语法树),它由两种子句组成叶子查询子句叶子查询子句 在特定域中寻找特定的值,如 match,term或 range查询。复合查询子句复合查询子句包装其他叶子查询或复合查询,并用于原创 2020-11-23 14:56:26 · 252 阅读 · 0 评论 -
Elasticsearch-地理坐标点数据类型
地理坐标点数据类型地理坐标点地理坐标点是指地球表面可以用经纬度描述的一个点。 地理坐标点可以用来计算两个坐标间的距离,还可以判断一个坐标是否在一个区域中。地理坐标点需要显式声明对应字段类型为 geo_point :PUT /company-locations{ "mappings": { "properties": { "name": { "type": "text" }, "location": { "type": "原创 2020-11-23 14:25:32 · 2074 阅读 · 0 评论 -
Elasticsearch-文档增删改查及局部更新
Elasticsearch文档,即索引库中的数据,会根据规则创建索引,将来用于搜索。可以类比做数据库中的一行数据新增文档新增文档时,涉及到id的创建方式,手动指定或者自动生成POST /索引名称/_doc/{id}POST /my-company-index/_doc/1{"name" : "百度","job" : "小度用户运营经理","payment" : "30000","logo" :"http://www.lgstatic.com/thubnail_120x120/i/i原创 2020-11-23 12:01:14 · 1119 阅读 · 0 评论 -
Elasticsearch-映射操作
索引创建之后,等于有了关系型数据库中的database。Elasticsearch7.x取消了索引type类型的设置,不允许指定类型,默认为_doc,但字段仍然是有的,我们需要设置字段的约束信息,叫做字段映射(mapping)字段的约束包括但不限于:字段的数据类型是否要存储是否要索引分词器创建映射字段PUT /索引库名/_mapping{"properties": {"字段名": {"type": "类型","index": true,"store": true,"analyze原创 2020-11-23 11:35:13 · 228 阅读 · 0 评论 -
Elasticsearch-索引操作
创建索引库Elasticsearch采用Rest风格API,因此其API就是一次http请求,你可以用任何工具发起http请求PUT /索引名称{"settings": {"属性名": "属性值"}}settings:就是索引库设置,其中可以定义索引库的各种属性 比如分片数 副本数put /my-company-index{“acknowledged” : true,“shards_acknowledged” : true,“index” : “my-company-inde原创 2020-11-23 10:59:38 · 277 阅读 · 0 评论 -
Elasticsearch7.3-安装
JDKexport JAVA_HOME=/usr/local/jdk1.8.0_261export JRE_HOME=$JAVA_HOME/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH=${JAVA_HOME}/bin:$PATHelasticsearch下载https://www.elastic.co/cn/downloads/past-releases#elasticsearch下载安装与配置t原创 2020-11-23 10:00:04 · 862 阅读 · 0 评论 -
Elasticsearch之入门
Elasticsearch之入门索引(index)类似的数据放在一个索引,非类似的数据放不同索引, 一个索引也可以理解成一个关系型数据库。类型(type)代表document属于index中的哪个类别(type)也有一种说法一种type就像是数据库的表,比如dept表,user表。注意ES每个大版本之间区别很大:ES 5.x中一个index可以有多种type。ES 6.x中一个index只能有一种type。ES 7.x以后 要逐渐移除type这个概念映射(mapping)mapping原创 2020-11-23 09:31:38 · 151 阅读 · 0 评论