微服务间数据跨库关联

在微服务环境下,不同服务之间会出现数据库独立情况,不可避免的需要跨库关联JOIN。例如:订单服务、商品服务、用户服务等,在独立分库后分别对应订单数据库、商品数据库、用户数据库。在查询订单是需要携带用户信息+商品信息,就出现了跨库join的使用场景。

解决方案:

1、数据冗余:在订单数据库订单表中,保存商品和用户完整信息。优点:sql简单且性能高。缺点:空间浪费且商品信息更新需要同步。

2、SQL语句级别的跨库:在select语句中直接连接其他数据库表实现join。优点:简单对系统改动小。缺点:影响数据库性能。

3、基础信息公共表:商品表、用户表等基础信息在每个数据都保存一份。优点:sql简单且性能高。缺点:空间浪费且需要数据同步。同步方案:定时任务、Cancl监听表等。

4、MyCat、ShardingJdbc等中间件。

5、分别调用各服务API获取信息后,代码遍历统一组装Object。注意:减少IO/SQL的次数。使用过期缓存减少远程调用、查询和组装的频率。利用数据结构特点通过代码实现SQL代码处理大数据。

     缺点:代码量大且数据量大时组装耗时大。推荐利用各种数据结构特点、多线程异步分治组装Object提高效率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章