群发“站内信”的实现

在很多网站系统(如CMS系统,SNS系统等),都有“站内信”的功能。

“站内信”不同于电子邮件,电子邮件通过专门的邮件服务器发送、保存。而“站内 信”是系统内的消息,说白了,“站内信”的实现,就是通过数据库插入记录来实现的。

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

第一种情况,站内的用户是少量级别的。(几十到上百)

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

数据库的设计如下:表名: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%。两者效率是一样的。而活跃 用户的比例越低,越能体现第三种的优越来。只插入有效的记录,那些不活跃的,就不再 占用空间了。

以上,是我对群发“站内信”的实现的想法。也欢迎各位提出自己的建议,大家互相 借鉴,共同进步。

时间: 2024-07-29 01:15:44

群发“站内信”的实现的相关文章

分享网站群发站内信数据库表设计_MsSql

"站内信"不同于电子邮件,电子邮件通过专门的邮件服务器发送.保存.而"站内信"是系统内的消息,说白了,"站内信"的实现,就是通过数据库插入记录来实现的. "站内信"有两个基本功能.一:点到点的消息传送.用户给用户发送站内信:管理员给用户发送站内信.二:点到面的消息传送.管理员给用户(指定满足某一条件的用户群)群发消息.点到点的消息传送很容易实现,本文不再详述.下面将根据不同的情况,来说说"站内信"的群发是如

群发“站内信”的实现(续)

前几日,发布了博客"群发"站内信"的实现",得到广大网友呼应,在此表示感谢. 看了网友的留言.发现大家对文中的前两种情况没有什么异议,对第三种方案争议颇多.我在此再把我的第三种情况详细的阐述一下,和大家交流.另外,本文的主体主要放在"群发"(也就是点到面),至于"单发"(点到点),不在本文的讨论之列. 先看看,第三种情况.站内的用户是大量级的(上百万). 经过考虑,表设计修正如下   表名:Message ID:编号:RecI

分享网站群发站内信数据库表设计

"站内信"不同于电子邮件,电子邮件通过专门的邮件服务器发送.保存.而"站内信"是系统内的消息,说白了,"站内信"的实现,就是通过数据库插入记录来实现的. "站内信"有两个基本功能.一:点到点的消息传送.用户给用户发送站内信:管理员给用户发送站内信.二:点到面的消息传送.管理员给用户(指定满足某一条件的用户群)群发消息.点到点的消息传送很容易实现,本文不再详述.下面将根据不同的情况,来说说"站内信"的群发是如

关于站内信,求一思路

问题描述 公司项目站内信模块我已基本完成,但现在有一难点,不知道如何解决,请高手指导一下.站内信分为两种,一种系统站内信,一种用户间的站内信,当发送系统站内信时我的想法是就添加一条记录让所有用户都可以看到,未读信息的样式是字体加粗,如果就系统站内信一条的话该怎样控制每个用户是否已读的状态呢? 解决方案 解决方案二:在数据库多加一个字段新短信为1看过为0或者其他··解决方案三:系统给用户发的话,一个用户插一条数据,这是必要的重复,用户自己可以删除他收到的信息.用户给用户发也是这样,用户给多个用户发

12月2日晚站内信功能升级公告

尊敬的用户: 您好,"消息中心_站内信"将于 2014年12月2日 22:00至12月3日 06:00 进行功能升级,届时会对您浏览"站内信"造成以下影响: 1)升级期间站内信未读数无法准确实时更新,对某条站内信删除后可能会再次出现 2)升级期间站内信界面会出现短暂无法访问现象 3)升级后站内信增加按分类筛选,您可以根据具体分类查看关注的内容,并增加批量删除及标记为已读操作 4)升级后原有站内信信息,需点击"历史信息"分类进行查看 对您造成的不便

11月13日站内信功能升级公告

尊敬的用户: 您好,"消息中心_站内信"将于 2014年11月13日 21:00至11月14日 05:00  进行功能升级,届时会对您浏览"站内信"造成以下影响: 1)升级期间站内信未读数无法准确实时更新,对某条站内信删除后可能会再次出现 2)升级期间站内信界面会出现短暂无法访问现象 3)升级后站内信增加按分类筛选,您可以根据具体分类查看关注的内容,并增加批量删除及标记为已读操作 4)升级后原有站内信信息,需点击"历史信息"分类进行查看   对您

站内信应该怎样做,希望大家给点思路~新手

问题描述 最近开始接触.net,在做一个二手书交易网站,不知道站内信该怎么做.是不是建立一个表,然后定时从表中拉取数据?有人说用ajax做,具体又是怎样呢? 解决方案 解决方案二:用ajax去做吧解决方案三:1:首先建好相应的站内信数据表,参考2:利用ajax+定时来实现收发.jq+ashx实现发送解决方案四:引用2楼kongwei521的回复: 1:首先建好相应的站内信数据表,参考2:利用ajax+定时来实现收发.jq+ashx实现发送 感谢我去尝试一下解决方案五:对于收信一方,有两种方式要考

python 速卖通 站内信-模拟浏览器实现速卖通后台站内信的发布 其中的图片上传问题

问题描述 模拟浏览器实现速卖通后台站内信的发布 其中的图片上传问题 import urllib import urllib2 import httplib import httplib2 import sys def upload(): host = "message.aliexpress.com" url = "http://message.aliexpress.com/message/upload.html" post_data ={'name':'2.jpg'

SharePoint 2010实现类似人人网站内信功能

简介:用SharePoint代码加实施的方式,完成类似人人网站内信功能,当然,实现的比较简单,样式也比较难看,只为给大家一个实施的简单思路,如有谬误,还请见谅.当然,还有就是截图比较长,当然为了让大家清晰了解每一步,并不是博主啰嗦,事先声明. 一.展示效果一,李四发送站内信给张三: 1.李四发站内信,给张三,如下图所示: 2.发送完毕后,查看李四的收件箱,为空,如下图: 3.发送完毕后,查看李四的发件箱,有李四给张三发送的站内信,如下图: 4.切换账号,张三登陆,查看右上角登录信息,张三:右上角