6、跨库关联查询的解决方案?
答:
(1)大变小
不要一次性返回所有结果,采用分页方式一次返回有限小的数据,然后对关联的数据进行补填,完善相关信息后,返回数据给前端。
(2)数据补填
数据需要返回关联信息时,可通过调用关联数据的微服务接口进行数据补填(待关联数据量要小)。
(3)借助缓存
在调用关联数据的微服务接口时,在微服务中增加缓存的设计,补填的时候先查询缓存数据,再读数据库。
(4)一次性调用
在补填数据时,如果逐条数据的补填,会产生多次微服务接口调用;可设计将多条记录的关联ID进行一次性远程调用,一次性查询,一次性补填。
(5)数据冗余
如果数据库采用3NF的设计思路,在进行数据查询时,会涉及到数据关系查询的问题;这时,在设计时,可适当的包含部分冗余数据,将需要用到的另一张表中部分关联查询内容包含到待查询表中,通过数据冗余设计,解决数据跨库查询的问题。
(6)使用宽表
如果查询的过滤条件很多,每次用到的查询条件都不同,查询应该针对查询库进行;同时,为了提高查询库的查询性能,需要在同步到查询库时提前完成join操作,之后将数据直接制作成单表进行分布式存储,这种设计叫“宽表”。在这样的宽表中进行单表查询,可以实现海量数据的秒级查询。