之前在讲表拆分的时候氛围垂直拆分和水平拆分
垂直拆分的查询其实不难,就是从单表变为了多表,而大部分情况下只是对主表的查询多,从表的查询会很少用到,这样的情况下关联查询不需要太多的考虑
水平拆分之前讲了大数据量的情况下根据历史时间来查询,那么今天来说另外一种,还有一只是根据主键id取模后根据这样的规则把数据均匀分布到不同的数据库表中,一般可以以2、5、10来做,那么分页的时候怎么做,用户在查询的时候是不知道你后台怎么查的,他只关心数据的显示,比如我分页显示10条,那么在后台进去查询的时候需要将"10/数据库数量=实际对应每页查询数",比如就用5好了,所有数据都是平均分布到5个不同的数据库中,那么10/5=2,分页的时候需要对这5个数据库查询,那么就是 ' limt row, 2 ',最后合并5次查询的数据来反馈给前端显示。
这是实时的做法,如果不实时,采用缓存或者搜索引擎的时候,可以分别查询一定的数据量来展示。举个栗子,哪怕分页有100多页,一般用户只看前10也,或者20页的数据,那就用20页,每页显示20条数据,20X20/5=80,那么分别同步5个库的80条数据,放入缓存或者搜索引擎中,来展示给用户,这样用户在做查询的时候就非常快,极少数情况下载20页后的数据再去数据库中查。
也许有人会问条件查询、以及排序,如果直接查询数据库的话呢么进行排序会比较难做,甚至不好做,而是用搜索引擎就能很好的解决这个问题。
其实还有一点没讲,会再写1-2篇来结束这次的架构内邀会的总结。近期实在很忙,手上两个产品都要做,抽空总结,公众号更新频率下降了十分抱歉;其中一个产品预期7月底上线,期待与大家见面!