作者小汪哥写代码来源小汪哥(ID:xwgcoding)在业务场景中,要想做到有备无患,最好是用集群,没有集群,至少也要做到主从,有了主从,当master挂掉的时候,让从库过来接管,服务就可以继续,否则master需要经过数据恢复和重启的过程,这就可能会拖很长的时间,影响线上业务的持续服务。在了解Redis集群实现之前需要了解redis的主从复制,了解主从复制之前首先要了解分布式系统的理论基石CAP原理。CAPCAP是分布式存储的理论基石.C...
2022-04-20 17:22:22 6197浏览 0点赞 0回复 0收藏
作者小汪哥写代码来源小汪哥(ID:xwgcoding)上一篇文章我们对redis的基本类型及相应的应用场景做了了解,那你知道redis为什么这么快吗redis宕机了怎么办redis的持久化方式有哪些如果你是云服务厂商,你怎么优化你的云版的redis呢本文将对redis的相关原理进行分析。线程IO模型redis是单线程程序的,除了Redis之外,Node.js也是单线程,Nginx也是单线程,但是它们都是服务器高性能的典范。redis单线程也这么快,也要归功于非阻塞I...
2022-04-20 17:07:00 5298浏览 0点赞 0回复 0收藏
作者小汪哥写代码来源小汪哥(ID:xwgcoding)什么是redisRedis是互联网技术领域使用最为广泛的存储中间件,它是「RemoteDictionaryService」的首字母缩写,也就是「远程字典服务」。Redis以其超高的性能、完美的文档、简洁易懂的源码和丰富的客户端库支持在开源中间件领域广受好评。国内外很多大型互联网公司都在使用Redis,比如Twitter、YouPorn、暴雪娱乐、Github、StackOverflow、腾讯、阿里、京东、华为、新浪微博等等,很多...
2022-04-20 17:02:25 6595浏览 0点赞 0回复 0收藏
作者小汪哥写代码来源小汪哥(ID:xwgcoding)本文主要探讨MySQLInnoDB引擎下ACID的实现原理,对于诸如什么是事务,隔离级别的含义等知识请看我前面mysql系列的文章。ACIDMySQL作为一个关系型数据库,以最常见的InnoDB引擎来说,是如何保证ACID的。(Atomicity)原子性:事务是最小的执行单位,不允许分割。原子性确保动作要么全部完成,要么完全不起作用;(Consistency)一致性:执行事务前后,数据保持一致;(Isolation)隔离性:并发...
2022-04-20 16:52:52 5384浏览 0点赞 0回复 0收藏
作者小汪哥写代码来源小汪哥(ID:xwgcoding)上篇文章分享kafkabroker的实现原理、数据的存储结构和消息持久化相关的东西,那消息存储完了之后,怎么被消费端消费呢,本文来聊一聊Kafka消费端的那些事儿。消费者设计1)拉取机制Kafka生产端是推的机制即Push,消费端是拉的机制即Pull。2)Pull的优缺点优点是消费端可以自己控制消息的读取速度和数量;缺点是不知道服务端有没有数据,所以要一直pull或隔一定时间pull,可能要pull多次...
2022-04-20 16:48:08 5590浏览 0点赞 0回复 0收藏
作者小汪哥写代码来源小汪哥(ID:xwgcoding)上篇文章分享了kafka生产端的逻辑,以及消息发送到缓存后由sender线程发送到Broker,那么Broker是怎么进行数据接收和持久化的呢下面我们从Broker的网络设计聊起。Broker网络设计kafka的网络设计和Kafka的调优有关,这也是为什么它能支持高并发的原因。Kafka的网络三层架构首先客户端发送请求全部会先发送给一个Acceptor,broker里面会存在3个线程(默认是3个),这3个线程都是叫做proces...
2022-04-20 16:40:48 5886浏览 0点赞 0回复 0收藏
作者小汪哥写代码来源小汪哥(ID:xwgcoding)kafka是单条发送还是批量发送消息kafka怎么做到单条发送kafka发送消息是顺序的吗生产者什么情况下可能会频繁FullGC消息发送的逻辑上帝视角来看消息发送的流程。生产者的设计消费发送机制:1)序列化器:序列化消息对象转成字节数组,然后通过网络传输。2)分区器:计算消息发往的具体分区;如果显示指定了partition,便不会走分区器。3)消息缓冲池:客户端的消息缓冲池,默认大小32M,见...
2022-04-20 16:14:33 6465浏览 0点赞 0回复 0收藏
作者小汪哥写代码来源小汪哥(ID:xwgcoding)概念Kafka是一种高吞吐量、分布式、基于发布订阅的消息系统,最初由LinkedIn公司开发,使用Scala(JAVA)语言编写,目前是Apache的开源项目。主要解决应用解耦、异步消息、流量削峰等问题。Kafka实际上也是一个主从架构,有一个Controller角色即控制器,协调管理整个集群。关键术语brokerKafka服务器,负责消息存储和转发。topic消息类别,Kafka按照topic来分类消息;似于关系型数据库的...
2022-04-20 16:10:42 5803浏览 0点赞 0回复 0收藏
作者小汪哥写代码来源小汪哥(ID:xwgcoding)“把简单的事情放大了,它就不简单了”前言有人说单表超千万数据就应该分库分表了,这么玩不合理啊。但是对于创新业务来讲,业务系统的设计不可能一上来就预估这么大的容量,成本和工期都不足矣完成系统的开发工作。我觉得对于创新型业务系统的设计,首先满足需求,其次考虑到万一业务井喷发展所要考虑到的临时解决方案,为系统升级预留时间。谁都希望业务井喷,那么它来了!01具体时...
2022-04-20 16:05:32 7945浏览 0点赞 0回复 0收藏
作者小汪哥写代码来源小汪哥(ID:xwgcoding)前言上一篇我们分享了MVCC,知道了MVCC的实现原理。那么事务利用MVCC进行的读取操作称之为一致性读,或者一致性无锁读,大部分文章也称之为快照读。所有普通的SELECT语句在RC、RR隔离级别下都算是一致性读。例如selectfromt;一致性读并不会对表中的任何记录做加锁操作,所以速度非常快。但是上一篇文章中也提到MVCC在RR级别下并不能防止幻读,解决幻读问题靠的是间隙锁,例如:begin;假...
2022-04-20 15:51:38 7688浏览 0点赞 0回复 0收藏
作者小汪哥写代码来源小汪哥(ID:xwgcoding)“面试中经常遇到这个问题,那你知道吗阅读本文,你将了解到:互联网项目mysql一般用什么隔离级别MVCC的原理MVCC能不能解决幻读问题”前言我们知道,所谓MVCC(MultiVersionConcurrencyControl,多版本并发控制)可以提高不同事物的读写、写读操作的并发执行的系统性能,那么为什么会有mvcc就要从事物并发执行会有什么问题开始聊了。事务并发执行遇到的问题第二部分的正文内容从这里开始...
2022-04-20 15:43:36 6428浏览 0点赞 0回复 0收藏
作者小汪哥写代码来源小汪哥(ID:xwgcoding)索引种类聚簇索引「主键索引」(PRIMARYKEY):主键索引一般都是在创建表的时候指定,不指定的话会默认生成一个(rowid)「一个表只有一个主键索引」,特点是「唯一、非空」。「不为空的唯一索引」:如果存在非空的唯一索引,不会生成rowid非聚簇索引(二级索引)「唯一索引」(UNIQUE):唯一索引具有的特点就是唯一性,可以在创建表的时候指定,也可以在创建表后创建。「普通索引」(INDEX):...
2022-04-20 15:35:04 6144浏览 0点赞 0回复 0收藏
作者小汪哥写代码来源小汪哥(ID:xwgcoding)前言你知道索引长什么样吗当磁盘剩余空间较小时,为什么我们加了索引会导致磁盘空间不足为什么多加了几个索引,mysql插入和删除的效率反而下降了呢带着这些问题,我们开始今天的话题。什么是索引索引(Index)是帮助数据库系统高效获取数据的数据结构,数据库索引本质上是以增加额外的写操作与用于维护索引数据结构的存储空间为代价的用于提升数据库中数据检索效率的数据结构。总结一下...
2022-04-20 15:28:45 7908浏览 0点赞 0回复 0收藏
作者小汪哥写代码来源小汪哥(ID:xwgcoding)前言上篇文章《mysql的数据到底是怎么存的(下)mysql系列(4)》我们分享了mysqlinnodb引擎数据落盘的物理位置及物理空间的区分,那逻辑上数据是怎么组织的呢其实关于这个方面的知识,前辈们已经整理的很多了。这里只是按照我的理解整理一下,当一回知识的搬运工。这里我们还是以InnoDB存储引擎为例。innodb逻辑存储结构MySQL的存储结构分为5级:表空间、段、簇、页、行。【表空间TableS...
2022-04-20 15:24:08 1.1w浏览 0点赞 0回复 0收藏
作者小汪哥写代码来源小汪哥(ID:xwgcoding)前言一个优秀的数据库,必然涉及到持久化,有持久化,就有数据落盘的操作。有落盘操作就必然有文件存储的位置规划。而且了解数据库的持久化文件也是了解数据库高可用,可扩展的前提。像Hbase,redis,rocksdb,tidb等数据库都有相通的地方,这个后面有时间分享。InnoDB是一个将表中的数据存储到磁盘上的存储引擎。这样的存储引擎都是把表存储在文件系统上的。当我们想读取数据的时候,...
2022-04-20 15:15:58 5963浏览 0点赞 0回复 0收藏
作者小汪哥写代码来源小汪哥(ID:xwgcoding)前言上篇《VARCHAR(M)到底占用多少个字节mysql系列(2)》分享了VARCHAR(M)占用多少个字节,那VARCHAR最大能存多少个字符呢以及了解这些对我们平时的开发工作中有什么帮助呢那我们就要了解下存储引擎中是怎么来处理数据的。这里我们还是以InnoDB为例。InnoDB数据记录的结构在《执行sql语句时发生了什么mysql系列(1)》一文中讲到,MySQL服务器上负责对表中数据的读取和落盘(即写入磁盘)...
2022-04-20 15:11:25 6796浏览 0点赞 0回复 0收藏
作者小汪哥写代码来源小汪哥(ID:xwgcoding)前言这个问题其实很有迷惑性,问的是字节,不是字符,我们知道在计算机中只能存储二进制数据。所以要搞清楚这个问题就要搞清楚下面2个问题:1.字节和字符的对应关系。2.varchar到底能存多少个字节。为了搞清楚上面两个问题,又必须搞清楚mysql的字符集和比较规则,以及mysql记录的存储结构。这里我们都是以常用的InnoDB引擎为讨论的前提的。如果你了解了上面的问题,你也可以回答下面...
2022-04-20 15:07:20 5452浏览 0点赞 0回复 0收藏
作者小汪哥写代码来源小汪哥(ID:xwgcoding)前言当我们用navicat、mysqlworkbench等mysql的客户端执行一条sql语句后,我们就能得到相应的结果。例如:那么这个过程发生了什么呢执行一条sql就是一次Rpc的调用mysql是一个客户端、服务端的架构。我们平时使用的大部分程序app其实是由两部分组成的,一部分是客户端程序,一部分是服务器程序。以我们常用的微信、qq为例。我们手机里面装的客户端,机房的服务器中运行着server端。我们...
2022-04-20 15:02:33 5126浏览 0点赞 0回复 0收藏