/images/hugo/avatar.png

3 Innodb 表空间回收

我的数据库占用空间太大,我把一个最大的表删掉了一半的数据,怎么表文件的大小还是没变?

1.innodb_file_per_table

一个 InnoDB 表包含两部分,即:表结构定义和数据。在 MySQL 8.0 版本以前,表结构是存在以.frm 为后缀的文件里。而 MySQL 8.0 版本,则已经允许把表结构定义放在系统数据表中了。

2 MySQL 如何保证数据不丢失

redo log,bin log 的写入流程

前面我们介绍了 WAL 机制,得到的结论是:只要 redo log 和 binlog 保证持久化到磁盘,就能确保 MySQL 异常重启后,数据可以恢复。今天,我们就再一起看看 MySQL 写入 binlog 和 redo log 的流程,看看 MySQL 是如何保证数据不丢失的。

13. 软件架构设计中的常见问题

哪些常见的软件设计问题

1. 消息队列

1.1 消息系统的实现方式

消息系统采用发布/订阅模式,为了区分不同的消息系统,提出以下两个问题对区分很有帮助:

  1. 如果生产者发送消息的速度比消费者能处理的快,会发生什么?
    • 一般有三种选择: 系统丢弃消息;将消息缓存在队列中;激活背压(流量控制,即阻止生产者发送消息)
    • 如果消息被缓存在队列中,那么队列增长时会发生什么非常重要
    • 如果内存无法容纳所有队列,系统是否会崩溃,还是消息会被写入磁盘
    • 如果消息会落盘,又会如何影响消息传递系统的性能
  2. 如果节点崩溃或者暂时离线,是否会有消息丢失?
    • 持久化需要写入磁盘或者结合复制方案,这些都是有成本的
    • 如果能够接受消息丢失,那么同样的硬件上可以获得更高的吞吐量和更低的延迟

消息传递有如下几种方式:

13. 数据系统的未来

如何构建现代数据系统

1. 构建现代系统

前面我们讨论当前流行的技术,接下来我们综合之前所说的所有知识,来谈谈未来的系统应该是什么样子。

1.1 数据集成

首先每个软件,即使所谓的通用数据库,也是针对特定的使用模式而设计,第一个挑战就是弄清楚软件产品与他们适合运行环境之间的关系。