我有一个系统,它每秒接收一千个GPS ping,它们存储在RDBMS表中,我们称之为pingsTable。然后从数据库中读取这些ping,并在多个处理器中分别进行处理,以提取最终用户的宝贵信息。 到目前为止,我们的系统在pingsTable本身中维护一列,即named_state,它基本上指定ping是否已通过特定处理器进行处理。例如,处理状态3表示ping是由前3个处理器处理的。每个处理器都配置为读取已处理状态小于其自身状态的ping,并在处理ping后将其状态更新为已处理状态。 问题是,即使这些处理器彼此不依赖,我仍然被迫按定义的顺序处理ping。
我的意图是使这些处理器彼此分离,以便可以并行运行这些处理器。另外,我需要维护每个ping的处理状态,因为在分析这些ping时可能需要查询已处理的ping。
我可以考虑为每个处理器维护一个单独的表,并进行联接以检查是否处理了ping。我正在寻找一种更高效,可扩展的设计。
答案 0 :(得分:1)
据我了解,您需要并行处理ping。处理必须通过所有独立的处理器(服务)进行。在数据库中维护已完成处理的处理器
最简单的方法是
将ID分配给处理器。 ID应该基于按位运算符(即1,2,4,8,16等)。
向所有处理器ping
服务器完成处理带有(处理器ID +任何现有值)的更新DB 在SQL查询中使用按位运算
例如1个ping需要由5个处理器处理
现在,您要查询处理器4处理了ping。在您的SQL的where子句中,对运算符8使用“按位和”
这样,您不需要单独的表等。没有连接的事情可以使其更快。不利的一面是,如果两个处理器试图更新相同的值,则必须注意数据库更新和行锁定。