写点什么

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

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

关注

评论

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

【刷题记录】19. 删除链表的倒数第 N 个结点

WangNing

7月月更

百变小精灵,CRMEB Java 单商户系统也要当!

CRMEB

zookeeper-curator开源框架介绍

zarmnosaj

7月月更

QDS08 curl 安装

耳东@Erdong

curl qds 7月月更

Python干货——内置函数

Java学术趴

7月日更

Java 虚拟机的概念是怎么来的

HoneyMoose

JavaScript 中如何取消请求

掘金安东尼

JavaScript 前端 7月月更

.so 将c++转化为安卓可使用的数据

小肉球

qt 7月月更

数据治理浅析

五分钟学大数据

数据治理 7月月更

Docker 常用命令整合

宁在春

Docker 7月月更

K3S - 轻量级Kubernetes集群

mengzyou

DevOps k8s k3s

java零基础入门-异常、线程(完结篇)

喵手

Java 7月月更

前端性能优化之请求优化

南城FE

性能优化 前端 7月月更

python小知识-python格式化

AIWeker

Python python小知识 7月月更

Vim到底可以配置得多漂亮?

Jackpop

代码版本控制用SVN还是Git好?

Jackpop

这些 C++ 开源代码,简直绝了!

Jackpop

沉淀2年的 Jira 自动化经验分享

跟YY哥学Jira

RPA 自动化 Jira

IntelliJ IDEA,有点强!

Jackpop

git pull 和 git fetch到底什么区别?

Jackpop

C# 线程锁和单多线程简单使用

IC00

C# 7月月更

云原生(十一) | Kubernetes篇之Kubernetes原理与安装

Lansonli

云原生 k8s 7月月更

Qt|模仿文字浮动字母

中国好公民st

qt 7月月更

工业物联网中的时序数据

CnosDB

物联网 时序数据库 开源社区 CnosDB 工业数据

算法题每日一练---第6天:李白打酒

知心宝贝

算法 前端 后端 7月月更

OSI七层模型有哪七层?每一层分别有啥作用,这篇文章讲的明明白白!

wljslmz

OSI七层协议 网络技术 7月月更

iOS中#define和const

NewBoy

ios 前端 移动端 iOS 知识体系 7月月更

LeetCode-83. 删除排序链表中的重复元素(java)

bug菌

Leet Code 7月月更

自研的数据产品迭代了一年多,为什么不买第三方商业数据平台产品呢?

金松(李博源)

数据中台 数据产品经理 数字化转型 数据产品

谈谈文字两端对齐的css问题

南极一块修炼千年的大冰块

7月月更

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