java面试
一颗向上的草莓
后台开发者,前端爱好者,个人博客:http://catchu.github.io
展开
-
InnoDB MVCC 机制
本文详细的介绍了什么是MVCC?为什么要有MVCC?以及MVCC的内部实现原理:包括Undo Log的版本链是如何组织的,RR、RC两个级别下一致性读是如何实现的等。通过案例、插图,以最通俗易懂的方式,让你彻底掌握MVCC的来龙去脉。1 什么是MVCCMVCC (Multiversion Concurrency Control)中文全称叫多版本并发控制,是现代数据库(包括MySQL、Oracle、PostgreSQL等)引擎实现中常用的处理读写冲突的手段,目的在于提高数据库高并发场景下的...转载 2020-06-29 13:35:18 · 400 阅读 · 1 评论 -
JVM调优
1.Java内存分析工具MAT(Memory Analyzer Tool)安装使用实例2.jmap 命令3.JVM系列 实用命令(jmap、jstat、jstack)4.jvm 性能调优工具之 jstat原创 2020-06-27 21:34:18 · 148 阅读 · 0 评论 -
rocketmq发送事务消息
现在有一个业务场景为了保证数据一致性,可以使用事务消息。教师节学生给老师送花活动,先校验学生和老师是否是师生关系,再判断学生金币是否够,够则扣减学生金币,同时给老师增加相同的花数,对老师收到的鲜花进行全国排名,排名前十的可以获得平台赠送的实体书籍作为奖励。为了保证数据的一致性和高并发,扣减金币之后发送事务消息。核心代码如下:import com.aliyun.openservices.shade.com.alibaba.rocketmq.common.message.Message;impo原创 2020-06-27 18:42:05 · 606 阅读 · 0 评论 -
分布式系统的面试题11
1、面试题zk都有哪些使用场景?2、面试官心里分析zk,zookeeper,你们现在在聊的面试topic,是分布式系统,他其实已经跟你聊完了dubbo以及相关的一些问题,确认,你现在分布式服务框架,rpc框架,基本都有一些认知。可能开始要跟你聊分布式相关的其他问题了。分布式锁这个东西,很常用的,你做java系统开发,分布式系统,可能会有一些场景会用到。最常用的分布式锁就是zookeeper来做分布式锁。其实说实话,问这个问题,一般就是看看你是否了解zk,因为...转载 2020-06-27 13:42:52 · 280 阅读 · 0 评论 -
分库分表的面试题5
1、面试题你们有没有做MySQL读写分离?如何实现mysql的读写分离?MySQL主从复制原理的是啥?如何解决mysql主从同步的延时问题?做了读写分离。配置主库和从库,主库下面挂从库,主库数据发生变更时写到mysql的binlog日志,主库与从库建立连接,同步数据到从库的relay log中继日志,从库起一个sql线程解析relay log日志并执行。高并发下会导致读写延迟,比如主库每秒写并发2000,延迟时间较长,可考虑分库;打开并行复制;如果必须要写数据之后立马读,可以配置读.转载 2020-06-27 11:24:22 · 462 阅读 · 0 评论 -
为什么推荐InnoDB引擎使用自增主键
结论:B树叶子结点和非叶子节点均存储了子节点的指针和数据域,导致非叶子节点容纳的指针减少,故树高比较高;B+树,叶子节点存储数据域,非叶子节点存储子节点指针,所以每页可以容纳更多指针,树高更低,磁盘IO更少。MyISAM的叶子节点存储的是数据所在的地址,还需要根据这个地址查询真正的数据,非聚簇索引结构,数据和索引是分开的;INNODB的叶子节点存储的是主键key和行记录数据,聚簇索引,数据和索引是在一起的。Innodb使用自增或者有升高趋势的(比如雪花算法生成的id)目的是自增的主键是在插入转载 2020-06-26 23:04:35 · 705 阅读 · 0 评论 -
一次线程池未关闭导致的内存泄露问题
背景,运营反馈接口查询越用越卡。排查方案,跳板机登录到服务器,top命令查看,内存占用过高,使用jmap分析:jmap -histo:live 858524Thread类型的对象占用的内存最多。使用jstack命令分析:jstack -l 858524可以看到线程池中有很多线程处于WAITING状态,遗憾的是没有对线程池进行命名,不确定是在哪创建的线程池。在MAT中分析(对本次没实际意义,只单纯使用)使用jmap -dump:format=b,file=f2原创 2020-06-26 22:19:34 · 2396 阅读 · 0 评论 -
分库分表的面试题4
1、面试题分库分表之后,id主键如何处理?2、面试官心里分析其实这是分库分表之后你必然要面对的一个问题,就是id咋生成?因为要是分成多个表之后,每个表都是从1开始累加,那肯定不对啊,需要一个全局唯一的id来支持。所以这都是你实际生产环境中必须考虑的问题。3、面试题剖析(1)数据库自增id这个就是说你的系统里每次得到一个id,都是往一个库的一个表里插入一条没什么业务含义的数据,然后获取一个数据库自增的一个id。拿到这个id之后再往对应的分库分表...转载 2020-06-26 16:19:41 · 192 阅读 · 0 评论 -
分库分表的面试题3
1、面试题如何设计可以动态扩容缩容的分库分表方案?2、面试官心里分析(1)选择一个数据库中间件,调研、学习、测试(2)设计你的分库分表的一个方案,你要分成多少个库,每个库分成多少个表,3个库每个库4个表(3)基于选择好的数据库中间件,以及在测试环境建立好的分库分表的环境,然后测试一下能否正常进行分库分表的读写(4)完成单库单表到分库分表的迁移,双写方案(5)线上系统开始基于分库分表对外提供服务(6)扩容了,扩容成6个库,每个库需要12个表,你怎么来增加更多库...转载 2020-06-26 16:08:41 · 295 阅读 · 0 评论 -
分库分表的面试题2
1、面试题现在有一个未分库分表的系统,未来要分库分表,如何设计才可以让系统从未分库分表动态切换到分库分表上?可以采用停服清洗数据和双写。我们采用的双写,用户新增修改操作往两份数据库上都写,老用户走老接口从老数据库中查询,新用户走新接口从新数据库查,注意需要核对新老版本数据是否全一样(可以写程序跑),一般新版本发布几天后,90%用户会更新到最新版,慢慢基本都走新接口了,待某次版本强升之后,老版本数据可以去掉了。2、面试官心里分析你看看,你现在已经明白为啥要分库分表了,你也知道常用的..转载 2020-06-26 15:55:32 · 266 阅读 · 0 评论 -
分库分表的面试题1
1、面试题为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?你们具体是如何对数据库如何进行垂直拆分或水平拆分的?分库的目的是为了提高并发度,简单来说就是TPS,单个数据库每秒并发2000都非常高了,一般保持在1000左右;分表示为了提高查询速度,简单来说就是QPS,单表数据量大查询慢,可以拆分成多个表;sharding-jdbc和mycat以及自研组件。sharding-jdbc支持分库分表,读写分离,柔性事.转载 2020-06-26 15:28:07 · 715 阅读 · 0 评论 -
【mysql】关于InnoDB存储引擎 text blob 大字段的存储和优化
最近在数据库优化的时候,看到一些表在设计上使用了text或者blob的字段,单表的存储空间已经达到了近100G,这种情况再去改变和优化就非常难了一、简介为了清楚大字段对性能的影响,我们必须要知道innodb存储引擎的处理方式:1、一些知识点1.1 在InnoDB 1.0.x版本之前,InnoDB 存储引擎提供了Compact和Redundant(Redundant 格式是为兼容之前版本而保留的)两种格式来存放行记录数据,compact 和 redundant 合称为Antelope...转载 2020-06-24 17:33:04 · 534 阅读 · 0 评论 -
mysql的text与off-page
经常遇到这样的问题:表中的大字段列(text)怎么处理?是应该独立成一张表,还是尽量变成varchar,对性能到底有什么影响。先来看一些知识点1.innodb_page_size在innodb引擎下(5.6),有一个参数innodb_page_size,默认值是16k。(PS: 这个参数在数据库初始化的时候就要放在my.cnf中,如果已经创建了表再修改此参数,mysql就会启动不起来)show VARIABLES like '%innodb_page_size%'--------.转载 2020-06-24 16:11:32 · 704 阅读 · 0 评论 -
详细解析Redis中的布隆过滤器及其应用
什么是布隆过滤器布隆过滤器(Bloom Filter)是由Howard Bloom在1970年提出的一种比较巧妙的概率型数据结构,它可以告诉你某种东西一定不存在或者可能存在。当布隆过滤器说,某种东西存在时,这种东西可能不存在;当布隆过滤器说,某种东西不存在时,那么这种东西一定不存在。布隆过滤器相对于Set、Map 等数据结构来说,它可以更高效地插入和查询,并且占用空间更少,它也有缺点,就是判断某种东西是否存在时,可能会被误判。但是只要参数设置的合理,它的精确度也可以控制的相对精确,只会有小小的误判概转载 2020-06-24 15:00:26 · 255 阅读 · 0 评论 -
详解布隆过滤器的原理、使用场景和注意事项
大意是不同的数据结构有不同的适用场景和优缺点,你需要仔细权衡自己的需求之后妥善适用它们,布隆过滤器就是践行这句话的代表。什么是布隆过滤器本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的。实现原理HashMap 的问题.原创 2020-06-24 14:58:40 · 218 阅读 · 0 评论 -
QPS的计算
QPS = req/sec =请求数/秒Q:如何根据日志查看一个服务的qpsA:一般access.log是记录请求的日志,tail -f XXX.access.log,可发现格式如下:前面是请求的时间,后面有接请求的方法名字,那么我们要统计getCart的qpscat osp-cart.api.vip.com_access.log | grep getCart | awk '{print $2}' | awk -F '.' '{print $1}' | ...转载 2020-06-23 21:44:54 · 1670 阅读 · 0 评论 -
解读mysql的可重复读、幻读及实现原理
事务隔离级别有四种,mysql默认使用的是可重复读,mysql是怎么实现可重复读的?为什么会出现幻读?是否解决了幻读的问题?一、事务的隔离级别Read Uncommitted(未提交读)在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。读取未提交的数据,也被称之为脏读(Dirty Read)。该级别用的很少。Read Committed(提交读)这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变,换句话说就是事原创 2020-06-22 09:53:43 · 532 阅读 · 0 评论 -
理解StackOverflowError与OutOfMemoryError
之前对于StackOverflowError和OutOfMemoryError这2个错误一直理解得不太清楚。就专门去看了下源代码,找出了这2个异常引发的原因。就对应与了相应的例子:1、StackOverflowError源代码解释说:抛出这个错误是因为递归太深.其实真正的原因是因为Java线程操作是基于栈的,当调用方法内部方法也就是进行一次递归的时候就会把当前方法压入栈直到方法内部的方法执行完全之后,就会返回上一个方法,也就是出栈操作执行上一个方法。e.g.:public class转载 2020-06-19 09:39:16 · 207 阅读 · 0 评论 -
关于栈上分配和TLAB的理解
引言我们知道,一般在java程序中,new的对象是分配在堆空间中的,但是实际的情况是,大部分的new对象会进入堆空间中,而并非是全部的对象,还有另外两个地方可以存储new的对象,我们称之为栈上分配以及TLAB栈上分配为什么需要栈上分配在我们的应用程序中,其实有很多的对象的作用域都不会逃逸出方法外,也就是说该对象的生命周期会随着方法的调用开始而开始,方法的调用结束而结束,对于这种对象,是不是该考虑将对象不在分配在堆空间中呢?因为一旦分配在堆空间中,当方法调用结束,没有了引用指向该对象,该对转载 2020-06-19 09:32:06 · 198 阅读 · 0 评论 -
RocketMQ的原理与实践
分布式消息系统作为实现分布式系统可扩展、可伸缩性的关键组件,需要具有高吞吐量、高可用等特点。而谈到消息系统的设计,就回避不了两个问题:消息的顺序问题 消息的重复问题RocketMQ作为阿里开源的一款高性能、高吞吐量的消息中间件,它是怎样来解决这两个问题的?RocketMQ 有哪些关键特性?其实现原理是怎样的?关键特性以及其实现原理一、顺序消息消息有序指的是一类消息消费时,能按照发送的顺序来消费。例如:一个订单产生了 3 条消息,分别是订单创建、订单付款、订单完成。消费时,要按照这个原创 2020-06-14 19:08:33 · 233 阅读 · 0 评论 -
如何保证 RocketMQ 不丢失消息
最近看了@JavaGuide发布的一篇『面试官问我如何保证Kafka不丢失消息?我哭了!』,这篇文章承接这个主题,来聊聊如何保证 RocketMQ 不丢失消息。0x00. 消息的发送流程一条消息从生产到被消费,将会经历三个阶段:生产阶段,Producer 新建消息,然后通过网络将消息投递给 MQ Broker 存储阶段,消息将会存储在 Broker 端磁盘中 消息阶段, Consumer 将会从 Broker 拉取消息以上任一阶段都可能会丢失消息,我们只要找到这三个阶段丢失消息原因..原创 2020-06-14 11:30:51 · 388 阅读 · 0 评论 -
RocketMQ消息消费方式 推拉模式
RocketMQ消息消费本质上是基于的拉(pull)模式,consumer主动向消息服务器broker拉取消息。consumer被分为2类:MQPullConsumer和MQPushConsumer,其实本质都是拉模式(pull),即consumer轮询从broker拉取消息。 区别:MQPushConsumer方式,consumer把轮询过程封装了,并注册MessageListener监听器,取到消息后,唤醒MessageListener的consumeMessage()来消费,对用户而言,感觉消原创 2020-06-14 10:36:52 · 2196 阅读 · 1 评论 -
Rocketmq集群consumer消费(同组及不同组)
一机器部署1、机器组成7台机器,均为16G内存每台服务器均有4个CPU,2核2、运行环境配置3、刷盘方式每台机器master机器均采用异步刷盘方式二、同组consumer均衡消费queue1、评测目的测试同一个consumerGroup组的所有consumer均衡消费同一个topic的所有queue。2、评测指标master机器个数topic的队列数consumerGr...原创 2020-06-14 09:53:38 · 15795 阅读 · 5 评论 -
RocketMQ异常:No route info of this topic
一.RocketMQ客户端运行时异常:exception:com.alibaba.rocketmq.client.exception.MQClientException: No route info of this topic, yunlian-truck-websocket-testSee https://github.com/alibaba/RocketMQ/issues/44 for further details.at com.alibaba.rocketmq.client.impl..转载 2020-06-13 22:56:00 · 4279 阅读 · 0 评论 -
Java集合框架常见面试题
剖析面试最常见问题之Java集合框架1.1 集合概述1.1.1 说说List,Set,Map三者的区别?List(对付顺序的好帮手):List接口存储一组不唯一(可以有多个元素引用相同的对象),有序的对象 Set(注重独一无二的性质):不允许重复的集合。不会有多个元素引用相同的对象。 Map(用Key来搜索的专家):使用键值对存储。Map会维护与Key有关联的值。两个Key可以引用相同的对象,但Key不能重复,典型的Key是String类型,但也可以是任何对象。1.1.2 集合框架底...转载 2020-06-12 10:19:24 · 159 阅读 · 0 评论 -
延时队列的实现方案
一、延时队列的应用什么是延时队列?顾名思义:首先它要具有队列的特性,再给它附加一个延迟消费队列消息的功能,也就是说可以指定队列中的消息在哪个时间点被消费。延时队列在项目中的应用还是比较多的,尤其像电商类平台:1、订单成功后,在30分钟内没有支付,自动取消订单2、外卖平台发送订餐通知,下单成功后60s给用户推送短信。3、如果订单一直处于某一个未完结状态时,及时处理关单,并退还库存4、淘宝新建商户一个月内还没上传商品信息,将冻结商铺等。。。。上边的这些场景都可以应用延时队列解决。转载 2020-06-11 21:20:38 · 260 阅读 · 0 评论 -
集群高可用、哨兵、持久化
小伙子你好,之前问过了你基础知识以及一些缓存的常见几个大问题了,那你能跟我聊聊为啥Redis那么快么?哦,帅气迷人的面试官您好,我们可以先看一下关系型数据库跟Redis本质上的区别。Redis采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由C语言编写,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。 完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。它的,数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);.转载 2020-06-11 18:39:19 · 185 阅读 · 0 评论 -
Redis基础
小伙子您好,看你简历上写了你项目里面用到了Redis,你们为啥用Redis?心里忍不住暗骂,这叫啥问题,大家不都是用的这个嘛,但是你不能说出来。认真回答道:帅气迷人的面试官您好,因为传统的关系型数据库如Mysql已经不能适用所有的场景了,比如秒杀的库存扣减,APP首页的访问流量高峰等等,都很容易把数据库打崩,所以引入了缓存中间件,目前市面上比较常用的缓存中间件有Redis 和 Memcached 不过中和考虑了他们的优缺点,最后选择了Redis。至于更细节的对比朋友们记得查阅Redis 和 Me转载 2020-06-11 16:49:01 · 191 阅读 · 0 评论 -
对Spring事务传播行为的理解
前言大家好,我是敖丙!最近在重新整理 Spring 事务相关的内容,在看Spring 事务传播行为这块内容的时候,发现了这篇优秀的文章,分享一下。Spring在 TransactionDefinition 接口中规定了 7 种类型的事务传播行为。事务传播行为是 Spring 框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。这是 Spring 为我们提供的强大的工具箱,使用事务传播行可以为我们的开发工作提供许多便利。但是人们对他的误解也颇多,你一定也听过“service 方法事..转载 2020-06-11 15:58:35 · 321 阅读 · 0 评论 -
订单缓存查询实践
订单缓存实践 最近在做订单缓存查询相关需求,记录下该过程中缓存查询考虑的几个问题以及处理方案。缓存穿透 实际场景中使用缓存都是先去缓存中查询,如果缓存没有命中,在去查询数据库并将结果缓存。如果查询一个在系统中根本就不存在的数据,就会造成每次请求都会穿透缓存去查询数据库。如果出现大量的缓存穿透(或者恶意攻击),就会对数据库造成比较大的压力。处理方案 对于数据库中不存在的数据,存储特定的值表示数据不存在。在发生insert之后将缓存中对应数据移除,避免在数据生成之后缓存中查询还是NUL原创 2020-06-11 15:56:37 · 476 阅读 · 0 评论 -
说一下Zookeeper的ZAB协议
Zab(Zookeeper Atomic Broadcast)是为ZooKeeper协设计的崩溃恢复原子广播协议,它保证zookeeper集群数据的一致性和命令的全局有序性。概念介绍在介绍zab协议之前首先要知道zookeeper相关的几个概念,才能更好的了解zab协议。 集群角色 Leader:同一时间集群总只允许有一个Leader,提供对客户端的读写功能,负责将数据同步至各个节点; Follower:提供对客户端读功能,写请求则转发给Leader处理,当Leader崩溃失转载 2020-06-11 15:21:07 · 178 阅读 · 0 评论 -
HashMap 为什么线程不安全
前言:我们都知道HashMap是线程不安全的,在多线程环境中不建议使用,但是其线程不安全主要体现在什么地方呢,本文将对该问题进行解密。1.jdk1.7中的HashMap在jdk1.8中对HashMap做了很多优化,这里先分析在jdk1.7中的问题,相信大家都知道在jdk1.7多线程环境下HashMap容易出现死循环,这里我们先用代码来模拟出现死循环的情况:1publicclass HashMapTest { 2 3public static void main(String[] args)转载 2020-06-11 14:49:42 · 131 阅读 · 0 评论 -
什么是ZooKeeper?
前言上次写了一篇什么是消息队列?以后,本来想入门一下Kafka的(装一下环境、看看Kafka一些概念啥的)。后来发现Kafka用到了ZooKeeper,而我又对ZooKeeper不了解,所以想先来学学什么是ZooKeeper,再去看看什么是Kafka。ZooKeeper相信大家已经听过这个词了,不知道大家对他了解多少呢?我第一次听到ZooKeeper的时候是在学Eureka的时候(外行人都能看懂的SpringCloud,错过了血亏!),同样ZooKeeper也可以作为注册中心。后面听到ZooK.转载 2020-06-11 10:18:38 · 241 阅读 · 0 评论 -
超干货!为了让你彻底弄懂MySQL事务日志,我通宵肝出了这份图解!
目前数据库的类型主要分为两种,一种是关系型数据库,另一种是非关系型数据库(NoSQL)。而我们今天的主角MySQL就是关系型数据库中的一种。本文结构1关系型数据库与NoSQL关系型数据库,顾名思义,是指存储的数据之间具有关系。这种所谓的关系通常用二维表格中的行列来表示,即一个二维表的逻辑结构能够反映表中数据的存储关系。概念总是拗口难懂的。那么简单来说,关系型数据库的存储就是按照表格进行的。数据的存储实际上就是对一个或者多个表格的存储。通过对这些表格进行分类、合并、连接或者选...转载 2020-06-08 21:22:08 · 374 阅读 · 0 评论 -
redis设置过期时间和过期策略
在为key设置过期时间需要注意的事项1、 DEL/SET/GETSET等命令会清除过期时间在使用DEL、SET、GETSET等会覆盖key对应value的命令操作一个设置了过期时间的key的时候,会导致对应的key的过期时间被清除。//设置mykey的过期时间为300s127.0.0.1:6379>setmykeyhelloex300OK//查看过期时间127.0.0.1:6379>ttlmykey(integer)294//使用set命令覆盖mykey...原创 2020-06-08 20:27:48 · 2271 阅读 · 0 评论 -
Explain执行计划中各个字段的含义
Explain有什么用当Explain与SQL语句一起使用时,MySQL会显示来自优化器关于SQL执行的信息。也就是说,MySQL解释了它将如何处理该语句,包括如何连接表以及什么顺序连接表等。 表的加载顺序 sql的查询类型 可能用到哪些索引,哪些索引又被实际使用 表与表之间的引用关系 一个表中有多少行被优化器查询 ..... Explain有哪些信息Explain执行计划包含字段信息如下:分别是id、select_type、table、...原创 2020-06-08 17:03:49 · 3051 阅读 · 0 评论 -
ES集群(elasticsearch)
为什么要用ES集群?Elasticsearch(ES)是一个基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎。Elasticsearch还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,可以在极短的时间内存储、搜索和分析大量的数据。用户对数据进行新建或编辑的操作,这些数据都会被存在ES中,当用户使用搜索功能对想要的目标数据进行搜索时,逻辑流程如下:客户端传入搜索的参数 - 调用服务端搜索接口 - 服务端通过接口实现去ES中查询已储存的现成的数据 -转载 2020-06-07 22:12:25 · 1445 阅读 · 0 评论 -
ElasticSsearch面试题
1.为什么要使用Elasticsearch? 因为在我们商城中的数据,将来会非常多,所以采用以往的模糊查询,模糊查询前置配置,会放弃索引,导致商品查询是全表扫面,在百万级别的数据库中,效率非常低下,而我们使用ES做一个全文索引,我们将经常查询的商品的某些字段,比如说商品名,描述、价格还有id这些字段我们放入我们索引库里,可以提高查询速度。2.Elasticsearch是如何实现Master选举的? Elasticsearch的选主是ZenDiscovery模块负责的,主要包含Ping(节转载 2020-06-07 21:15:55 · 559 阅读 · 0 评论 -
Zookeeper入门
面试常常被要求「熟悉分布式技术」,当年搞 “XXX管理系统” 的时候,我都不知道分布式系统是个啥。分布式系统是一个硬件或软件组件分布在不同的网络计算机中上,彼此之间仅仅通过消息传递进行通信和协调的系统。计算机系统从集中式到分布式的变革伴随着包括分布式网络、分布式事务、分布式数据一致性等在内的一系列问题和挑战,同时也催生了一大批诸如ACID、CAP和BASE等经典理论的快速发展。为了解决分布式一致性问题,涌现出了一大批经典的一致性协议和算法,最为著名的就是二阶段提交协议(2PC),三阶段提交协议(..转载 2020-06-07 17:12:55 · 499 阅读 · 0 评论 -
ES在数据量很大的情况下如何提高查询效率?生产环境如何部署es
一、性能优化的杀手锏——filesystem cache你往es里写的数据,实际上都写到磁盘文件里去了,查询的时候,操作系统会将磁盘文件里的数据自动缓存到filesystem cache里面去。es-search-processes 的搜索引擎严重依赖于底层的filesystem cache,你如果给filesystem cache更多的内存,尽量让内存可以容纳所有的idx segment file索引数据文件,那么你搜索的时候就基本都是走内存的,性能会非常高。...原创 2020-06-07 16:54:40 · 664 阅读 · 1 评论