Database design 如何解耦并行pings处理系统

Database design 如何解耦并行pings处理系统,database-design,architecture,Database Design,Architecture,我有一个每秒接收1000次GPS ping的系统,这些ping存储在RDBMS表中,我们称之为pingsTable。然后从数据库中读取这些ping,并在多个处理器中单独处理,以便为最终用户提取有价值的信息。 到目前为止,我们的系统在pingsTable本身中维护一个列,即processed_state,它基本上指定ping是否通过特定处理器处理。例如,已处理状态3表示ping由前3个处理器处理。每个处理器配置为读取处理状态小于其自身状态的ping,并在处理ping后将处理的_状态更新为其自身状态

我有一个每秒接收1000次GPS ping的系统,这些ping存储在RDBMS表中,我们称之为pingsTable。然后从数据库中读取这些ping,并在多个处理器中单独处理,以便为最终用户提取有价值的信息。 到目前为止,我们的系统在pingsTable本身中维护一个列,即processed_state,它基本上指定ping是否通过特定处理器处理。例如,已处理状态3表示ping由前3个处理器处理。每个处理器配置为读取处理状态小于其自身状态的ping,并在处理ping后将处理的_状态更新为其自身状态。 问题是,即使这些处理器彼此不依赖,我仍然被迫按照定义的顺序处理ping

我的意图是将这些处理器彼此解耦,以便可以并行运行这些处理器。此外,我需要维护每个ping的processed_状态,因为在分析这些ping时,我可能需要查询已经处理的ping


我可以考虑为每个处理器维护一个单独的表,并进行连接以检查ping是否已被处理。我正在寻找一个更有效和可扩展的设计相同

据我所知,您需要并行处理ping。处理必须通过所有独立的处理器(服务)。在数据库中维护已完成处理的处理器时

最简单的方法是

为处理器分配ID。ID应基于位运算符(即1、2、4、8、16等)

  • 将ping馈送到所有处理器

  • 当服务器使用(处理器ID+任何现有值)处理完更新数据库时 在SQL查询中使用按位操作

  • 例如,1个ping需要由5个处理器处理

    • 处理器5处理ping更新DB值16
    • 处理器2进程ping更新数据库值16+2=18
    • 处理器3进程ping更新数据库值18+4=22
    现在您需要查询处理器4是否处理了ping。在SQL的where子句中,对运算符8使用“按位and”

    这样你就不需要单独的桌子了。。没有连接的东西会让它更快。消极的一面是,若两个处理器试图更新相同的值,那个么必须注意数据库更新和行锁定