做了个网站,有一些用户头像使用的疑问,特此开贴询问大家。现在一个网站,很多地方都需要显示用户头像。比如,帖子(T_Topic)和回帖(T_TopicReply),都要显示发帖者和回帖者的头像。
我现在表的设计:用户表(T_User)里有用户头像字段,这个字段存的是用户头像的url。
为了达到显示用户头像的效果,我想了几种方法,大家比较一下,看看有没有更好的方法。
1.每一次显示头像的时候,通过用户ID去用户表(T_User)读取用户的头像url。
2.用(T_Topic)或者(T_TopicReply) left join T_User。
3.在(T_Topic)或者(T_TopicReply)里增加一个用户头像url字段。上面3种方法里:
第3种读取数据库的效率最高,但是用户如果更换头像以后,之前的数据(比如以前发的帖子或者回帖)头像还是老的;如果去更新之前数据里的头像url的话,对数据库鸭梨太大。况且会增加数据库的存储鸭梨。
第1、2种方法相对于3来说读取数据库会比较耗性能。另外,用户表里的数据我是采用缓存模式存在内存里的,也就是说第一次读取用户信息的时候去需要去读数据库的,后面再读取用户信息的话就直接读内存了。
有没有别的什么比较好的方法?
谢谢!

解决方案 »

  1.   

    你都说完了啊,我认为读取user字段最好,要是你用第3种方式,人家换头像就麻烦了
      

  2.   

    要是能够指定图片格式的话,比如只支持jpg,则可以使用固定下用户头像的保存位置,使用用户id做为用户头像的文件名就ok了,根本用不着去数据库里再查一次。
      

  3.   

    你非要支持多种格式又不想做数据处理的话。还可以自己优化缓存方案吗。你的cach的依赖项是怎么设的,不设不就是和内存表一个意思么,那你还不如用内存hashtable对象,检索的复杂度是1,比内存表快多了。
      

  4.   

    用户表里的数据采用缓存模式存在内存里的 采用的数据结构式Dictionary<string, ClassUser>。
    和Hashtable哪个更加适合。其中ClassUser里有个字段就是用户的头像url
      

  5.   

    用户更改头像的时候顺便以用户的ID做为图片的名称
    在用户的实体类里写一个通过用户ID获取图片地址的方法(注意:这里只需要去Image文件夹里名字为用户ID.jpg就可以了),这样也不用再数据库单独建那个字段。
      

  6.   


    用dictionary就行,比Hashtable还快点。我还做过测试见这个贴子最后。
    http://topic.csdn.net/u/20100701/21/f5350afc-f645-48ef-97be-eac501c077cc.html