数据库架构的演变
没有缓存的Web开发架构
- 架构图
- 这种架构通过数据库访问对象直接访问一个数据库(如通过JDBC指定数据库:jdbc:mysql://localhost:3306/database)存取数据,从而存在一些瓶颈
- 一台机器的磁盘无法存储大量的数据
- 一台机器的内存无法装入数据库的索引
- 无法满足高并发访问
有缓存的Web开发架构
- 架构图
- 引入缓存
后,将常用的数据库查询结果放到缓存中,这样下次要再次查询这些存放在缓存中的数据时,就可以直接到缓存中拿数据,而不用访问数据库,从而缓解了数据库的访问压力; - 进行垂直拆分,将数据进行分类,将不同类型的数据放到不同的数据库中,从而将原来单个数据库的压力分发给多个数据库;
数据库的主从拆分,读写分离
- 架构图
2. 将数据库分成两类数据库 主数据库和从数据库,DAO向主数据库中写数据,从从数据库读取数据 。读写分离就进一步的减轻了数据库的访问压力;
数据库集群
-
架构图
-
即使实现了数据库的读写分离,随着用户的增加,数据库的性能会进一步地面临挑战,这时候需要对数据以及数据结构进一步进行分析优化。;
- 分表分库:将原来同一张表中的数据按行进行拆分,如上图所示,将原表1/3行的数据放到不同机器的不同数据库中,从而解决了原有数据库的存储压力;
- 水平拆分:重新分析原有系统的业务逻辑,从而重新划分数据,比如:容易发生变化的数据放在一起,不容易发生变化的数据放在一起,最后将数据分区进行存储。如上图所示,每一个区都是多台机器上的不同数据库组成的集群;
现今数据库架构
架构图
- 架构图
- 在数据库集群的基础上引入负载均衡机器,这些机器将收到的请求按照当前各个机器的负载情况转发请求。