写点什么

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

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

关注

评论

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

工作三年,小胖不知道 MySQL 日志是干嘛的。真的菜

一个优秀的废人

MySQL mysql事务 MySQL日志

如何快速掌握 Kubernetes 网络

倪朋飞

学习方法 Kubernetes 云原生

OKR实践中的痛点(4):再谈老板的KR我的O

大叔杨

OKR 敏捷 绩效 敏捷绩效

Java + opencv实现视频人脸检测

张音乐

OpenCV 人脸识别 视频

【Axure9百例】47.CSDN的列表样式

zhuchuanming

原型设计 Axure 交互原型

工作四年,分享50个让你代码更好的小建议

比伯

Java 程序员 架构 程序人生 计算机

软件架构中的模块与组件

Simon

架构实战营

Java反射简析

Langer

Java java反射

如何激励员工?—— 马斯洛需求理论

石云升

激励 28天写作 职场经验 管理经验 3月日更

go + ffmpeg + goav 实现拉流解码器

张音乐

音视频 ffmpeg Go 语言 goav

记一次生产环境大面积404问题!

冰河

nginx 网关

推动产业数字化 提升服务实体经济质效

CECBC

科技

普元CTO焦烈焱:成长之路务必重视工程能力

EAWorld

程序员

Java + opencv 实现图片人脸检测

张音乐

Java AI OpenCV ffmpeg 人脸识别

Redis - 主从模式

insight

redis 3月日更

微服务时代组件化和服务化的抉择

vivo互联网技术

微服务 组件化 服务化 服务调用

零信任提升组织的数字安全性

龙归科技

网络 数字时代 零信任

《MySQL》系列 - select 查询语句到底是怎么执行的?

一个优秀的废人

MySQL 数据库 原理 sql查询

高性能公链能为 DeFi 带来什么?

CECBC

区块链

“数字足迹”怕暴露,数字人民币如何守护你我隐私安全?

CECBC

数字货币

关于Vue权限路由思考

程序员海军

Vue 大前端 vue-router 权限认证 按钮权限

算法:求两个单向链表的最早公共交点

程序员架构进阶

算法 链表 28天写作 3月日更 算法解析

Centos7下Docker安装&配置&镜像加速

happlyfox

学习 ,docker 3月日更

Hudi on Flink 快速上手指南

Apache Flink

flink

FFmpeg应用篇

Changing Lin

3月日更

从新手到专家:如何设计一套亿级消息量的分布式IM系统

JackJiang

架构设计 即时通讯 IM

满满干货|支付宝美女面试官的贴心锦囊

Lily

聊聊集群、分布式和微服务之间的异同点

架构精进之路

分布式 微服务 集群 3月日更

常用的视频剪辑软件介绍,自媒体必备工具!

奈奈的杂社

跨越数据的“叹息墙”:华为下一代数据湖与HPDA时代

脑极体

EGG NETWORK阿凡提超级公链  EFT流量通证信息完全公开源

币圈那点事

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