如何解决数据关联查询

在传统数据库查询时,如果要获取的字段在别的库表中,通常会使用join操作获得,但是当数据量越来越大时,join操作会使查询速度越来越慢,这显然是不可取的,那么我们该如何进行查询呢?

调用接口补填数据

在微服务环境下,各个微服务在业务进行过程需要进行的各种查询,由于数据库的拆分,其实不能像以前那样进行 join 操作了,而是需要采用接口调用的方式进行数据补填。比如电商平台中“用户下单”“商家接单”“物流配送”等微服务,由于数据库的拆分,它们已经没有访问用户表与商家表的权限,就不能像以往那样进行 join 操作了。这时,需要重构查询的过程

  1. 查询订单数据,但不执行 join 操作。这样的查询结果可能有 1 万条,但通过翻页,返回给微服务的只是那一页的 20 条数据

  2. 再通过调用“用户注册”与“商家管理”微服务的相关接口,实现对用户与商家数据的补填

这种方式,既解决了跨库关联查询的问题,又提高了海量数据下的查询效率。通过分页后的数据补填,就能有效地提高查询性能

适当增加冗余

在查询订单时,如果要通过用户姓名、联系电话进行过滤,然后再查询时,又该如何设计呢?注意:这里千万不能先过滤用户数据,再去查询订单

我们过去的数据库设计采用的都是3NF(第 3 范式)

  • 第一范式(确保每列保持原子性)
  • 第二范式(确保表中的每列都和主键相关)
  • 第三范式(确保每列都和主键列直接相关,而不是间接相关)

比如在设计一个订单数据表的时候,可以将用户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于用户其它信息(比如姓名、所属公司等)的字段

它能够帮助我们减少数据冗余,然而却带来了频繁的 join 操作,降低了查询性能。因此,为了提升海量数据的查询性能,适当增加冗余,即在订单表中增加用户姓名、联系电话等字段。这样,在查询时直接过滤订单表就好了,查询性能就得到了提高

宽表设计

最后,当系统要在某些查询模块进行订单查询时,可能对各个字段都需要进行过滤查询。这时就不再采用数据补填的方式,而是利用 NoSQL 的特性,采用“宽表”的设计。按照这种设计思路,当系统通过读写分离从生产库批量导入查询库时,提前进行 join 操作,然后将 join 以后的数据,直接写入查询库的一个表中。由于这个表比一般的表字段更多,因此被称为“宽表”

由于 NoSQL 独有的特性,为空的字段是不占用空间的,因此字段再多都不影响查询性能。这样,在日后的查询时,就不再需要 join 操作,而是直接在这个单表中进行各种过滤、各种查询,从而在海量历史数据中实现秒级查询。因此,“订单查询”微服务在数据库设计时,就可以通过NoSQL 数据库建立宽表,从而实现高效的数据查询

如何解决数据关联查询相关推荐

  1. mysql数据关联查询_《MySQL数据库》关联查询

    原标题:<MySQL数据库>关联查询 一.关联查询 1.概念 在查询数据时,所需要的数据不只在一张表中,可能在两张或多张表中.这个时候,需要同时操作这些表来查询数据,即关联查询. 关联查询 ...

  2. java和oracle的关联,Oracle数据关联查询

    今天又有小进步,^_^! 来源:赛迪网    作者:Alizze 关联在Oracle数据查询时会经常用到,灵活的应用关联可以解决很多实际应用的问题.下面给出一些示例: 建表 create table ...

  3. SQL Server使用 LEFT JOIN ON LIKE进行数据关联查询

    这是来新公司写的第一篇文章,使用LEFT JOIN ON LIKE处理一下这种问题: SQL视图代码如下: CREATE View [dbo].[VI_SearchCN] AS --搜索产品的文件 ( ...

  4. 论文简述 | EAO-SLAM:基于集成数据关联的单目半稠密物体级SLAM

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 1 摘要 对象级数据关联和姿态估计在语义SLAM中起着重要作用,但由于缺乏鲁棒和精确的算法,这一问题一 ...

  5. MyBatis框架学习 DAY_03:如何解决无法封装问题 / 一对一关联查询 / 一对多关联查询

    1. 通过查询时自定义别名的方式解决名称不一致而导致的无法封装数据的问题 假设,向用户组数据表(t_group)表中插入一些测试数据: INSERT INTO t_group (name) VALUE ...

  6. mysql的分页怎么不对_mysql一对多关联查询分页错误问题的解决方法

    xml问价中查询数据中包含list,需要使用collection .... .... 这样的查询系统封装的通用分页查询是不对的,所以需要自己sql中加入分页解决 SELECT you.nick_nam ...

  7. java多对多关联数据操作,hibernate实施多对多关联查询时,关联表数据被删除

    hibernate执行多对多关联查询时,关联表数据被删除 本帖最后由 binbb521 于 2012-12-04 11:48:29 编辑 S2SH框架开发的网站,执行两个多对多关系的表查询时,关联两个 ...

  8. 关联查询数据重复怎么办_在设计数据表的时候,是一个宽表好,还是多个维度表好?...

    数据仓库每张表的搭建,主要依赖于这个表在整个数据仓库中的作用和相关意义.首先要清楚这个表的存在是为了解决那些问题,什么角色使用,怎么保证使用者尽可能好的体验解决问题. 从以上所提到的角度去看待问题,拆 ...

  9. mysql 查询两张表结构相同的数据库_利用反射处理多个表结构相同的数据的查询和数据库表的关联...

    最近做一个项目,需要对人口数据进行查询,但是人口数据分布在不同的街道表中,首先进行了数据表结构的统一,每个数据表以街道名开头,然后其他的名字都一样 前期将各个表中的字段也进行了统一 抽象出一张字典表 ...

最新文章

  1. ThinkPHP5.1接收post、get参数
  2. Android进程级别
  3. 大神打造生态链,从F2全网通开始
  4. truncate table 非常慢_你真的知道怎么分析mysql的慢sql吗?
  5. 理解JS的事件循环过程
  6. 奔小康赚大钱 HDU - 2255( 二分图匹配KM算法详解)
  7. Linux 输入子系统原理理解(原创)
  8. Convert.ToDateTime(值),方法可以把一个值转化成DateTime类型。
  9. [转]老婆还是自己好
  10. 快速西门子PLC入门(零基础心得版)
  11. 2022年第十九届五一数学建模竞赛 C题 火灾报警系统问题
  12. 常用Firefox插件大全
  13. python除法运算定律有哪些_小学数学最重要的7个运算定律,都在这里了
  14. vt功能对计算机有影响吗,win7怎么开启vt模拟器?电脑开vt有什么坏处?
  15. MFC 时钟 计算器 日期天数计算
  16. 【真.干货】一篇文章了解关于计算机硬件那些事
  17. 关于Android中RSA数字签名的理解及使用
  18. 华为p40 pro鸿蒙系统体验,华为P40Pro升级鸿蒙系统体验_华为P40Pro升级鸿蒙系统感受...
  19. js中call 的使用, call方法的继承
  20. 计算机系统组装音乐制作型,电脑音乐制作系统、设备购买方案

热门文章

  1. 什么是restful?说说你对restful的理解
  2. 鱼池显示服务器错误502,502+bad+gateway怎么解决
  3. 动态软件测试是什么意思,什么是动态测试?
  4. unique()用法
  5. 业务连续性方案概述【9】
  6. 用于威胁情报分析的虚拟机
  7. 【迁移学习】深度域自适应网络DANN在EEG睡眠质量检测上的应用
  8. php神盾解密,浅谈PHP神盾的解密过程
  9. 8月16最新青龙京东拉库《目前更新的库》
  10. 生产制造管理系统MES