`
风起云涌57
  • 浏览: 7725 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql 来模拟消息队列

阅读更多
队列跟栈一样,是一种线性的表结构,但它是一种FIFO(先进先出)的数据结构,后断插入操作,前端删除操作。
在大数据量和高并发的WEB应用里,队列工具可以大展拳脚。
下面以社区SNS好友信息动态分发为例,讲解简单的队列在消息调度机制中的实现跟使用。
如果莫个人发布了一条动态,进行入库和网络分发的过程都需要频繁不间断的读写数据库。这样就给服务器照成了很大的压力,可以采用一种异步处理的思想来解决问题。消息发送很简单,动态产生以后,往DATABASE里头插入一条记录即可,消息的接受过程是采用定时轮询的机制。
  我们用数据库模拟消息队列,新建一个消息对列表,此处略去 ...只简单说明一下就行,字段是:消息生产者的UID,消息内容DATA,消息类别TOPIC,状态信息 static等等,消息队列表完毕,然后就需要一个队消息队列进行轮询调度的程序,这里通过两个存储过程跟定时器来实现。

下面就是一个消息的分发过程(存储过程实现的)
  DROP PROCEDEURE IF EXISTS 'proc_msg_rece_friend';
DELIMITER //
CREARE PROCEDURE 'pro_msg_rece_friend'()
BEGIN
//当出现SQL错误的时候,中断程序执行过程,跳出存储过程,并启用事务回滚
DECLARE CONTIUNE HANDLER FOR SQL EXCEPTION ROLLBACK;
START TRANSACTION;
INSERTINTO tablename
select *,*,*,*from(select * from * where)temp where *=*;
UPDATE tablename set * =1 where *;
COMMIT;
END //

下面就是调度程序,来实现分发策略,合适分发跟频率等。可以利用mysql 的event实现调度,比如5分钟调用一次存储过程等等,将队列 的数据进行分发。下面是消息接受后的清除器的event 。
DROP EVENT IF EXISTS 'event_msg_clean';
//ON SCHEDULE 计划任务,有两种设定计划任务的方式:
//1. AT 时间戳,用来完成单次的计划任务。
//2. EVERY 时间(单位)的数量时间单位[STARTS 时间戳] [ENDS时间戳],用来完成重复的//计划任务。
//ON COMPLETION参数表示"当这个事件不会再发生的时候",即当单次计划任务执行完毕后或
//当重复性的计划任务执行到了ENDS阶段。而PRESERVE的作用是使事件在执行完毕后不会被
//Drop掉,建议使用该参数,以便于查看EVENT具体信息。
//[ENABLE | DISABLE]
//参数Enable和Disable表示设定事件的状态。Enable表示系统将执行这个事件。Disable表示//系统不执行该事件。

CREATE EVENT 'event_msg_clean' ON SCHEDULE EVERY 1 HOUR STARTS '2014-1-1 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO delete from ens_enentqueue(表名) where status =1 //

注:当消息量特别大时,可把消息放入内存中,或进行集群分发,向金山公司的HTTPSQL集合了NOSQL技术,得到了更快的数度和更高的并发量,开源的产品有ZEROMQ,提供了丰富的API,此外,JMS也是一个简单高速,功能强大的消息队列。好,就讨论到这里。






分享到:
评论

相关推荐

    PHP+MySQL实现消息队列的方法分析

    在使用PHP和MySQL构建消息队列时,第一步是创建一个消息表来存储需要发送的消息。在给出的例子中,创建了名为sms的表,其中包含id、phone和content三个字段,分别用于存储消息的唯一标识、接收手机号和短信内容。 ...

    针对java、mysql、redis、消息队列开发的一款面经、题型的应试网站

    【标题】中的“针对java、mysql、redis、消息队列开发的一款面经、题型的应试网站”表明这是一个专为准备Java、MySQL、Redis和消息队列面试者设计的在线学习平台。这个网站可能包含了各种面试问题、实战练习以及相关...

    消息队列测试报告及JMeter压测说明1

    本次测试的主要目标是评估自研消息队列引擎Flash-MQ的性能指标,包括消息丢失率、消息重复率以及吞吐性能,并通过压力测试工具JMeter来模拟高并发场景下的系统表现。 #### 二、测试环境与配置 **测试硬件:** 使用...

    Thinkphp6 redis队列 消息事件 gatewayworker聊天打通版

    `Redis`的`list`数据结构可以很好地模拟消息队列,通过`rpush`和`lpop`命令,可以将消息推入队列并在另一端取出,保证了消息的顺序处理。 接下来,`GatewayWorker`是一个专为实时通信设计的长连接服务框架,它支持...

    108、AMQP消息队列-RabbitMQ1

    10. Doctrine Fixtures:Doctrine Fixtures库用于在测试或开发环境中填充数据库,模拟真实数据,本例中用它来加载预设的数据。 11. 消息处理流程:当创建文章后,消息被发送到RabbitMQ的exchange,exchange根据预设...

    mysql 队列 实现并发读

    然而,MySQL本身并不直接提供原生的并发队列服务,但可以通过一系列SQL语句来模拟实现。 一种常见的方法是结合`SELECT`和`UPDATE`语句来实现并发安全的队列操作。首先,我们尝试更新满足特定条件(如状态为'C')的...

    Spotlight_on_mysql

    总结来说,性能测试中对MySQL数据库的监控是一项综合性的任务,需要结合各种工具和策略来完成。通过深入理解MySQL的运行机制,监控关键性能指标,以及不断优化,我们可以确保数据库在高压力环境下仍然保持高效稳定。...

    整合canal监听mysql

    `Canal` 通过模拟 MySQL 客户端连接到数据库服务器,订阅并解析 binlog 事件,然后将这些事件以消息的形式传递给消费者。这使得我们可以实时地获取到数据库中的插入、更新和删除操作。 **1. Main 直接连接 MySQL ...

    高级MySQL性能优化

    1. 性能/基准测试理论:首先对性能和基准测试有一个基本的理论框架,介绍性能测试的基本概念和重要性,以及如何设计有效的基准测试来模拟生产环境中的工作负载。 2. 应用架构问题:讨论应用程序架构如何影响数据库...

    Java 高仿QQ聊天即时通软件+mysql数据库 完整运行!!

    7. **消息队列**:在高并发场景下,可能需要用到消息队列(如RabbitMQ或ActiveMQ),来处理大量的并发请求,确保消息的有序性和一致性。 8. **状态管理**:为了保持用户在线状态,软件需要有状态管理机制,例如心跳...

    模拟在线聊天系统

    4. **消息队列**:为了协调不同用户间的通信,可能会使用消息队列来缓存和分发消息。消息队列可以降低系统的耦合度,提高系统扩展性和可靠性。例如,RabbitMQ或Redis都可以作为消息中间件来使用。 5. **数据库存储*...

    MySQL数据库设计、优化

    5. **写操作优化**:通过队列方式合并多个写操作,实现持续写入,避免短时间内对数据库造成过大的压力。 6. **大数据字段处理**:对于超长TEXT/BLOB字段,建议进行垂直拆分并进行压缩处理。 7. **数据分片**:将冷热...

    银行叫号模拟系统

    3. 数据库技术:如MySQL、Oracle或SQL Server等用于存储和管理叫号记录、队列信息等数据。 4. 通信协议:TCP/IP协议进行服务器与客户端之间的数据传输,保证信息的准确无误。 四、安全与稳定性 银行叫号模拟系统...

    模拟QQ聊天程序(C#源码)

    - 消息队列:当消息发送频繁时,使用队列存储待发送消息,避免一次性发送大量数据导致网络阻塞。 8. **扩展性与兼容性** - 未来可能需要支持更多功能,如群聊、文件传输,这就需要考虑程序的扩展性和模块化设计。...

    spring+jotm+ibatis+mysql实现JTA分布式事务

    它允许应用程序在不同的资源管理器(如数据库、消息队列等)之间协调事务,确保ACID(原子性、一致性、隔离性和持久性)特性。在本项目中,JOTM作为Spring的事务管理后端,负责处理分布式事务的提交和回滚。 接着,...

    基于Android的护士学习与模拟考试系统_移动端设计_后台管理_MySQL数据库设计.zip

    开发者可能使用了数据结构(如队列或栈)来实现试题的管理和流转,同时考虑到公平性和难易度平衡,以提供真实的考试体验。 6. **学习管理系统**:学习部分可能包括视频教程、文档阅读、互动练习等,开发者可能利用...

    基于Spark算法的新闻大数据实时分析可视化系统(源码+文档).zip

    本项目基于搜狗实验室的用户查询日志数据,对数据集的简单处理,将数据集上传到集群上,编写并使用日志模拟数据产生的程序和脚本作为数据源,将01作为聚合节点,利用flume将数据下沉到Kafka消息队列中;接着通过...

    模拟qq源码(java 版)

    总的来说,模拟QQ源码(Java版)涵盖了Java编程基础、网络通信、多线程、数据序列化、数据库操作、用户管理、消息安全和UI设计等多个IT领域的知识点,是学习和实践这些技术的宝贵资源。通过分析和理解这个项目,...

    2013Oracle技术嘉年:MYSQL并发控制

    这包括对业务中的SQL语句进行测试、改写或简化业务的SQL语句,并利用如`mydbtest`等测试工具来模拟实际的工作负载。通过这些方法,可以帮助我们更好地理解MySQL在实际应用中的性能表现。 **1.3 读强于写** MySQL在...

    MySQL压力测试报告模版

    - 在这个案例中,通过改变`--num-threads`参数来模拟不同的并发线程数,从而观察不同并发情况下的性能表现。 #### 五、测试结果分析 根据给定的信息,测试结果主要关注以下几点: - **QPS**(每秒查询率): QPS值...

Global site tag (gtag.js) - Google Analytics