`
jsczxy2
  • 浏览: 1275171 次
  • 性别: Icon_minigender_1
  • 来自: 常州
文章分类
社区版块
存档分类
最新评论

转换思路-群发“站内信”的实现

阅读更多

这篇文章是转的,不过提供了一个不错的思路,以供借鉴。

在很多网站系统(如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%。两者效率是一样的。而活跃用户的比例越低,越能体现第三种的优越来。只插入有效的记录,那些不活跃的,就不再占用空间了。

分享到:
评论
1 楼 whj2068 2013-10-29  
我是一个开发的门外汉,对业务比较了解,看了你的一些文章,想和您请教一下,spring和jbpm这些是你一直在应用的内容吗?想用这些个开发一个小企业的订单及发货管理系统,是否还需要在这个基础上开发一些底层的功能吗?如报表,审批流程,表单模板,角色权限管理等。能否有机会qq交流一下,1033006115,谢谢。

相关推荐

    站内信-类似于邮箱

    而“站内信”是系统内的消息,其实就是通过数据库插入记录来实现的。 “站内信”有两个基本功能。一:点到点的消息传送。用户给用户发送站内信,管理员给用户发送站内信。二:点到面的消息传送。管理员给用户(指定...

    站内信的数据库设计

    站内信不同于电子邮件,电子邮件通过专门的邮件服务器发送、保存,而站内信是系统内的消息,其实就是通过数据库插入记录来实现的。 二、站内信的基本功能 站内信有两个基本功能: 1. 点到点的消息传送:用户给...

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

    下面将根据不同的情况,来说说“站内信”的群发是如何实现的。  第一种情况,站内的用户是少量级别的。(几十到上百)  这种情况,由于用户的数量非常少,因此,没有必要过多的考虑数据库的优化,采用简单的表格,...

    网络抓取-群发邮件需求说明书

    【网络抓取-群发邮件需求说明书】 网络抓取-群发邮件需求规格说明书详细阐述了这个项目的意图、范围、定义以及系统预期的功能和性能。本软件的主要目标是开发一个集成网络数据抓取和批量电子邮件发送功能的工具,...

    微信公众号零基础开发视频--群发消息和模版消息

    微信公众号零基础开发视频--群发消息和模版消息,零基础视频开发介绍 对应视频请下载对应连接,微信公众号开发视频(全)

    三方代开发公众号消息管理-群发消息

    微信三方代开发公众号消息管理-群发(文本、图片、图文、语音/音频、视频)消息的方法和规则进行详细的说明

    计算机软件-编程源码-群发邮件(4套).zip

    在IT行业中,编程源码是开发软件的基础,它包含了实现特定功能或系统的所有指令和逻辑。本资源"计算机软件-编程源码-群发邮件(4套).zip"提供的是四套不同的群发邮件软件的源代码,这对于学习电子邮件自动化、网络...

    Python自动化开发-群发邮件源代码

    您可以设置发件人、收件人、主题和正文等信息,实现个性化群发邮件的需求。其次,您可以利用Python的email库来构建邮件内容。这个库提供了丰富的功能,包括添加附件、HTML格式邮件、图片等,使您能够创建出色的邮件...

    计算机软件-商业源码-群发邮件(4套).zip

    开发者需要熟悉RESTful API设计原则,以便实现这些接口。 7. **日志与监控**:为了调试和性能监控,源码中应包含详细的日志记录和错误处理机制。使用工具如Log4j或ELK(Elasticsearch、Logstash、Kibana)堆栈进行...

    电子邮件群发系统的设计与实现

    ### 电子邮件群发系统的设计与实现 #### 一、引言 随着个人计算机及互联网的广泛应用,电子邮件作为一种高效且低成本的通信方式,已深入到日常生活和工作中。它不仅改变了人们的交流方式,也在商业领域,尤其是...

    visiual C++开发典型模块大全--短信群发模块

    在本文中,我们将详细阐述Visual C++的基本概念,以及在实现短信群发模块时所需的关键技术和步骤。 首先,Visual C++是一款强大的集成开发环境(IDE),它支持C++语言,并集成了Microsoft的MFC(Microsoft ...

    邮件群发 思路 以及案例

    本文将详细介绍邮件群发的思路、实施步骤,并提供一个实际案例。 首先,邮件群发的核心是使用SMTP(Simple Mail Transfer Protocol)协议,这是一种互联网标准,用于在邮件服务器之间传输邮件。在编程实现邮件群发...

    JAVA实现邮件群发

    在Java编程环境中,实现邮件群发是一项常见的任务,特别是在企业级应用中,如发送通知、订阅更新或客户服务通信。这个“JAVA实现邮件群发”的示例程序提供了精炼且实用的解决方案,使得开发者能够轻松地集成邮件发送...

    java实现邮件群发

    Java 实现邮件群发是一项常见的任务,特别是在自动化通知、营销活动或者系统消息推送等场景下。下面我们将深入探讨如何利用Java来实现这个功能。 首先,Java 提供了 JavaMail API 来处理邮件发送。JavaMail API 是...

    delphi -微信群发.rar

    描述中的"delphi 微信群法源码"揭示了这个压缩包包含的是实现微信消息群发功能的源代码。这可能是一个自定义的解决方案,允许用户通过编程方式向多个微信联系人或群组发送消息。在实际应用中,这样的功能可能对营销...

    UDP协议实现局域网群发功能

    在实际应用中,为了实现群发功能,服务器端需要循环遍历局域网内所有可能的IP地址(通常是子网掩码范围内的IP),并为每个地址创建一个`DatagramPacket`。这样,服务器端发送的数据就会被局域网内的所有设备接收到。...

    C++实现邮件群发用来实现QQ类的东东大家知道什么意思

    标题和描述中提到的“C++实现邮件群发用来实现QQ类的东东”,我们可以理解为使用C++编程语言开发一个程序,该程序能够实现邮件的批量发送,并且可能与QQ的一些功能相结合。这里,"QQ类的东东"可能指的是借鉴了QQ软件...

    (源码)基于Spring Boot和WebSocket的站内信系统.zip

    # 基于Spring Boot和WebSocket的站内信系统 ## 项目简介 本项目是一个基于Spring Boot和WebSocket的站内信系统,旨在为Spring Boot项目集成站内信功能。通过整合WebSocket,系统支持向指定用户发送信息和群发信息,...

Global site tag (gtag.js) - Google Analytics