写点什么

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

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

关注

评论

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

深入理解MySQL中的Join算法

Java随想录

Java MySQL

火山引擎DataTester智能发布:助力产品降低功能迭代风险

字节跳动数据平台

大数据 A/B 测试 对比实验 数字化增长 企业号10月PK榜

零售业:别让数据安全成为业务的绊脚石!

极盾科技

数据安全 零售行业

OWASP Top 10漏洞解析(3)- A3:Injection 注入攻击

云计算 软件开发 华为云

DCloud崔红保:云开发与跨端技术,构建企业降本增效新篇章

TRaaS

支付宝小程序 云开发 DCloud

体验华为云CodeArts Check IDE插件国际化展示效果

软件开发 代码质量 华为云 代码检查

EMQ 云边协同的 IIoT 解决方案架构,亮相 2023 工博会

新消费日报

要体验 AI 编程助手吗?

亚马逊云科技 (Amazon Web Services)

亚马逊云科技 AIGC

socks5代理怎么帮助广告投放?

巨量HTTP

http代理

电力行业首个自主可控的大模型发布了!百度飞桨、文心大模型提供支持

飞桨PaddlePaddle

飞桨 大模型 文心大模型

3D孪生场景搭建:模型区域摆放

3D建模设计

数字孪生 3D场景编辑器

3D孪生场景搭建:模拟仿真

3D建模设计

数字孪生 3D应用场景 3D编辑器

ShareSDK:社会化分享是如何助力APP拉新促活的

MobTech袤博科技

大数据 前端

用户案例合集 | 物联网平台的时序数据处理难点与优化实践

TDengine

时序数据库 ​TDengine 国产时序数据库

从 Greenplum 到 YMatrix,某头部动力电池厂商核心业务数据的迁移实践

YMatrix 超融合数据库

greenplum 迁移数据 超融合数据库 YMatrix 电池厂商

3D孪生场景搭建:参数化模型

3D建模设计

模型 数字孪生 参数化模型

DevOps平台建设的关键点是什么?

laofo

DevOps cicd 研发效能 持续交付 效能度量

Moblink与深度链接:用户裂变的增长利器

MobTech袤博科技

大数据

Mac电脑数据转换 EasyDataTransform激活最新

胖墩儿不胖y

数据处理 Mac软件 数据处理工具 编辑数据

火山引擎DataLeap一站式数据治理解决方案及平台架构

字节跳动数据平台

大数据 数据中台 数据安全 数据研发 企业号10月PK榜

位移贴图和法线贴图的区别

3D建模设计

材质修改 纹理贴图

透明度和透明贴图制作玻璃水杯

3D建模设计

3D模型 材质修改 纹理贴图

开发人员的首选:CodeWhisperer

亚马逊云科技 (Amazon Web Services)

#人工智能

操作系统迁移难?Alibaba Cloud Linux 支持跨版本升级 | 龙蜥技术

OpenAnolis小助手

开源 操作系统 迁移 阿里云服务器 龙蜥社区

Rust语言中,const 和 static 的区别

0x5d0de9

​Rust

华为云API自然语言处理的魅力—AI情感分析、文本分析

人工智能 软件开发 API

如何在Mobpush中配置应用包名

MobTech袤博科技

大数据

解读亚马逊云服务器 EC2 预留实例与按需实例的区别,及其在成本节约的优势

亚马逊云科技 (Amazon Web Services)

sdk 云服务器 Amazon EC2

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