淦 Blog

我干了什么 究竟拿了时间换了什么

MySQL架构

MySQL的逻辑架构 最上层的客户端所包含的服务并不是MySQL独有的,大多数基于网络的客户端/服务器工具或服务器都有类似的服务,包括连接处理、身份验证、确保安全性等。 大多数MySQL的核心功能都在第二层,包括查询解析、分析、优化、以及所有的内置函数(例如,日期、时间、数学和加密函数),所有跨存储引擎的功能也都在这一层实现:存储过程、触发器、视图等。 第三层是存储引擎层。存储引擎负责M...

创建高性能的索引

索引基础 索引的类型 在MySQL中,索引是在存储引擎层而不是服务器层实现的。所以,并没有统一的索引标准:不同存储引擎的索引的工作方式并不一样,也不是所有的存储引擎都支持所有类型的索引。 B-tree索引 按照索引列中的数据大小顺序存储的,很适合按照范围来查询。 InnoDB存储引擎有一个被称为自适应哈希索引的特性。当InnoDB发现某些索引值被非常频繁地被访问时,它会在原有的B-...

schema设计与管理

选择优化的数据类型 更小的通常更好 简单为好:整型数据比字符型数据的比较操作代价更低。这里有两个例子:一个是应该将日期和时间存储为MySQL的内置类型而不是字符串类型,另外一个是应该用整型数据存储IP地址。 尽量避免存储NULL:通常情况下最好指定列为NOT NULL,除非明确需要存储NULL值。 整数类型 TINYINT、SMALLINT、MEDIUMINT、INT或BI...

查询性能优化

慢查询基础:优化数据访问 查询后面加上LIMIT子句 严格禁止SELECT*的写法 将重复查询相同的数据缓存起来,需要的时候从缓存中取出 用如下三种方式应用WHERE条件,从好到坏依次 在索引中使用WHERE条件来过滤不匹配的记录。这是在存储引擎层完成的。 使用索引覆盖扫描(在Extra列中出现了Using index)来返回记录,直接从索...

Golang高性能优化

字符串 拼接 strings.Builder 用于通过Builder.Write方法高效地构建字符串。它可以最大限度地减少内存复制。零值可以直接使用。请勿复制非零的 Builder。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 package main import ( "fmt" "strings" ) func main() { var b str...

消息队列之RabbitMQ

架构设计与实现 由 Producer、Broker、Consumer 三个大模块组成。生产者将数据发送到 Broker,Broker 接收到数据后,将数据存储到对应的 Queue 里面,消费者从不同的 Queue 消费数据。 Exchange 称为交换器,它是一个逻辑上的概念,用来做分发,本身不存储数据。流程上生产者先将消息发送到 Exchange,然后 Exchange 会根据一定...

消息队列之Pulsar

Pulsar 是一个开源的分布式消息队列产品,最早是由 Yahoo 开发,现在是 Apache 基金会旗下的开源项目。 架构设计与实现 系统架构 无论是 RocketMQ、RabbitMQ 还是 Kafka,消息都是存储在 Broker 的磁盘或者内存中。客户端在访问某个主题分区之前,必须先找到这个分区所在 Broker,然后连接到这个 Broker 上进行生产和消费。 在集群模式下,为...

消息队列之Kafka

要点 Kafka 的每个 Consumer(消费者)实例属于一个 ConsumerGroup(消费组); 在消费时,ConsumerGroup 中的每个 Consumer 独占一个或多个 Partition(分区); 对于每个 ConsumerGroup,在任意时刻,每个 Partition 至多有 1 个 Consumer 在消费; 每个 ConsumerGroup 都有...

消息队列之RocketMQ

系统架构 基本概念和架构 由 Producer、NameServer、Broker、Consumer 四大模块组成。其中,NameServer 是 RocketMQ 的元数据存储组件。在 5.0 后,还增加了 Proxy 模块,用来支持 gRPC 协议,并为后续的计算存储分离架构做准备。 一个 Topic 可以包含一个或多个MessageQueue,一个 Group 可以订阅一个或多个...

消息队列基础

简介 使用场景 异步处理(可以更快地返回结果,减少等待,自然实现了步骤之间的并发,提升系统总体的性能) 流量控制(隔离网关和后端服务,以达到流量控制和保护后端服务的目的) 服务解耦 作为发布 / 订阅系统实现一个微服务级系统间的观察者模式 连接流计算任务和数据 用于将消息广播给大量接收者 问题和局限性 引入消息队列带来的延迟问题 增加了系统的复杂度 ...