zoukankan      html  css  js  c++  java
  • 针对数据库中处理提取多份实体,而这些实体又分别包含1对多的相关数据情况的性能的架构

    我们在开发中通常会遇到这种问题,
    举个例子:
    我们需要在页面上显示最活跃的文章列表,而且每个文章都有多个关键字。
    通常情况下,我们没有办法通过一条SQL语句实现即获取全部文章而又获取这篇文章的关键字的信息,因为关键字和文章是多对多的关系。
    所以实际情况下,我们一般有2种解决方案:
    第一种:是先获取全部的文章数据,然后在页面上再次针对每篇文章的数据向数据库请求信息。
    第二种:在一条SQL语句中,先实现获取全部文章的SQL语句,然后再根据获取文章的SQL语句得到的文章标识,向标识文章和关键字关系的数据表发出查询请求。在Data层的操作点,则一次处理2个Result。

    以上两种方法是最经典的解决方案,但是都有些问题:
        第一个解决方案的问题是全部信息没有尽量在一次请求中完成,这对数据库所在的服务器和Web所在的服务器不是同一台服务器的情况性能影响很大。
        第二个解决方案虽然较第一个解决方案要好,但是问题是查询本身对数据库的性能依然有一定的消耗。

    我的解决方案:
    在文章的数据表中增加一个字段,Tags字段,类型为nvarchar(max)
    在插入文章的Tag的时候,向两处插入数据:
        一处是Tags字段,将所有的Tag以分隔符","分隔的形式保存。
        另一处是Tag和文章的关系表,通过在数据表间建立关系。

    这种解决方案的优点:
        虽然表面上看起来,该解决方案造成了一定程度的数据冗余,但是面对这种简单的数据(指Tag),采用这种方式能够在获取文章列表和根据Tag获取文章列表的操作中达到最低的性能消耗,而且在Data层的操作的代码反而更简洁。


  • 相关阅读:
    vue打包传递参数配置域名
    相同域名nginx下部署两个vue项目
    vue项目改造服务端渲染
    vue项目使用less全局变量
    postMessage跨域实现localstorage跨域共享
    node_webkit打包成桌面应用程序
    vue项目本地服务器设置既能localhost访问又能手机ip访问
    GATT scan的流程
    Windows下面的常用的快捷键
    把驱动编译进内核和编译成模块
  • 原文地址:https://www.cnblogs.com/csharpsharper/p/1058467.html
Copyright © 2011-2022 走看看