为什么 MySQL 使用 B+ 树是面试中经常会出现的问题,很多人对于这个问题可能都有一些自己的理解,但是多数的回答都不够完整和准确,大多数人都只会简单说一下 B+ 树和 B 树的区别,但是都没有真正回答 MySQL 为什么选择使用 B+ 树这个问题,我们在这篇文章中就会深入分析 MySQL 选择 B+ 树背后的一些原因。 首先需要澄清的一点是,MySQL 跟 B+ 树没有直接的关系,真正与 B+

Read more »

> 为什么这么设计(Why’s THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响。如果你有想要了解的问题,可以在文章下面留言。 标识符 ID 是我们作为软件工程师再熟悉不过的字段和概念了,我们经常打交道的 MySQL 就经常使用 ID 作为主键,ID 在软件工程甚至生活中都是

Read more »

为什么这么设计(Why's THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响。如果你有想要了解的问题,可以在文章下面留言。 Redis 作为广为人知的内存数据库,在玩具项目和复杂的工业级别项目中都看到它的身影,然而 Redis 却是使用单线程模型进行设计的,这与很多人固有的观

Read more »

作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上使用非常广泛的 MySQL、PostgreSQL,但是一直以来也没有对数据库有一个非常清晰并且成体系的认知,所以最近两个月的时间看了几本数据库相关的书籍并且阅读了 MySQL 的官方文档,希望对各位了解数据库的、不了解数据库的有所帮助。 ![mysql](https://raw.githubuser

Read more »

方案一 :独立数据库自增id 系统每次要生成一个id,都是往独立库的一个独立表里面插入一条数据,获取自增的id。再拿着这个id去往对应的分库分表里面去写 优缺点: 简单好用,但是高并发有瓶颈,单个库每秒承载好几万的并发也是不现实的 方案二 :uuid 好处就是本地系统生成, 缺点:uuid太长了,作为主键性能太差。 而且是无序的,innodb索引页分裂,影响性能 方案三:获取当前系统时间

Read more »

记录结构 页是MySQL中磁盘和内存交互的基本单位,也是MySQL是管理存储空间的基本单位,一般大小为16kb。 指定和修改行格式的语法如下: ``sql CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称 ALTER TABLE 表名 ROW_FORMAT=行格式名称 ` InnoDB目前定义了 4 种行格式:compact、Redundant、Dynamic、Com

Read more »

事务隔离级别 查看数据库的隔离级别命令: select @@tx isolation; 事务并发执行遇到的问题 脏写(Dirty Write) 如果一个事务修改了另一个未提交事务修改过的数据,那就意味着发生了脏写 脏读(Dirty Read) 如果一个事务读到了另一个未提交事务修改过的数据,那就意味着发生了脏读 * 不可重复读 如果一个事务只能读到另一个已经提交的事务修改过的数据,并且其他事务每

Read more »

访问方法 (access method) - 使用全表扫描进行查询 - 使用索引进行查询 - 针对主键或唯一二级索引的等值查询 - 针对普通二级索引的等值查询 - 针对索引列的范围查询 - 直接扫描整个索引 工具表: ```sql CREATE TABLE single_table ( id INT NOT NULL AUTO_INCREMENT, key1 VARCHAR(100), key2

Read more »

1.数据丢失 当某列存在null时,再使用count(name) 查询该列,会丢失值为null的数据,使用count(\*\) 则不会 1. distinct数据丢失 select count(distinct name,mobile) from persion. 如果其中一列为null,即使另外一列有不同的值,那么查询的也会丢失数据 2. select数据丢失 如果某列存在null值,如果执行不等

Read more »

缓存穿透 缓存穿透,是指查询一个数据库一定不存在的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存。 如果数据库查询对象为空,则不放进缓存。 解决方案: 1)最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储

Read more »

解耦 传统模式的缺点:系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦 中间件模式的的优点:将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改 异步 传统模式的缺点: 一些非必要的业务逻辑以同步的方式运行,太耗费时间。 中间件模式的的优点: 将消息写入消息队列,非必要的业务逻辑以异步的方式运

Read more »

简介 跟 Spring Data Redis、Spring Data MongoDB、Spring Data JPA 等项目类似,Spring Kafka 提供了在 Spring 应用中通过简单配置从而访问 Kafka 集群的途径。 本文主要介绍在 Spring 应用中消息生产者如何向 Kafka 集群发送消息、消息消费者如何消费消息、如何批量消费消息以及多消费者组同时消费消息等等。

Read more »

背景介绍 kafka 是最初由 Linkedin 公司开发,使用 Scala 语言编写,Kafka 是一个分布式、分区的、多副本的、多订阅者的分布式 MQ 系统,可以用于 web/nginx 日志,搜索日志,监控日志,访问日志等等。 kafka 目前支持多种客户端语言:java,python,c++,php 等等。 总体结构

Read more »

测试目的 本地单机环境对 Kafka 处理 MQ 消息能力进行压力测试。测试包括对 Kafka 写入 MQ 消息和消费 MQ 消息进行压力测试,根据 10w、100w 和 1000w 级别的消息处理结果,评估 Kafka 的处理性能是否满足项目需求 测试范围及方法 测试使用 Kafka 自带的测试脚本,通过命令对 Kafka 发起写入 MQ 消息和 Kafka 消费 MQ 消息的请求。

Read more »

简介 Zipkin 是 Twitter 开源的调用链分析工具,目前基于 springcloud sleuth 得到了广泛的使用,特点是轻量,使用部署简单。 Pinpoint 是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI 功能强大,接入端无代码侵入。 SkyWalking 是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,U

Read more »

根据 JAVA7 JVM 规范,下图展现了一个典型 JVM 的的内部关键组件。 图上的这些组件将通过下面的两个章节逐一解释。章节一涵盖每一个线程独立创建的组件,章节二包含独立在线程之外的组件。 Threads - JVM System Threads - Per Thread - program Counter (PC)

Read more »

注 Peter Bourgon 原作: Metrics, tracing, and logging 译者:吴晟 原作发表时间: 2017 年 2 月 21 日,转自https://wu-sheng.github.io/me/articles/metrics-tracing-and-logging 这是在 OpenTracing 和分布式追踪领域内广受欢迎的一片博客文章。在构建监控系统时,大家往往在

Read more »

Netty 中的 pipeline 和 channelHandler:它通过责任链设计模式来组织代码逻辑,并且能够支持逻辑的动态添加和删除 . Netty 能够支持各类协议的扩展,比如 HTTP,Websocket,Redis,靠的就是 pipeline 和 channelHandler pipeline 与 channelHandler 的构成

Read more »

Netty 里面数据读写是以 ByteBuf 为单位进行交互的 首先,我们先来了解一下 ByteBuf 的结构

Read more »
0%