演进篇|数据库
🚋

演进篇|数据库

Created time
Sep 14, 2021 08:43 AM
Tags
blog
数据库
Priority
Status
Date
Sep 23, 2021
 

池化技术

应用场景

数据库连接、任务队列
  1. 用连接池预先建立数据库连接
  1. 用线程池预先创建线程

二者的共同点

创建过程比较耗时,也比较耗资源。
 

解决思路

把它们放在一个池子里统一管理起来,达到提升性能和资源复用的目的。
这是一种常见的软件设计思想, 池化技术
 

核心思想

空间换时间。
优点:期望使用预创建好的对象来减少频繁创建对象的性能开销,同时还能做到对对象的统一管理,降低对象的使用成本。
缺点:消耗多余内存,可能造成内存的浪费。增加了系统的启动时间。
 

小结

  • 池子的最大最小值很重要,初期可以根据经验来设置
  • 池子中的对象需要在使用之前被创建,这叫作池子的预热。如果池子未经过预热可能会导致系统重启后产生较多的慢请求
  • 池子的核心技术是空间换时间优化方法的实践,所以要关注空间占用情况,避免出现内存泄漏和频繁 GC

 

8 数据库优化方案 1 :主从分离

主从分离可以解决什么问题

解决突发的数据库读流量,是一种数据库 横向扩展 的方法。
即查询流量增加时,我们优先考虑主从分离。

主从分离会带来什么问题

读写分离后, 主从延迟 是一个关键的监控指标,可能会造成写入数据后立刻读数据读取不到的情况。
业界有很多方案可以屏蔽主从分离后访问数据库的细节,就像是访问单一数据库一样。

使用主从分离技术后需要考虑的两个问题

  1. 主从的一致性和写入性能的权衡
    1. 如果要保证所有的从节点都写入成功,那么写入性能一定会受影响。
      如果你只写入主节点就返回成功,那么从节点就有可能出现数据同步失败的情况,从而造成主从的不一致
  1. 主从的延迟问题
    1. 很多诡异的读取不到数据的问题可能都和它有关,如果遇到这类问题,不妨先看看主从延迟的数据。
我们采用的很多组件都会用到主从分离技术,比如:
  • Redis,通过主从复制实现读写分离
  • Elasticsearch 中存储的索引分片也可以被复制到多个节点中
  • 写入到 HDFS 中文件也会被复制到多个 DataNode 中
只是不同的组件对于复制的一致性、延迟要求不同,采用的方案也不同。
但这种设计思想是通用的,是我们需要了解的,这样在学习其他存储组件的时候就能够触类旁通了
 

 

9 数据库优化方案 2 :分库分表

//TODO
 

 

10 发号器:分布式唯一 ID

//TODO
 

 

11 NoSQL

//TODO