系统设计:多个数据库客户端或代理和较少的数据库连接

时间:2016-02-01 16:49:56

标签: database scalability system-design

假设我有一个系统,大约1000台机器将从传感器生成数据,并且必须将其发送到中央系统,并将其存储在SQL表中。

我的问题是,如果让每个系统直接连接到数据库并插入(这是唯一需要的操作)数据,或者使用消息服务器(如ie)将其发送到服务器,通常会更好。 HornetQ,有一个(或几个)软件实例从HornetQ消耗数据并将其写入数据库系统?

我想知道这两种方法在CPU /内存成本和可扩展性方面的比较,特别是在系统的服务器端(即,设计用于处理大量客户端的数据库系统)。 / p>

2 个答案:

答案 0 :(得分:0)

我们的系统或多或少与您的系统相同。

我们有数百个数据生产者。 我们正在用这么多作家将这些数据写入mysql数据库。

在数据库中拥有1000个并发编写器客户端在任何世界都不是一个好主意。根据我的经验,我绝对建议你在你的情况下使用消息队列。它将是您的数据生产者和消费者之间的缓冲区。因此,如果您的数据库方面出现任何问题 - 并且相信我会 - 您不必在生产者方面做任何有关此事的任何事情。您可以停止消费者,进行维护和修理等,而无需联系您的生产商。

关于消费者的数量,这完全取决于您和您的系统要求。您可以根据需要使用一个或多个消费者。

这里有几个问题。如果你需要写太多数据意味着你需要写可扩展性,你可能需要使用分片,但正如我所说它与数据大小和你需要的事务数量有关。 您可能还需要注意一些不使用自动增量ID字段等的东西。

答案 1 :(得分:0)

在两者之间使用消息传递队列的优点是:

  • 能够增加生成消息的计算机数量,而不用担心扩展数据库服务器。
  • 控制队列消耗以保持数据库健康。
  • 如果发生数据库维护或崩溃,您的机器数据不会丢失。

我不想过于冗长,还有其他优点,但我认为你能够了解情况。