数据库分片是指将数据拆分到多个数据库服务器上,通常用于扩展。然而,分片会对主要的操作和基础设施带来复杂性,所以,在非必要的情况应该避免对数据库进行分片。
延缓分片的几种方法
- 垂直扩展: 使用更强大的服务器 - 更多的CPU、内存、存储和I/O带宽。比分片更易于管理,同时允许大规模扩展。
- SQL 优化: 调整 SQL 查询和数据库模式,以最大限度地提高单台服务器的性能。需要适当的索引、高效的 SQL 等。
- 缓存: 使用像Redis这样的内存缓存,通过将常用查询缓存在redis中,以避免每次都访问数据库,从而减少数据库负载。
- 从副本读取+负载均衡器: 该方法不仅避免了分片的复杂性,同时又增加了水平读取的可扩展性。
考虑到分片的复杂性,在分片之前应该尽量先使用以上这些方法进行优化。
水平分片与垂直分片
主要有两种方法:
- 垂直分片: 将数据表按列拆进行拆分。例如,一个表用于姓名,另一个表用于电子邮件。
- 水平分片: 将数据表按行进行拆分,均匀分布在多个服务器上。
水平分片的一些方法:
- 基于范围: 根据年龄组等范围值对行进行分割。可能会导致数据分布不均和热点问题。
- 基于目录: 使用查找目录来定位行。允许灵活性,但存在单点故障风险。
- 基于哈希: 应用哈希函数将行均匀地分布在分片上。但需要预先做好容量规划,扩容方面不容易,需要重新进行数据hash迁移。
分片时,使用最简单的方法来满足要求,以最大限度地降低复杂性。在必要时寻求避免。