Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用数据库(MySql)的生产者/消费者系统,这是否可行?_Mysql_Database_System_Consumer_Producer - Fatal编程技术网

使用数据库(MySql)的生产者/消费者系统,这是否可行?

使用数据库(MySql)的生产者/消费者系统,这是否可行?,mysql,database,system,consumer,producer,Mysql,Database,System,Consumer,Producer,我需要使用一些东西来协调我的系统与多个消费者/生产者,每个消费者/生产者运行在具有不同操作系统的不同机器上。我一直在研究如何使用MySql来实现这一点,但这似乎非常困难 我的要求很简单:我希望能够随时添加或删除消费者/生产者,因此他们不应该相互依赖。当然,数据库会很好地将两者分开 我一直在看MySql的Q4M消息队列插件,但使用起来似乎很复杂 我真的需要一些关于如何尽可能最好地构建我的系统的信息。我认为没有第三方软件是可行的 我的第一个设计是这样的: 生产者将数据写入数据库 为了保证一致性,它

我需要使用一些东西来协调我的系统与多个消费者/生产者,每个消费者/生产者运行在具有不同操作系统的不同机器上。我一直在研究如何使用MySql来实现这一点,但这似乎非常困难

我的要求很简单:我希望能够随时添加或删除消费者/生产者,因此他们不应该相互依赖。当然,数据库会很好地将两者分开

我一直在看MySql的Q4M消息队列插件,但使用起来似乎很复杂


我真的需要一些关于如何尽可能最好地构建我的系统的信息。

我认为没有第三方软件是可行的

我的第一个设计是这样的:

  • 生产者将数据写入数据库
  • 为了保证一致性,它必须使用事务
  • 消费者也使用事务处理数据(读取和删除)
由于事务需求,InnoDB是存储引擎的逻辑选择。此外,您还必须仔细选择隔离级别。我的第一个猜测是“可序列化”以避免幻影读取,但可能也会有更弱的级别

如果性能和可伸缩性是一个问题,你应该考虑使用一个“真实”的消息解决方案。推出您的产品很可能会导致性能和/或可伸缩性问题

我需要用一些东西来协调 我的系统有几个 消费者/生产者各自在 不同的机器有不同的功能 操作系统

这是一个消息队列。不要追求其他选择。其他一切(例如,使用带有插入和删除的数据库)都非常缓慢和繁琐

使用数据库构建一个大而慢的消息队列在实践中往往会遇到糟糕的结果,因为(1)数据库速度慢,(2)数据库庞大而复杂,(3)存在锁和争用问题,这些问题可能会导致每个事务变慢,(4)开销远远超过问题应有的开销

有许多消息队列解决方案

如果你不能让Q4M工作,你应该换一个

建立这样的系统实际上(相当)复杂。(我公平地说,因为这当然是可行的)

如果你有多个生产者和一个消费者,这很容易。所有生产者并发写入,单个消费者在数据可见(提交)时立即读取数据

但是,如果您想要具有多个使用者的可伸缩性,则需要创建一个不平凡的锁定方案。(您必须确保不会将任何行分派给两个使用者。使用数据库事务和锁很难实现这一点。简单的解决方案会导致所有消息传递的序列化,就像您只有一个使用者一样,这是我们不希望看到的。)

我建议使用内置的解决方案。您也可以阅读类似的问题。

这取决于具体情况

在我的例子中,只有一个生产者每天发送数千条消息,几个消费者在接下来的24小时内消费这些消息,每个人需要几分钟才能完成。因此,我认为mysql将满足我的要求,并且我可以使用事务来确保消费者之间的一致性


希望能有所帮助。

您是在询问架构吗?消息队列是标准的解决方案。您是否在询问有关构建Q4M的技术问题?请将您的问题集中在总体架构或特别是Q4M上。很难同时回答这两个问题。这个问题是关于架构的。我将发布另一篇关于Q4M编译的文章。如果你真的在问架构的问题,你能编辑你的问题以关注架构吗?Q4M问题的分散注意力使得人们很难理解你的问题并提供合理的帮助。请删除那些让人分心的东西,把注意力集中在你的问题上。我明白了。谢谢你的链接。我想我会使用消息队列解决方案。MSMQ听起来是一个不错的解决方案(对于.net)。