zoukankan      html  css  js  c++  java
  • “站内信”设计

    “站内信”设计

      前一段时间做了一个站内信的功能,做之前找了不少相关资料,现在我把主要内容精简出来。

      

      “站内信”是系统内的消息,说白了,“站内信”的实现,就是通过数据库插入记录来实现的。

      “站内信”有两个基本功能。一:点到点的消息传送。用户给用户发送站内信;管理员给用户发送站内信。二:点到面的消息传送。管理员给用户(指定满足某一条件的用户群)群发消息。点到点的消息传送很容易实现,本文不再详述。下面将根据不同的情况,来说说“站内信”的群发是如何实现的(分类中的人数范围是自己假设的,没有什么依据)

      第一种情况,站内的用户是少量级别的。(人数在100一下)

      这种情况,由于用户的数量非常少,因此,没有必要过多的考虑数据库的优化,采用简单的表格,对系统的设计也来的简单,后期也比较容易维护,是典型的用空间换时间的做法。

      数据库的设计(主要字段)如下(转台、分类、样式、等级等不做阐述):表名:Message

      ID:编号;SendID:发送者编号;RecID:接受者编号(如为0,则接受者为所有人);Message:站内信内容;Title:标题;PDate:站内信发送时间;

      如果,某一个管理员要给所有人发站内信,则先遍历用户表,再按照用户表中的所有用户依次将站内信插入到Message表中。这样,如果有56个用户,则群发一条站内信要执行56个插入操作。这个理解上比较简单,比较耗损空间。

      某一个用户登陆后,查看站内信的语句则为:

      Select * FROM Message Where RecID=‘ID’

      第二种情况,站内的用户中量级别的(人数在100到5000)。

      如果还是按照第一种情况的思路。那发一条站内信的后果基本上就是后台崩溃了。因为,发一条站内信,得重复上千个插入记录,这还不是最主要的,关 键是上千乃至上万条记录,Message字段的内容是一样的,而Message有大量的占用存储空间。比方说,Message字段有100个汉字,占用 200个字节,那么5万条,就占用200×50000=10000000个字节=10M。简单的一份站内信,就占用10M,这还让不让人活了。

      因此,将原先的表格拆分为两个表,将Message的主体放在一个表内,节省空间的占用

      数据库的设计如下:

      表名:Message

      ID:编号;SendID:发送者编号;RecID:接受者编号(如为0,则接受者为所有人);MessageID:站内信编号;

      表名:MessageText 

      ID:编号;Message:站内信的内容;Title:标题;PDate:站内信发送时间;

      在管理员发一封站内信的时候,执行两步操作。先在MessageText表中,插入站内信的内容。然后在Message表中给所有的用户插入一条记录,标识有一封站内信。

      这样的设计,将重复的站内信的主体信息(站内信的内容,发送时间)放在一个表内,大量的节省存储空间。不过,在查询的时候,要比第一种情况来的复杂。

      第三种情况,站内的用户是大量级的(5000以上),并且活跃的用户只占其中的一部分。

      数据库的设计和第二种情况一样:

      表名:Message

      ID:编号;SendID:发送者编号;RecID:接受者编号(如为0,则接受者为所有人);MessageID:站内信编号;

      表名:MessageText 

      ID:编号;Message:站内信的内容;Title:标题;PDate:站内信发送时间;

      管理员发站内信的时候,只在MessageText插入站内信的主体内容。Message里不插入记录。

      那么,用户在登录以后,首先查询MessageText中的那些没有在Message中有记录的记录,表示是未读的站内信。在查阅站内信的内容时,再将相关的记录插入到Message中。

      这个方法和第二种的比较起来。如果,活跃用户是100%。两者效率是一样的。而活跃用户的比例越低,越能体现第三种的优越来。只插入有效的记录,那些不活跃的,就不再占用空间了。

  • 相关阅读:
    Java Number类
    Java StringBuffer和StringBuilder类
    Java String类
    Java 日期时间
    Java 数组
    Java 方法
    Java正则表达式
    一步步学习SPD2010--第五章节--处理数据视图(6)--使用XSLT
    一步步学习SPD2010--第五章节--处理数据视图(5)--显示和隐藏内容
    一步步学习SPD2010--第五章节--处理数据视图(4)--应用条件格式
  • 原文地址:https://www.cnblogs.com/personalnote/p/4619121.html
Copyright © 2011-2022 走看看