搜索
大数据中国 首页 大数据技术 查看内容
教你怎样玩转千万级别的数据
2013-9-27 13:49 | 查看: 3865| 评论: 0

方法2:用xml类型代替主从表设计,从而达到提高查询性能。

优化和提高数据库的性能,是从一个良好的数据库设计开始的。以一个会议预订系统为例,一个预订会议系统包括了会议时间,会议地点,主持人,参与人,知会人,记录者等相关信息。在的TDD,DDD模型主导的时代,在这儿为了更好的想表达我要阐述的问题,还是以表驱动模型来进行开发。

用户需求:

a:一个会议可能有多个主持人,虽然这种情况比较少,但是也有可能有。

b:一个会议有多个参与人,这个不难理解。

c:一个会议有可能要让某人知晓,这人可以参与或不参与会议,一般为高层。

d:一个会议有可能有零个或者多个记录者。

e:一个会议需要远程视频,投影仪,电脑,麦克风等会议设备中的某些设备。

f:会议预订成功,或者会议时间,会议地点等重要信息修改后,邮件通知与会人员。

常规数据库设计:

a:建一个Meeting的主表,用于存放会议名称,会议地点,会议时间等的相关信息。

b:再建一个MeetingUser的表存储主持人,参与人,知会人,记录者。

c:同样,会议所需要的设备用MeetingDevice表来存储相关的信息。如图:

这样的表结构,是比较常规的设计方法,但是在实际应用中,你会发现一些待改进的问题。比如:

a:在提取一个会议的相关信息时,会连接多个表进行查询。这种查询在很大的程序上影响了数据库性能。

b:在做修改操作时也够呛的,先修改主表的相关信息,再把主表关联的子表信息全部删除重新插入一次,这样的操作是否够吐血了。当然有人精益求精,会比较修改前和修改后的数据,再用增加,删除,修改的手段达到子表数据的更新。这样的操作在有些ORM操作中已经实现了,但当自己code代码来实现的时候,特别是在多次code的时候,感觉总是那么烦心。

吐槽了这么多,是否有更好的解决方案呢?当然,在SQL里,我们可以XML数据类型来消除主从表的设计。如图:

上面的表结构设计,是不是有一个小清新的感觉呢?很明显,可以把第一种表的设计缺陷给消除了。一个会议的相关信息都存储在了一个表的一条记录中,这样的数据看起来是不是更直观呢?

a:获取一个预订会议的详细信息,我不需要进行多个表的连接查询,我要做的是只需用C#的Linq.Xml来解析查询出来的XML字符串即可。

b:修改操作时,我只需要重新组合XML数据,一个Update就更新了与会议相关的信息,操作是不是简单多了。

表面上看这种设计已经完美了,但是用户的需求是无止境的,有一天,你收到了一个需求,查询某个用户参与过的所有会议(就是只要主持人,参与人,或者记录者中包括了这个用户,就把这些记录都给查询出来),Oh!My God  这种表结构设计应该怎么解决这个问题呢?其实可以用XQuery解决这个问题,还没接触过XQuery的那得赶快充一下电了。XQuery中最常用的有 exist(),value()这些函数,这儿就不详细的介绍了,网上搜索一下有很多相关资料,如果有必要,我会把以前项目中用的XQuery技巧与大家分享。

免责声明: 除非特别声明,文章均为投稿或网络转载,仅代表作者观点,与大数据中国网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。如果本文内容有侵犯你的权益,请发送信息至ab12-120@163.com,我们会及时删除
12

最新评论

关闭

站长推荐上一条 /1 下一条

 
 
大数据行业交流
大数据行业交流
大数据求职招聘
大数据求职招聘
站长电话:
15010106923
微信联系:
hb-0310
站长邮箱:
ab12-120@163.com
大数据中国微信

QQ   

版权所有: Discuz! © 2001-2013 大数据.

GMT+8, 2024-5-14 21:52 , Processed in 0.060090 second(s), 23 queries .

返回顶部