简介 InnoDB存储引擎支持B+树索引,哈希索引,全文索引和空间索引。后两者很少用到,但B+索引和哈希索引就很常见了。
前置知识 B+树 B+树是一种平衡查找树,其中B并不是指二叉树(Binary),而是平衡(Balance)。
MySQL的B+树索引可分为聚焦索引和非聚焦索引。
B+ 树是一种树数据结构,是一个n叉树,每个节点通常有多个孩子,一颗B+树包含根节点、内部节点和叶子节点。B+ 树通常用于数据库和操作系统的文件系统中。 B+ 树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。 B+ 树元素自底向上插入。
Read more →
代码结构简介 在阅读源码之前,我们首先要熟悉MySQL的项目结构。而MySQL由于项目过于庞大,开发人员众多,理解每个文件夹、模块的用途,也是一件非常重要的事。
以下是MySQL的项目路径:
BUILD: 内含在各个平台、各种编译器下进行编译的脚本。如compile-pentium-debug表示在pentium架构上进行编译的脚本。
Client: 客户端工具,如mysql, mysqladmin之类。
Read more →
源码部分 MySQL源码的目录结构 InnoDB存储引擎相关知识 哈希表与哈希索引 数据库应用部分 MySQL数据库设计思想 索引和SQL优化思路
Read more →
了解死信队列 从图中发现知:
生产者发送的消息会经由交换机传送到绑定的队列中,然后经由消费者接受消息,消息一旦被消费者消费后,就会移除队列中,表示整个流程的结束。
但是如果消息没有被消费成功(或者说消息变为了死信),那么正常来说和原来的(正常)队列绑定的消费者就无法消费消息,那么变为死信的消息怎么处理啦!
在正常的业务中,会针对这一部分进行特殊处理,可以考虑指定一个死信交换机,并绑定一个死信队列,当消息变成死信时,该消息就会被发送到该死信队列上,这样就方便我们查看消息失败的原因了。
换句话说就是 没有被消费的消息, 换个地方重新被消费。
整个流程可以表示成
生产者 –> 消息 –> 交换机 –> 队列 –> 变成死信 –> DLX交换机 –>队列 –> 消费者
Read more →
1.RabbitMQ发送消息 对于消息发送方来说:
生产者发送一条消息,正常情况下是通过交换机发送到队列中,再由消费者接受队列中消息,由消费者进行逻辑操作。
但是RabbitMQ在收到消息后,还需要有一段时间才能将消息存入磁盘之中。 并且也并不是为每条消息都做fsync的处理,可能仅仅保存到cache中而不是物理磁盘上。如果RabbitMQ broker正巧发生了崩溃,因为消息还没来得及保存磁盘,消息将会丢失。
2.如何确认消息的发送是否成功? a. 消息发送确认 RabbitMQ底层是利用了AMQP协议进行消息传输,关于消费者和生产者的模型就不再赘述了。
Read more →