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层的操作的代码反而更简洁。


  • 相关阅读:
    一个关于STL list使用 小示例
    c++几个通用工具
    修改pc机的mac地址 以及 mac地址的组成
    win7 下 arp 绑定mac和Ip
    wireshark如何抓取别人电脑的数据包
    WPA破解原理简要——无线网络破解续
    Apache配置代理服务器的方法(2)
    Apache配置代理服务器的方法(1)
    在Linux系统中如何设置APACHE服务器里的后台页面只允许某个IP地址访问
    Apache服务器配置技巧
  • 原文地址:https://www.cnblogs.com/csharpsharper/p/1058467.html
Copyright © 2011-2022 走看看