有个关于会员头像应用的问题困惑了很久,请banq和各位道友指教

10-06-01 sonnylys
有个关于会员头像应用的问题困惑了很久,请banq老师和各位道友指教。问题描述如下:
假如我们有个应用系统,分成几个子系统:1、会员系统 2、子系统1 3、子系统2 4、子系统3 。。。

在整个应用系统里,只有一个会员系统,其它的子系统是不定数量的(视客户需求而定)。会员系统在应用里是核心,形成独立的系统和独立的数据库,其它子系统都以会员系统为中心实现单点登录。

问题:会员资料(头像)存储在会员数据库里,假如子系统1里有个评论功能,要显示评论会员的帐号及头像,子系统2里有个换礼记录,也要显示会员的帐号及头像,子系统3里有个中奖会员同样是要显示会员的帐号及头像。。。于是类推。。。
会员头像和子系统1的评论、子系统2换礼记录以及子系统3的中奖会员分别存在不同的数所库里,这样一来,就没办法联合查询获取会员的头像,但如果在数据的存储之时同时将会员头像也存到其它应用表里(如评论表里有会员帐号及头像),这样如果会员更新了头像就麻烦大了;还有一种比较直接的做法就是,先拿到评论,然后根据帐号(因为帐号是不能修改的)去会员库里查会员的资料,找到头像,但这有个很大的问题,如果有1000条评论,就要再查一1000次会员资料!!!这样对系统的开销太大,性能太差。
这问题困扰了很久,请banq老师和各位道友指教。

[该贴被sonnylys于2010-06-02 09:51修改过]

6
sonnylys
2010-06-02 09:56
是我表述不清还是什么原因呢,怎么没人支持下的。。。呵^_^...自己顶一下。

redorange
2010-06-02 20:16
2010年06月01日 13:02 "sonnylys"的内容
会员头像和子系统1的评论、子系统2换礼记录以及子系统3的中奖会员分别存在不同的数所库里,这样一来,就没办法联合查询获取会员的头像 ...


请问为什么不能联合查询?
你的表在不同的种类的数据库,或者不同的计算机上吗?

sonnylys
2010-06-02 21:44
2010年06月01日 13:02 "sonnylys"的内容
你的表在不同的种类的数据库,或者不同的计算机上吗? ...


是的,在不同的数据库。不同的数据库也有可能部署在不同的机器上。

redorange
2010-06-02 22:32
如果你的计算机有很多,说明你原来设想的是一种分布计算的结构,那么应该不怕性能上的问题,大不了将数据分散到不同的计算机。至于如何负载均衡,这个坛子有很多帖子都在讨论。
不过我还是想向你推荐Mysql的federated储存引擎,它能将不同计算机上的不同数据库上表视作mysql的表,从而实现联查。
http://dev.mysql.com/doc/refman/5.1/zh/storage-engines.htmlfederated-description

sonnylys
2010-06-02 22:54
2010年06月02日 22:32 "redorange"的内容
redorange ...


谢谢redorange。
你介绍的知识点我不熟悉,先看看了解下先。

sonnylys
2010-06-04 16:10
帖子好像只能编辑1次?我想将标题中的“请banq和各位道友指教”改成:“请banq老师和各位道友指教”,但好像修改不了。。?

banq
2010-06-04 16:38
据我所知,头像一般显示时才会需要查询图像数据,而一般不可能一页显示1000个头像吧。

sonnylys
2010-06-04 18:55
2010年06月04日 16:38 "banq"的内容
据我所知,头像一般显示时才会需要查询图像数据,而一般不可能一页显示1000个头像吧 ...


是这样的,页面有些列表数据要显示头像。比如:评论列表,最新20条中奖记录之类的,这些列表数据有个头像。
现在的情况是,会员头像的资料在 MemberDB(假设),评论列表的数据在DB2,
最新20条中奖记录数据在DB3。 之所以这样分布,是因为DB2可能是属于客户A的独有应用,他要将数据库部署在他的服务器上;DB3是属于客户B的,他也要将将数据库署在他的服务器上,唯有MemberDB是核心共有的(也就是会员资料库)。 此时要获取DB2中的评列数据且要显示评论者的头像,就出现了跨库现象。

sonnylys
2010-06-04 19:06
2010年06月04日 16:38 "banq"的内容
而一般不可能一页显示1000个头像吧 ...


是的,一页是没这么多数据的,是我的假设不当。但假如一页有50条数据,我现在要遍历这50条数据,找到相应的会员帐号,然后发送50次获取会员头像的查询(且我是直接到数库数获取的,会员资料表里存的是图片的路径,如“/a/b/c.jpg")。这样的话,就产生了 1+50=51次的数据库查询,我觉得我用的笨(办)法太笨拙了,但又想不到其它好的方法。希望能大家讨论指点。

sonnylys
2010-06-05 16:16
想到一种方案,直接用帐号做头像的文件名(将上传的头像文件转成统一的格式,如.jpg)。不过会员头像多了以后,如果要将头像分开到不同目录下又会引起后续问题!

banq
2010-06-06 14:44
2010年06月04日 19:06 "sonnylys"的内容
产生了 1+50=51次的数据库查询,我觉得我用的笨(办)法太笨拙了 ...


这是很正常的,切莫过度设计。

猜你喜欢