-
单条消息及群发消息表结构设计改善5
各位好!
现有如下问题向大家请教:
1、设计一个消息中心,存储两种消息
1)、一个用户对另一个用户的消息(单发)
2)、系统对每个用户下发的消息(群发)
2、对于消息存在三种状态:新消息-0、已获得但未查看详细-1、已查看详细-2
1)、当用户进行获得消息操作时,消息状态由0变为1
2)、当用户进行查看详细操作时,消息状态由1变为2
3、当一个用户上线后,知道有新消息时,会进行获得消息操作,此时如果该用户的
消息大于10条时会返回消息的排序为 最新的、最近的。
=============================================================
针对以上需求,目前设计的表结构主要字段如下:
1)、message_info_t表部分字段(存储记录表)
msg_id(消息ID)
send_to(如果为空代表群发、如果不为空则为指定的另一个用户的ID)
send_flag(对于单条消息(为上面的三种状态之一),如果是群发消息则始终为0)
end_time(有效期)
。。。
2)、message_get_t表(存储群发消息状态表)
msg_id(群发消息ID)
send_to(发送到的手机号)
send_flag(为1或2)
表结构设计思路如下:
1)、所有的消息无论是单发的还是群发都放在message_info_t表中,用send_to字段加以区别,这样不会一次群发产生太多的消息。
2)、对于查看的群发消息我们将查看过的消息ID记录到message_get_t表,并设置状态位。
3)、用户想要获得新的和未查看详细的消息两种消息则需要两个表关联查询,即查询的消息是(message_info_t表中send_to不为空的且状态位为0或1的)OR(message_info_t表中send_to为空且message_get_t表中send_flag为2或message_get_t表中没有记录的),而且要按照消息的状态为第一条件进行排序,也就是新的消息放在前面,而都是新消息则把最近的消息放在前面
=============================================================
问题如下:
1、这样设计的表结构是否合理??大家提供一些新的思路
2、对于这种需求,每一次查询都要进行全表扫描,那么是否加表分区(消息会越来越多)??加什么样的表分区??索引建成什么样的??
3、最主要的问题:
目前的实现方式,存在这样一个BUG,就是由于上面的群发消息在message_info_t表中,始终是0状态,永远是新的,这样在关联查询的时候排序,如果关联查询满足条件的前10条,那么在查询后,即使在message_get_t表中记录了已经查看,并设置为状态为1,但是原表中状态没有变,用户在查下一个十条的时候,这些已经查看的群发消息还会再次查询出来,而不是真正的下一个十条。。。。,如何才能使message_get_t表中的状态代替message_info_t表中查询出来的群发消息的状态??
=============================================================
对于上面的问题,特别是第3个问题,大家多多提建议!!谢谢!
问题补充:litianyi520 写道如果只是发个消息的话 没必要做消息冗余,
3张表
用户表 对照表 消息表
1 admin 1 1 1 nihao
2 li 2 1
也就是 这两个人都会看到同一条消息了 维护对照表就ok了
谢谢你的回答
我在描述中没有描述用户表
message_get_t这个表就是对照表
有用户的ID与之对应
send_to字段就是用户的唯一ID
问题补充:litianyi520 写道针对第3个问题 我不太明白
“即使在message_get_t表中记录了已经查看,并设置为状态为1,但是原表中状态没有变”
状态应该在对照表里 什么原表?
对照表
发件人ID 收件人ID 消息ID 消息状态
是这个样子的
由于群发消息
====================
在对照表里有状态, send_flag即为发送状态
原表是指的message_info_t表
这个表是真正存放消息的表,而这个里面也有一个发送状态,这个状态对于群消息
状态一直为0,也就是最新的~~
你在上面的意思是生成一条群发消息时,如果有多少用户也要向对照表中添加多少条对应消息吗??
问题补充:litianyi520 写道你在上面的意思是生成一条群发消息时,如果有多少用户也要向对照表中添加多少条对应消息吗??
:)对 我就是这个意思,这也是解决问题的一种办法,只需要维护对照表即可,因为群发的实质并不是信息的内容,而是一个一对多的关系
呵呵,谢谢你的建议,这种设计思路当初也曾经考虑过,但是用户是以百万计的,如果每生成一条消息就生成这么多的消息,消息量会增长的很快,因为这个群发消息每天及有可能会生成几次那么表上的数据,及在表上的操作会影响很多~~~
2010年2月26日 10:58
4个答案 按时间排序 按投票排序
-
采纳的答案
你在上面的意思是生成一条群发消息时,如果有多少用户也要向对照表中添加多少条对应消息吗??
:)对 我就是这个意思,这也是解决问题的一种办法,只需要维护对照表即可,因为群发的实质并不是信息的内容,而是一个一对多的关系2010年2月26日 13:21
-
针对第3个问题 我不太明白
“即使在message_get_t表中记录了已经查看,并设置为状态为1,但是原表中状态没有变”
状态应该在对照表里 什么原表?
对照表
发件人ID 收件人ID 消息ID 消息状态2010年2月26日 11:51
-
如果只是发个消息的话 没必要做消息冗余,
3张表
用户表 对照表 消息表
1 admin 1 1 1 nihao
2 li 2 1
也就是 这两个人都会看到同一条消息了 维护对照表就ok了
2010年2月26日 11:13
相关推荐
这个协议的解析和利用是许多开发者、自动化脚本编写者以及研究者关注的焦点,特别是对于消息群发的需求。在这个场景中,我们看到提到“QQ消息群发”使用了“精易模块”,这可能是指一个特定的编程模块或工具,用于...
- DevComponents.DotNetBar2.dll:这是一个UI控件库,用于创建美观的用户界面,可能包含了QQ消息群发程序的界面元素和设计。 - DevExpress.Utils.v10.1.dll、DevExpress.Data.v10.1.dll、DevExpress.XtraBars.v...
destoon添加微信消息模板群发功能,可定制群发内容,可按用户地区群发,可定向群发可定向群发可定向群发可定向群发可定向群发可定向群发
在"使用WebSocket简单实现群发消息和指定用户发送消息"的实践中,我们通常会有一个WebSocket服务端(WebSocketSev)处理来自客户端的连接和消息。首先,我们需要创建一个WebSocket服务器,监听特定的端口,并等待...
管理员给用户(指定满足某一条件的用户群)群发消息。点到点的消息传送很容易实现,本文不再详述。下面将根据不同的情况,来说说“站内信”的群发是如何实现的。 第一种情况,站内的用户是少量级别的。(几十到上...
微信客服消息和群发.java开发web项目
本项目通过Netty实现了一个简单的聊天消息群发功能,使得多个客户端可以向服务端发送消息,服务端接收到消息后,再广播给所有连接的客户端。这对于构建分布式聊天系统或者实时通知系统非常有用。 首先,我们要理解...
"AllyTool-微信群发消息工具"就是为了满足这一需求而设计的软件。 这个工具的核心功能是帮助用户高效地向微信联系人群发定制化的消息。在传统的手动操作中,如果需要对每个联系人添加个性化的前缀,如称呼,工作会...
QQ消息群发是一种常见的互联网应用,它允许用户批量发送消息到多个QQ联系人或群组。在本案例中,我们关注的是使用Delphi编程语言实现的QQ消息群发功能。Delphi是Borland公司(现Embarcadero Technologies)推出的一...
模板消息实时定时群发v1.0.13_不限次数多开版公众号源码
微信三方代开发公众号消息管理-群发(文本、图片、图文、语音/音频、视频)消息的方法和规则进行详细的说明
- **消息构建**:根据QQ的消息格式,构建待发送的消息结构,包括接收者QQ号、消息内容等。 - **API调用**:使用Delphi程序调用"QMsg"库提供的函数,将消息发送到服务器。 - **错误处理**:处理可能出现的网络错误...
易语言QQ消息群发源码是一个利用易语言编写的程序,主要用于批量发送QQ消息,常见于自动化任务或信息推广等场景。下面将详细探讨易语言和QQ消息群发的相关知识点。 1. 易语言基础 - **设计哲学**:易语言的核心...
同时,群发大量非个性化信息可能会对收件人造成骚扰,因此在设计时也应考虑如何降低这种可能性,比如提供个性化的消息模板或设定发送规则。 综上所述,“QQ消息群发”是利用编程技术,特别是易语言,实现的一种自动...
【delphi微信公众号】支持获取Access token、用户管理、模板消息、客服消息、接收消息、被动回复用户消息、素材管理等,D7~XE10通用。微信公众号api文档:...
### 电子邮件群发系统的设计与实现 #### 一、引言 随着个人计算机及互联网的广泛应用,电子邮件作为一种高效且低成本的通信方式,已深入到日常生活和工作中。它不仅改变了人们的交流方式,也在商业领域,尤其是...
Qt则是一个跨平台的应用程序开发框架,提供了丰富的库支持,包括GUI设计、网络编程等,广泛应用于桌面和移动平台。 在Qt中,进行网络通信通常需要使用QNetworkAccessManager和QNetworkDatagram类。...
本文将深入探讨如何在Spring Boot项目中实现WebSocket的消息推送,包括群发和指定到个人或多人。 首先,我们需要在Spring Boot项目中引入WebSocket的相关依赖。通常,我们会添加`spring-websocket`和`spring-...
处理同步微信公众平台过程中,部分本地图片丢失问题; 处理同步微信公众平台过程中,因存在大于1M图片导致的同步失败问题;...3、在正常群发接口之外,新增模板消息群发和客服消息一键群发功能(不限群发次数);