平时在我们的项目中需要更新的请求总是很少的。大多时候我们都是查询的请求。这就会导致我们的系统瓶颈就是由于查询请求过多引起的。然而我们都知道更新数据的时候需要加入一个锁。这个锁就是排他锁。查询请求的时候也需要加一个锁,这个锁就是共享锁。这两个锁之间是存在竞争的。那么如何把这两个锁分开呢?这也就是为什么需要读写分离的原因了。读写分离的思想其实也体现了架构中的分而治之的思想。把一个复杂的问题分成若干个小问题,然后逐个击破。当我们使用了读写分离之后,读请求和写请求分别落到不同的地上。而且随着请求的增加,我们还可以追加slave的服务器。这样可以支撑更多的读请求,其实缓存和搜索服务也是一种读写分离的思想体现。
说完了读写分离的思想,我们再来说一说。分库分表的思想。首先说分表,分表其实就只有两种分法,一个是水平成分,一个是垂直拆分水平拆分的思想就是把常用的字段剥离出来,然后单独的加到一个表中。然后两个表做相关的关联操作,平时较多的查询就会查这个单独的表,然后一些不常用的字段。就会在原表中搜索。这样把常用的字段处理出来,可以提高查询速度。
然而,水平拆分是将数据按照字段进行哈希,或者按照时间进行分片儿的操作。把数据分散到不同的表中,然后保证每个表的数据不会太多。常用的算法就是根据ID取模者根据一个特定的参数取模。
水平拆分和垂直拆分也体现了架构中的分而治之的思想。
水平分表和垂直分表可以单独使用,也可以结合使用。选择哪种分表策略取决于具体的应用场景和需求。水平分表适用于数据量大、查询压力大的场景,可以实现数据的并行处理和横向扩展。垂直分表适用于字段之间关联性不强、数据更新频率不同的场景,可以提高查询效率和减少冗余数据。