写点什么

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

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

关注

评论

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

UML统一建模语言

哼哼

C/C++:const常量真的可以用指针修改吗

韩小非

c c++ 指针 常量 编译器优化

test

PQY

对文化的态度,早在日常中

zhoo299

历史 随笔 文化

新媒体小编一年工作心得

彭宏豪95

职场 感悟 工作

现在的我们想要获得成功,除了付出努力之外,还要具备见识。

叶小鍵

初识 Docker 与安装 | Docker 系列

AlwaysBeta

Docker

愿你也能穿越熊熊烈火,飞往你的山

Janenesome

读书笔记 思考

做正确的事情什么时候都不晚

Neco.W

学习 导师

Spark Launcher Java API提交Spark算法

杨仪军

spark spark launcher

练习--食堂就餐卡系统技术方案设计

jason

当代社畜在维权中成长 | 记初次打官司

张鸱鸺

个人成长 随笔杂谈 维权 民事诉讼

Trie 字典树

田镇珲

LeetCode Trie

缓存一致性协议的工作方式

HackMSF

缓存 并发

【摘】Git-从零单排 03期

卡尔

git 效率工具 工具链

游戏夜读 | 核心能力是什么?

game1night

npm常用命令

阡陌r

Vue

听说用 Lombok 可以早点下班?

武培轩

Java 程序员 工具 后端 IDEA

我是这样给同事分析幂等性问题的

架构精进之路

幂等性 服务设计

推荐几款有意思的小众App(06.06)

静陌

线上故障处理实践

心平气和

故障分析 故障定位

话说 Java vs C#

申扬科技

B端产品经理养成记(3):访谈

涛哥 数字产品和业务架构

产品经理

奈学教你五分钟学会分布式事务

奈学教育

分布式系统

中小型城市商业银行数字化转型实践(四)业务中台建设思路和路径

泡菜小仙

行业资讯 银行数字化转型

产品周刊 | 第 18 期(20200607)

八味阁

产品 产品经理 产品设计 产品推荐

内存屏障的来历

HackMSF

cpu 并发

「翻译」测试用例最佳实践

HackMSF

翻译 单元测试

Backend Roadmap

陈皮

Backend Developer

食堂就餐卡系统设计

游戏夜读 | 终端设备之争?

game1night

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