数据库原理及应用难不难

核心提示大家好,欢迎来到停止重构的频道。从本期开始,我们来聊一聊数据库。这里的数据库指的是关系型数据库。也就是表格形式的数据库,如MySQL、Oracle等由于数据库是绝大多数业务系统的核心,所以我们打算分三部分进行深入讲解:1、数据库工作原理与性

大家好,欢迎来到停止重建的频道。从这个问题出发,我们来说说数据库。

这里的数据库指的是关系数据库。即表格数据库,如MySQL、Oracle等。

由于数据库是大多数业务系统的核心,我们打算分三个部分深入解释它:

1.数据库的工作原理和性能调优

2.数据库设计

3.数据库事务和分布式事务

本期我们先来讨论一下数据库的工作原理和性能调优。

数据库工作原理

首先,我们来谈谈数据库是如何工作的。数据库本身是一个独立的软件,请求者需要与数据库建立连接才能使用。与数据库的连接建立后,请求者可以发送操作指令来操作数据库。指令实际上是SQL语句,SQL语句实际上是字符串。数据库处理完SQL语句后,会将结果返回给请求端。

可以看出,请求者使用的数据库是由SQL语句实现的。所以数据库的工作原理其实就是解析SQL语句,根据它们的含义操纵数据。

数据库的工作原理与具体的数据库软件有关。这里以MySQL为例,其他数据库的工作原理也可以作为参考。MySQL有三层:服务层、存储引擎层和数据存储层。

服务层负责接收和解析SQL语句。如果是查询操作,数据库会先查询缓存。如果缓存命中,将直接返回查询结果。这里需要注意的是,虽然大多数关系数据库都支持SQL语句,但是不同的数据库,甚至是同一数据库的不同版本,在支持的SQL语句上都有一定的差异。虽然这些差距不大,但是数据库切换带来的工作量是巨大的。至少所有后端接口都需要重新测试。因此,在系统设计之初就应该设置具体的数据库软件及其版本。

存储引擎层是实际操作数据的部分,存储引擎是可以切换的。不同存储引擎的性能和功能是不同的。至少,不是所有的引擎都支持数据库事务。如果是MySQL,一般保持默认存储引擎。

存储层是数据文件,一般存储在磁盘上。因此,磁盘的读写性能也会直接影响数据库的性能。

性能调整

接下来,我们讨论数据库性能优化。这里的数据库性能优化指的是单个数据库服务器的优化。至于读写分离、碎片存储等问题,会在整体架构的系统性能优化部分详细讲解。

我们经常会遇到一个问题,即使数据库部署在16核32G服务器上,实际运行性能也不高。

如果是MySQL,我们推荐这个配置来优化服务器性能。经Sysbench工具测试,MySQL运行在4核CPU、16G内存、7200 rpm机械硬盘的服务器上。在单个表有100,000行数据的前提下,模拟1000个并发请求。

查询QPS可以达到三万以上,写QPS可以达到八千以上。

此外,数据库性能与数据量有关,尤其是在索引多、数据更新频繁的场景下。测试的时候,最好是在不同的业务场景下测试,比如单个表的10万行、100万行、500万行、1000万行数据。这样,根据业务的增长,我们可以预测未来数据库中的服务器数量何时会增加。增加服务器是为了分开读写和分片存储,以减轻单个服务器的压力。

当然,单个数据库的数据量不可能无限扩大,当账单列表超过1000万行时,MySQL的性能就会直线下降。为了保证单个数据库服务器的数据量不会太大,需要将数据分片存储。也就是多个数据库服务器一起存储所有数据,单个数据库服务器只存储其中的一部分。

关于读写分离、碎片存储等问题,一般后端代码编写不受影响,这里就不介绍了。这一部分的内容将在下面的总体架构部分讨论。

摘要

以上是数据库的工作原理和性能调优,这里介绍实际应用中的关键问题。至于更深层的数据分区,就不介绍了。如果你想知道更多,请查阅官方文件。

 
友情链接
鄂ICP备19019357号-22