工作中遇到一个站内信的设计问题。本来想往上查查有啥资料没。没想到看了别人的思路,自己没思路了。就直接转载了。
首先,解释一下什么叫站内信?
百度百科中的解释:
“站内信”是为方便会员商务信件往来而设的服务功能,类似于邮箱,主要由收件箱、发件箱、草稿箱和垃圾箱三部分组成,但该功能仅对网站的注册会员开放。
“站内信”不同于电子邮件,电子邮件通过专门的邮件服务器发送、保存。而“站内信”是系统内的消息,其实就是通过数据库插入记录来实现的。
“站内信”有两个基本功能。一:点到点的消息传送。用户给用户发送站内信,管理员给用户发送站内信。二:点到面的消息传送。管理员给用户(指定满足某一条件的用户群)群发消息。
点到点的消息传送很容易实现,本文不再详述。下面将根据不同的情况,来说说“站内信”的群发是如何实现的。
第一种情况,站内的用户是少量级别的。(几十到上百)
这种情况,由于用户的数量非常少,因此,没有必要过多的考虑数据库的优化,采用简单的表格,对系统的设计也来的简单,后期也比较容易维护,是典型的用空间换时间的做法。
数据库的设计如下:
表名:Message
ID:编号;SendID:发送者编号;RecID:接受者编号(如为0,则接受者为所有人);Message:站内信内容;Statue:站内信的查看状态;PDate:站内信发送时间;
如果,某一个管理员要给所有人发站内信,则先遍历用户表,再按照用户表中的所有用户依次将站内信插入到Message表中。这样,如果有56个用户,则群发一条站内信要执行56个插入操作。这个理解上比较简单,比较耗损空间。
某一个用户登陆后,查看站内信的语句则为:
Select * FROM Message Where RecID=‘ID' OR RecID=0
第二种情况,站内的用户中量级别的(上千到上万)。
如果还是按照第一种情况的思路。那发一条站内信的后果基本上就是后台崩溃了。因为,发一条站内信,得重复上千个插入记录,这还不是最主要的,关
键是上千乃至上万条记录,Message字段的内容是一样的,而Message有大量的占用存储空间。比方说,Message字段有100个汉字,占用
200个字节,那么5万条,就占用200×50000=10000000个字节=10M。简单的一份站内信,就占用10M,这还让不让人活了。
因此,将原先的表格拆分为两个表,将Message的主体放在一个表内,节省空间的占用
数据库的设计如下:
表名:Message
ID:编号;SendID:发送者编号;RecID:接受者编号(如为0,则接受者为所有人);MessageID:站内信编号;Statue:站内信的查看状态;
表名:MessageText
ID:编号;Message:站内信的内容;PDate:站内信发送时间;
在管理员发一封站内信的时候,执行两步操作。先在MessageText表中,插入站内信的内容。然后在Message表中给所有的用户插入一条记录,标识有一封站内信。
这样的设计,将重复的站内信的主体信息(站内信的内容,发送时间)放在一个表内,大量的节省存储空间。不过,在查询的时候,要比第一种情况来的复杂。
第三种情况,站内的用户是大量级的(上百万),并且活跃的用户只占其中的一部分。
大家都有这样的经历,某日看一个网站比较好,一时心情澎湃,就注册了一个用户。过了一段时间,由于种种原因,就忘记了注册时的用户名和密码,也就不再登陆了。那么这个用户就称为不活跃的。从实际来看,不活跃的用户占着不小的比例。
我们以注册用户2百万,其中活跃用户只占其中的10%。
就算是按照第二种的情况,发一封“站内信”,那得执行2百万个插入操作。但是其中的有效操作只有10%,因为另外的90%的用户可能永远都不会再登陆了。
在这种情况下,我们还得把思路换换。
数据库的设计和第二种情况一样:
表名:Message
ID:编号;SendID:发送者编号;RecID:接受者编号(如为0,则接受者为所有人);MessageID:站内信编号;Statue:站内信的查看状态;
表名:MessageText
ID:编号;Message:站内信的内容;PDate:站内信发送时间;
管理员发站内信的时候,只在MessageText插入站内信的主体内容。Message里不插入记录。
那么,用户在登录以后,首先查询MessageText中的那些没有在Message中有记录的记录,表示是未读的站内信。在查阅站内信的内容时,再将相关的记录插入到Message中。
这个方法和第二种的比较起来。如果,活跃用户是100%。两者效率是一样的。而活跃用户的比例越低,越能体现第三种的优越来。只插入有效的记录,那些不活跃的,就不再占用空间了。
以上,是我对群发“站内信”的实现的想法。
分享到:
相关推荐
站内信的数据库设计 一、站内信的概念和特点 站内信是指在网站或平台内部实现的消息传送系统,类似于邮箱,主要由...站内信数据库设计是一个非常重要的课题,对于实现站内信的功能和提高系统的稳定性有着重要的意义。
站内信系统数据库设计是构建在线平台不可或缺的一部分,它允许用户和管理员在系统内部进行通信。与电子邮件不同,站内信完全在系统内部处理,通过数据库记录消息来实现。站内信系统通常包括两种基本功能:一是点对点...
而“站内信”是系统内的消息,说白了,“站内信”的实现,就是通过数据库插入记录来实现的。 “站内信”有两个基本功能。一:点到点的消息传送。用户给用户发送站内信;管理员给用户发送站内信。二:点到面的消息...
- 创建站内信表(Message),包含字段如MessageID(主键)、SenderID(外键)、ReceiverID(外键)、Content等。 - 实现消息的删除功能,通常是在表中增加一个标志位来标记是否已被删除。 ##### 2.4 会员权限管理...
最后,此插件的使用可能涉及到的其他知识点包括:数据库设计(如何存储和检索站内信)、用户界面设计(如何呈现清空选项和提示)、以及服务器配置(如何部署和运行ASP脚本)。通过深入理解这些知识点,我们可以更好...
管理员角色包含以下功能:登录,用户管理,新闻资讯管理,站内信管理,校友论坛管理,系统管理-留言管理,学校简介管理,公告管理,友情链接修改等功能。 用户角色包含以下功能:首页,用户注册,用户登录,在线留言,后台-发送...
学生角色包含以下功能:首页,社团新闻查看,社团招新报名,创建社团,站内信发送,发送站内信成功,社团报名等功能。 用了技术框架: jsp+ servlet + dao + mysql 管理员账号/密码:admin/admin 社长账号/密码: 1/...
毕业设计:Java项目之jsp数信学院电子邮件服务系统(源码 + 数据库 + 说明文档) 论文目录: 第二章 需求分析 3 2.1需求调研 3 2.2可行性分析 3 2.2.1技术的可行性 3 2.2.2经济的可行性 4 2.2.3操作可行性 4 2.2.4...
4. 数据库设计:数据库是在线评判系统的核心组件,需要存储试题、用户信息、比赛信息等数据。 5. 系统安全:在线评判系统需要采取有效措施,以保证系统安全,如用户权限、访问限制等手段。 6. SSH1框架:SSH1是...
7. 私信求助:项目描述中提到如果遇到调试问题或需要指导,可以站内私信求助,这意味着该项目还提供了一定的技术支持和交流平台,有助于解决实际开发过程中遇到的问题。 综上所述,这个项目不仅涉及到了Web应用开发...
站内信管理 客户信息管个人资料管理销售合同管甲 操作日志 记事本管理 管理员 站内信管理 客户信息管系统用户管销售合同管 包含:源码、数据库脚本、论文、环境工具包、相同框架项目的安装教程(在说明文档中)
这篇资源包包含了一套完整的校园社团门户网站的开发资料,涵盖了从设计到实现的全过程,主要技术栈为SSM(Spring、SpringMVC、MyBatis),数据库管理...如果你在使用过程中遇到任何问题,可以通过站内私信寻求帮助。
在遇到调试问题或需要指导时,可以通过站内私信向开发者寻求帮助。 总的来说,这个小区物业管理系统的前台模块设计与实现涉及到了SQLServer数据库的管理和JSP技术的应用,旨在为用户提供便捷、高效的物业管理服务。...
异步框架的设计,底层使用的是Redis的异步队列,使用异步队列实现站内信,点赞,邮件等功能 solr结合IKAnalyzer自定义中文分词,实现搜索引擎 timeline推拉模式结合的时间轴,渲染新鲜事,实现内容的推送 【备注】 ...