QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

完全可以使用 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:341595
用户头像

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

关注

评论

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

场景化面试:Kafka 为何有如此高的吞吐量和性能

面试官问

kafka 零拷贝 PageCache

简述软件不可用性及解决办法

跳蚤

(28DW-S8-Day22) 《流程型组织》学习笔记:金字塔

mtfelix

28天写作

大作业(一)

Binary

数据采集之Flume采集及点击流模型详解

五分钟学大数据

大数据 28天写作 3月日更 flume 点击流模型

Elasticsearch 写入流程 Making Changes Persistent

escray

elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

「架构师训练营 4 期」 第十周 - 001&2

凯迪

架构师训练营 4 期

Wireshark数据包分析学习笔记Day11

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

大作业(二)

Binary

区块链+版权:NFT出圈,善用技术能否“破心中贼”?

CECBC

数字技术

Vue3源码 | 深入理解响应式系统下篇-effect

梁龙先森

源码分析 大前端 Vue3

《精通比特币》学习笔记(第九章)

棉花糖

区块链 学习 3月日更

我的Java转Go之路

roseduan

Java 转行 Go web Go 语言

区块链+金融落地应用详解

CECBC

金融

GO GC知识点整理

非晓为骁

垃圾回收 GC算法 Go 语言

如何使用标准稳压器输出几百毫伏极低直流电压?

不脱发的程序猿

28天写作 电路设计 3月日更 电源电路 标准稳压器

ARTS - week 2

steve_lee

基于 SparkMLlib 智能课堂教学评价系统-系统设计(三)

大数据技术指南

大数据 spark 智能时代 28天写作 3月日更

架构师是什么?

ES_her0

28天写作 3月日更

又一款Nginx 管理可视化神器!通过界面完成配置监控,一条龙!

Java小咖秀

nginx 运维 后端

爱赢才会拼——目标梯度效应

Justin

心理学 28天写作 游戏设计

滚雪球学 Python 之作用域下的 global 和 nonlocal 关键字

梦想橡皮擦

28天写作 3月日更

软件工程任务排期方法

steve_lee

《精通比特币》学习笔记(第十章)

棉花糖

区块链 学习 3月日更

多应用集中落地,四川区块链产业爆发增长

CECBC

区块链

【笔记】第七周 第 2 课

Geek_娴子

Zookeeper.02 - API

insight

zookeeper 3月日更

雄岸科技区块链布局价值待考

CECBC

区块链 科技

HR14问

我是程序员小贱

面试 3月日更

打造技术人创作利器:Typora+PicGo+Github+Jsdelivr 组合拳

Viktor

创作 GitHub Pages 工具软件

通过使用终端(iTerm2&Oh my ZSH)来提高您的生产率 John 易筋 ARTS 打卡 Week 41

John(易筋)

ARTS 打卡计划 iterm2 myzsh

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