NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

完全可以使用 RDBMS 作为消息队列

  • 2014-10-09
  • 本文字数:779 字

    阅读完需:约 3 分钟

Lukas Eder JOOQ 母公司的创始人兼 CEO。近日,他针对《将数据库作为消息队列是一种反模式》一文的观点及其在 reddit 上引发的争论表达了看法。他认为,使用数据库作为消息队列不是一种反模式,理由如下:

  1. KISS 和 YAGNI 原则——如果使用 RDBMS 可以满足消息传递的需求,那么就不必花费时间和金钱引入一款复杂的消息队列工具;
  2. 事务性队列——即使使用成熟的消息队列工具,要实现事务性队列依然很复杂,而使用基于 RDBMS 的队列则可以避免事务处理的复杂性;
  3. 无需额外的运维工作——引入新的外部系统会增加运维成本;
  4. 如果已经使用了 Oracle 数据库,则可以直接使用其内置的队列 API Oracle AQ
  5. 以 RDBMS 为中心的应用程序更简单——数据的存在时间大于应用程序,比如, Paypal 从 Java 切换到 JavaScript ,但他们并没有替换掉所有的数据库。因此,如果 RDBMS 是系统的中心,那么在 RDBMS 中运行消息队列是一种选择。

但有位自称见过多个此类案例的读者列举了这种做法面临的几项挑战:

  1. 数据库没有有丢弃和限流策略,如果信息产生速度大于消费速度,那么消息表就会变得越来越大。
  2. 数据库表可以针对写优化,也可以针对读优化,但无法同时对两者进行优化。
  3. 数据库无法对一个数据项进行并发处理。
  4. 大批量的数据处理会产生长事务,事务越长锁的持有时间越长。

Lukas 承认,使用 RDBMS 作为消息队列有一些注意事项。但针对第三点,他提到,Oracle AQ 针对 FOR UPDATE 语句进行了扩展,提供了 FOR UPDATE SKIP LOCKED 语句。该语句允许对记录进行非阻塞式悲观锁定,提高了并发性。

另外,还有一位读者提到, Spring Integration 支持使用数据库存储队列消息,有兴趣的读者可以对此进行研究测试。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-10-09 03:341431
用户头像

发布了 1008 篇内容, 共 374.5 次阅读, 收获喜欢 341 次。

关注

评论

发布
暂无评论
发现更多内容

5G从小就梦想着自己要迎娶:高速率、低时延、大容量三个老婆

华为云开发者联盟

5G IoT 通信 华为云 NB-IoT

架构师训练营第十周作业

Hanson

看DLI服务4核心如何提升云服务自动化运维

华为云开发者联盟

Serverless 运维 运维自动化 华为云 DLI

高中生写LOL外挂1年狂赚500万,落网前刚买下120万保时捷...

程序员生活志

编程 程序员 外挂

[翻译]分布式系统的模式-综述

流沙

架构 分布式系统

一文熟悉MySQL索引

书旅

MySQL 索引

22种超全用户触点采集,易观方舟SDK又更新了

易观大数据

弹性计算的内部概念:弹性扩张、弹性收缩、弹性自愈

陈磊@Criss

吴桐:数字货币具有稳定的避险性吗

CECBC

区块链 数字货币 链政经济

第十周.命题作业

刘璐

作业一

Kiroro

标新立异的日志归档:用更少的内存归档大规模测试日志

陈磊@Criss

推荐Scrum书籍

Bob Jiang

Scrum 敏捷

第十周.总结

刘璐

环信助力OFashion迷橙开辟海外直播带货新通路

DT极客

架构师0期Week10作业1

Nan Jiang

原创 | 使用JPA实现DDD持久化-R:数据的世界

编程道与术

Java hibernate DDD JDBC jpa

Grafana和ES打造的Nginx的仪表盘

陈磊@Criss

如何优雅的编写GO程序?

八两

优雅 语法 Go 语言

一文读懂GaussDB(for Mongo)的计算存储分离架构

华为云开发者联盟

数据库 mongodb 数据 GaussDB 存储分离

欲速也可达:Battle接口测试训练系统的1分钟快速说明

陈磊@Criss

如何有效防止sql注入

Java旅途

什么是死信队列

Java旅途

RabbitMQ

Web前端性能优化,应该怎么做?

华为云开发者联盟

运维 大前端 HTTP js

作业二

Kiroro

架构师训练营第十周总结

Hanson

两数之和

书旅

数据结构 算法 数据结构与算法

Clover:解决Java8和Cobertura的问题以及解决方法

陈磊@Criss

python判断文件和文件夹是否存在、创建文件夹

陈磊@Criss

架构师0期Week10作业2

Nan Jiang

架构师培训第10周练习

小蚂蚁

完全可以使用RDBMS作为消息队列_数据库_谢丽_InfoQ精选文章