`
u012081441
  • 浏览: 16151 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

站内信设计

阅读更多

一、网上站内信技术方案

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

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

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

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

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

以上,是我对群发“站内信”的实现的想法。

二、商品基本模型 已经需求

以上是搜索到的站内信大概的设计方案。本来个人打算采用第二种方案。后来被PK掉了。先大概说下我们的商品模型和站内信的需求

这里写图片描述

供货商有一件商品叫做电水壶。 三个经销商分别上架供货商的商品。并重新命名商品的标题。分别叫做电水壶A、电水壶B、电水壶C. 并都在售卖 这件商品。

这个时候供货商下架了商品。 由于经销商是从供货商那边发货。经销商本身没有存货。货物都在供货。

那里。所有供货商下架了商品。需要系统强制下级经销商的这些商品。 这时候就需要站内信发送消息给这些经销商。告诉它商品下架了。

但是这里有个问题。 对供货商来说。 供货商站内信的收件箱看到的信息应该是 “电水壶下架”。但是经销商A、B、C三个人看到的消息内容分别是 “电水壶A下架” “电水壶B下架” “电水壶C下架”。 即消息内容不是完全一样的。经销商看到的消息内容是 经销商商品标题。

由于这个需求最终没有采用搜到的方案 原因如下。

1、不但要做收件箱还要做发件箱。 虽然是同一个操作动作引起的 消息。但是发件箱和收件箱的消息内容不一样。而且收件箱每个人收到的消息也不同。 如果用方案二和方案三、。只保留一份消息内容的话。不符合需求

2、我们的站内信 只是正对卖家的 不是针对买家的。所有人群达到千万级别。所有可以用简单点的方式。方便处理和维护、

3、站内信不是邮箱。不需要一直保留所有数据。 只需要保留一段时间的数据

三、设计方案

流程:
这里写图片描述

这里写图片描述

数据库设计:

这里写图片描述

说下这样设计的原因以及要点。

1、这个是站内信不是邮箱不用 一直保留数据。 所有防止数据的日益增大 会有个定时crontab脚本去删除超过100天的消息记录。 这里的100天看产品的需求

2、这里虽然消息是系统发送的。但是触发人士供货商。 所有供货商的发件箱 内容跟 经销商的收件箱内容不一致。 所有 发件箱和收件箱 都要保留消息内容。

3,发件箱相当于简单的落地一份数据。因为调用方需要调用 站内信服务落地消息。所有落地消息的时候。没有逻辑。就是一份数据。 这样能迅速完成调用方本身的操作。而不会阻塞在。不数据写入发件箱的过程中。

4、发件箱一有新消息立马。抛出消息。通知脚本。来处理。这里用脚本来处理 而不是调用接口的方式。原因是。 首先每个接收方 需要接受的消息内容都需要重新聚合其他信息。 消息模板会有改动。 使用脚本修改起来方便; 其次发送的人群 比较多时候。这个发送会比较耗时。 我们一般会在在系统里循环调用自己。 而是由外部触发。 我们的系统是以API调用的方式。 每个API都有超时时间。 如果放到一个函数里循环发送消息到收件箱。 超市系统会自动结束函数。

5、消息落地后 。收件箱查消息 非常的方便。

总结:

1)设计方案的时候。 一定要根据自己的应用场景来。

2)想问题要清晰和深刻。站内信不是邮箱。 有自己的特点。

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

分享到:
评论

相关推荐

    站内信的数据库设计

    站内信的数据库设计 一、站内信的概念和特点 站内信是指在网站或平台内部实现的消息传送系统,类似于邮箱,主要由收件箱、发件箱、草稿箱和垃圾箱三部分组成。站内信不同于电子邮件,电子邮件通过专门的邮件服务器...

    站内信设计方案.pdf

    站内信系统作为运维平台内部沟通工具的设计与实现 随着信息化技术的发展,运维平台在企业中扮演的角色愈发重要。为了提升工作效率和用户体验,运维平台通常需要集成多种功能。其中,站内信系统作为内部沟通渠道,为...

    站内信系统数据库设计.pdf

    站内信系统数据库设计是构建在线平台不可或缺的一部分,它允许用户和管理员在系统内部进行通信。与电子邮件不同,站内信完全在系统内部处理,通过数据库记录消息来实现。站内信系统通常包括两种基本功能:一是点对点...

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

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

    UeditorSpringboot:站内信demo

    Vue + UEditor + SpringBoot 适用于Java springboot的ueditor服务器对对齐原始代码进行修改,实现图片上传,文件上传到本地等功能。也对前端做了一点点微调,搜索关键字“注释”可搜到服务端默认端口8081。...

    健康在线站内信android应用

    【标题】"健康在线站内信android应用"揭示了这个项目是针对健康领域的在线通信功能在Android设备上的实现。在移动健康领域,这样的应用程序通常包括用户管理、消息通知、健康数据共享等功能,旨在提高用户的健康管理...

    利用虾米网引流系列之批量关注发送站内信

    本篇文章将详细介绍如何通过虾米网的批量关注和站内信功能,实现有效的引流策略。 首先,我们需了解批量关注在虾米网上的应用。批量关注是通过快速关注其他用户来扩大自身影响力的一种方式。对于营销人员而言,这...

    com_messaging站内信组件 for Joomla

    **Joomla站内信组件——com_messaging** `com_messaging`是专为Joomla内容管理系统设计的一个组件,它的核心功能在于提供一个完善的站内消息系统,以促进网站用户之间的交流与互动。Joomla,作为一款开源且强大的...

    星宇插件系列之清空站内信.rar

    "星宇插件系列之清空站内信.rar"是一个针对特定网站或系统设计的插件,主要用于清理用户的站内消息。站内信通常是指在网站内部提供的私信或者消息功能,用户可以在其中与他人进行交流,而这个插件则提供了便捷的清空...

    基于Vue+Egg.js的JS全栈项目。动态菜单,RBAC权限模型,Websocket实现站内信。.zip

    这个项目以"基于Vue+Egg.js的JS全栈项目"为主题,涉及了动态菜单、RBAC(Role-Based Access Control)权限模型以及WebSocket实现的站内信功能,下面将对这些知识点进行详细解释。 首先,Vue.js是一个轻量级的前端...

    毕业设计jspssm客户关系管理系统的设计与实现hsg源码含文档含教程

    站内信管理 客户信息管个人资料管理销售合同管甲 操作日志 记事本管理 管理员 站内信管理 客户信息管系统用户管销售合同管 包含:源码、数据库脚本、论文、环境工具包、相同框架项目的安装教程(在说明文档中)

    消息系统(短信,推送,邮件)等统一发送管理.zip

    具体到压缩包内的"apple-message-master",这可能是一个开源项目的源代码库,专注于苹果设备的消息管理。它可能包含iOS客户端的SDK和服务器端API接口的实现,帮助开发者快速接入苹果的推送通知服务(APNs)。在实际...

    毕业设计,基于SSM+MyBatis+MySql+Bootstrap开发的校友录同学录网站,内含Java完整源代码,数据库脚本

    管理员角色包含以下功能:登录,用户管理,新闻资讯管理,站内信管理,校友论坛管理,系统管理-留言管理,学校简介管理,公告管理,友情链接修改等功能。 用户角色包含以下功能:首页,用户注册,用户登录,在线留言,后台-发送...

    如何设计一个站内消息系统?.rar

    - **消息分类**:支持不同类型的站内消息,如系统通知、好友私信、群组讨论等。 - **消息存储**:消息应被妥善保存,用户可以随时查看历史记录。 - **消息搜索**:提供搜索功能,让用户快速找到特定的对话或关键词。...

    毕业设计,基于SSM+MyBatis+MySql+Bootstrap开发的停车场管理系统,内含Java完整源代码,数据库脚本

    工作人员角色包含以下功能:登陆首页,车辆入库,车辆出库,停车卡管理,优惠券管理,站内信查看,用户管理等功能。 用了技术框架: HTML+CSS+JavaScript+jsp+mysql+Spring+mybatis 管理员账号/密码:admin/admin 用户...

    办公自动化系统的消息管理模块的设计与实现.doc

    首先,消息管理模块的设计目标是提供一个高效、便捷的通信平台,支持站内信和电子邮件两种方式。站内信主要用于内部员工之间的快速交流,而电子邮件则扩展了通信范围,允许与外部联系人进行沟通。设计时需考虑消息的...

    基于PHP的电子租赁网站设计源码

    本源码是基于PHP开发的电子租赁网站设计,包含1569个文件,其中包括807个.php文件,195个.gif文件,150个.js文件,106个.png文件,65个.html文件,41个.md文件,37个.css文件,以及26个.json文件和21个.gitignore...

    毕业设计,基于SpringBoot+MyBatis+Maven+MySQL开发的知识分享学习论坛,内含Java完整源代码、脚本

    3、站内信通知:通过异步队列来实现的站内信通知,其中选择Redis来作为队列。 4、排行榜:排行榜是通过Redis的有序集合来实现的,可以快速实现topK排序。 5、关注和共同关注:通过Redis的集合数据结构实现。

    ACM在线评判系统设计与实现

    7. 在线评判系统的模块设计:在线评判系统可以分为六个模块:用户模块、试题库模块、裁判模块、比赛模块、站内信模块、新闻公告模块。 8. 裁判模块:裁判模块是在线评判系统的核心模块,负责启动运行编译好的用户...

Global site tag (gtag.js) - Google Analytics