rdbms可以删除吗_完全可以使用RDBMS进行消息传递

本文探讨了使用RDBMS进行消息传递是否是反模式的问题。作者指出,如果消息需求简单,使用已有的RDBMS进行消息传递是务实且有效的。文中提到了RDBMS的事务支持、简化运营和集成优势,同时也承认在大规模需求下可能需要更复杂的MQ系统。结论是,在某些情况下,使用RDBMS作为消息队列是完全合理的。
摘要由CSDN通过智能技术生成

rdbms可以删除吗

有争议的数据库主题可确保在reddit上取得成功,因为每个人对这些主题都有意见。 更重要的是,许多人的教条主义总是引起实用主义的争论。

因此,最近,我发布了指向Mike Mike Hadlow的较旧文章“ The Database As Queue Anti-Pattern链接,该文章在/ r / programming上得到了不错的结果:

Reddit排队

Mike的帖子几乎与数据库中的各种队列不符 ,这与我在最近的一次讨论中从几个JavaZone发言人那里听到的观点相吻合 ,他们都同意数据库中的消息传递是“邪恶的”。

……而且我在说:不。数据库中的消息传递不是反模式,完全可以(可以)。 让我们考虑一下原因:

吻和亚尼

首先,如果您不打算每小时部署数千种消息类型和数百万条消息,那么您可能会遇到一个非常简单的消息问题。 由于您已经在使用RDBMS,因此也可以使用该RDBMS进行消息传递。

显然,你们中的许多人现在会认为:

如果您只有锤子,那么一切看起来都像钉子

……你是对的! 但请猜测,只有锤子的原因有以下几种:

  • 您没有时间装备精密的工具箱
  • 您没有钱装备复杂的工具箱
  • 您实际上实际上并不需要复杂的工具箱

考虑一下这些论点。 是的,解决方案可能并不完美,甚至很难看……

6a0120a85dcdae970b017742d249d5970d-800wi

但是我们是工程师,因此,我们不在这里讨论完美性。 我们在这里为客户创造价值,如果我们能用锤子完成工作,为什么不忘了我们的虚荣心而只是用锤子完成工作。

交易队列

在一个理想的世界中,队列是事务性的,并保证(在基础理论所允许的范围内)原子消息传递或失败-我们一直将JMS视为常理。

GeeCON克拉科夫 ,我和Konrad Malawski就他关于Akka Persistence的话题进行了非常有趣的讨论。 如果我们从Akka中删除所有炒作和流行语(例如,React式编程等),我们可以看到Akka只是JMS的专有替代品,JMS看起来更现代,但缺少我们习惯于使用的大量功能JMS(例如,像事务队列持久性一样)。

与Konrad Malawski进行的讨论的有趣之处之一是,100%的消息传递保证是一个神话( 请参见此处 )。 得出结论:

消息传递真的很难

确实是! 因此,如果您确实认为需要嵌入一个复杂的MQ系统,请当心您必须了解它的真正工作原理以及如何正确操作它。

如果您使用的是RDBMS支持的队列,则可以摆脱这种额外的事务复杂性,因为队列操作参与了数据库已经拥有的事务。 您免费获得ACID!

无需其他操作

开发人员经常低估(我们不能这么说)是在您向您的系统添加新的外部系统时给您的运营团队带来的成本。

只有一个简单的RDBMS(和您自己的应用程序)是非常精简和简单的体系结构。 拥有RDBMS,MQ和您的应用程序已经更加复杂。

有许多出色的DBA知道他们在生产数据库时的工作方式。 寻找优秀的“ MQA”要困难得多。

如果您使用的是Oracle:使用Oracle AQ

Oracle有一个非常复杂的内置队列API,称为Oracle AQ ,可以与JMS互操作

AQ中的队列实质上只是包含消息类型的序列化版本的表。 如果您使用的是jOOQ, 最近我们在博客上发表了有关如何将Oracle AQ与jOOQ集成的信息

以RDBMS为中心的应用程序可以轻松得多

我们之前也曾写过博客: 为什么您的无聊数据会比您的性感新技术持久

您的数据可能只会在您的应用程序中幸存下来。 考虑使用Paypal将Java替换为Paypal (反之亦然)。 最后,您是否认为Paypal也取代了他们所有的数据库? 我不。 从Oracle迁移到DB2(不同的供应商),或者从Oracle迁移到MongoDB(不同的DBMS类型)主要是出于政治决定,而不是技术决定。 具体来说,人们不会完全从RDBMS迁移到NoSQL数据库。 他们通常只是使用NoSQL实现特定的域 (例如文档存储或图形遍历)

假定以上内容确实适用于您(当然可能不适用):如果RDBMS位于系统中间,那么在RDBMS中运行队列以在系统组件之间进行通信是一个显而易见的选择,不是它? 所有系统部件已经连接到数据库。 为什么不那样做呢?

结论

此处列出的论点都是很明显且务实的。 在某些时候,它们不再成立,因为您的消息传递需求确实足够大,足以证明与复杂的MQ系统进行集成的合理性。

但是许多人对“锤子/钉子”的论点有很强的见解。 这些意见可能是正确的,但为时过早。 在软件工程中,通常只使用一种工具就完全可以接受并且足够了。 软件的重锤:RDBMS。

翻译自: https://www.javacodegeeks.com/2014/09/using-your-rdbms-for-messaging-is-totally-ok.html

rdbms可以删除吗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值