【锁定直播】字节、华为云、阿里云等技术专家讨论如何将大模型接入 AIOps 解决实际问题,戳>>> 了解详情
写点什么

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

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

关注

评论

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

Android C++系列:NDK减少so库体积方法总结

轻口味

c++ android 4月月更

首期Moonlight Builder Workshop | 如何在 Moonbeam 快速开发和部署 DApp

One Block Community

dapp SBUSUART Moonbeam 波卡生态 Scaffold-ETH

PlatoFarm将DAO理念发扬光大,让DAO社区受益才能走得远

小哈区块

Flutter 通过自定义路由拦截实现权限管理

岛上码农

flutter ios 移动端开发 安卓开发 4月月更

RocketMQ—Producer(三)发送方式和消息类型

IT巅峰技术

RocketMQ—Producer(四)消息发送流程

IT巅峰技术

微信朋友圈的高性能复杂度分析

高山觅流水

「架构实战营」

Linux驱动开发-编写OLED显示屏驱动

DS小龙哥

4月月更

适合 Kubernetes 初学者的一些实战练习 (六)

Jerry Wang

Docker Kubernetes 云原生 Serverless Kubernetes 4月月更

企业如何度量研发效能?

PingCode

不断挖掘“区块链”更大潜能

CECBC

架构实战营 - 模块二作业

凯博无线

人生之道

williamcai

人生修炼

研发管理工具 PingCode 宣布正式支持敏捷开发、Kanban、瀑布开发管理

PingCode

PlatoFarm将DAO理念发扬光大,让DAO社区受益才能走得远

西柚子

架构实战营【模块二】作业

michael

架构实战营 「架构实战营」

王者荣耀商城异地多活架构设计

Geek_36cc7c

去中心化云存储的前世今生 | 存储技术分享活动回顾

One Block Community

区块链 Substrate 去中心化存储 波卡

ECharts 饼图颜色设置教程 - 4 种方式设置饼图颜色

蒋川

eCharts

生产环境Redis连接,长时间无响应被服务器断开问题

越长大越悲伤

redis TCP 连接 springboot

自己动手写Docker系列 -- 5.4实现进入容器的namespace,exec命令

Docker Go 语言 4月月更

国内又一款效能度量工具发布,让研发效能真正可量化、可分析、可提升

PingCode

常用的高情商话术

williamcai

Spring如何解决循环依赖

IT巅峰技术

朋友圈架构设计

踩着太阳看日出

架构训练营

训练营作业-Module2:朋友圈高性能复杂度分析

Jadedev

架构训练营

元宇宙大热,是风口还是虎口

CECBC

游戏化与驱动力 —《游戏化实战》读后感

Bruce Talk

敏捷 随笔 Agile

展业四海,服务八方,明道云落地蜀陕豫鄂

明道云

招聘 | Bifrost、Gear、Phala Network等多家波卡生态项目招聘区块链开发者

One Block Community

波卡生态 区块链招聘 bifrost gear Phala Network

Twitter架构决策

俞凡

架构 大厂实践

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