像这种情况,一般小项目开发时用到的较少,所以实操经历真的很有限,只有像阿里、腾讯、华为等大厂有大业务量的项目上才会多用到这种,首先说实用场景,一般数据库表的数据量超过500万条,索引的效率会大幅下降,和全表查询比已经没啥优势可言,这个时候要继续保证查询效率,那就得分表了,分表有两种,一种是横向分表,就是把查询频率高的字段和查询频率低的字段拆分成多个表,用主键或外键进行关联,另一种是纵向分表,就是创建几张一模一样的表,但是表名做区分,比如主表是tablea分表可以是tablea01、tablea02…,表分区的话,就是表里的数据很多的时候,可以按照某种方式将一个表分成几个段比如(partition),比如字段值范围分区、hash分区、list分区等,表分区后查询表数据时不需要特殊处理,但是分表的,查询时,需要根据查询的id和表数据的count,number等去判断查询哪一张表,可以在sqlmap里去做判断;如果数据量特别多,并发情况特别多的情况,光靠分表分区不能再提高效率解决问题,就需要分库了,分库也分为两种,一种是横向分库(异构库),就是分成多个数据库,每个数据库的表不同,所有的数据库表组合成业务的所有数据,这种查询的时候,因为知道哪个表在哪个库,通过sql语句直接可以实现查询,一种是纵向分库,就是多个数据库的表相同,这种查询的时候可以通过dblink把各个库的相同的表的count统计出来,然后根据查询sql的id大小判断去哪个库去查数据,这种可以通过硬编码判断id属于哪一段然后用对应数据库的connection查询数据库,也可以用一些其他插件工具,能够统计各个数据库相同表的count和number做出判断,总之,分库或分表后查询时始终都要经过手动判断业务id所属的库位置或表位置才能正确的去查询,而以前,我一直不这么认为的…
一句话说明数据库分库分表分区及实用场景
最新推荐文章于 2023-10-25 13:27:39 发布