一图理解数据库分片的关键概念

199 阅读2分钟

数据库分片.jpeg

数据库分片是指将数据拆分到多个数据库服务器上,通常用于扩展。然而,分片会对主要的操作和基础设施带来复杂性,所以,在非必要的情况应该避免对数据库进行分片

延缓分片的几种方法

  • 垂直扩展: 使用更强大的服务器 - 更多的CPU、内存、存储和I/O带宽。比分片更易于管理,同时允许大规模扩展。
  • SQL 优化: 调整 SQL 查询和数据库模式,以最大限度地提高单台服务器的性能。需要适当的索引、高效的 SQL 等。
  • 缓存: 使用像Redis这样的内存缓存,通过将常用查询缓存在redis中,以避免每次都访问数据库,从而减少数据库负载。
  • 从副本读取+负载均衡器: 该方法不仅避免了分片的复杂性,同时又增加了水平读取的可扩展性。

考虑到分片的复杂性,在分片之前应该尽量先使用以上这些方法进行优化

水平分片与垂直分片

主要有两种方法:

  • 垂直分片: 将数据表按列拆进行拆分。例如,一个表用于姓名,另一个表用于电子邮件。
  • 水平分片: 将数据表按行进行拆分,均匀分布在多个服务器上。

水平分片的一些方法:

  1. 基于范围: 根据年龄组等范围值对行进行分割。可能会导致数据分布不均和热点问题。
  2. 基于目录: 使用查找目录来定位行。允许灵活性,但存在单点故障风险。
  3. 基于哈希: 应用哈希函数将行均匀地分布在分片上。但需要预先做好容量规划,扩容方面不容易,需要重新进行数据hash迁移。

分片时,使用最简单的方法来满足要求,以最大限度地降低复杂性。在必要时寻求避免。