我的问题围绕着通过多个模块处理数据的最佳实践,其中每个模块根据原始数据或其他模块生成的数据创建新数据。让我创建一个说明性的示例,在该示例中,我将考虑一个MongoDB文档和为该文档创建更新参数的模块。考虑一个基础文档{"a":2}
。现在,考虑以下这些模块,这些模块已作为Python函数编写:
def mod1(data):
a = data["a"]
b = 2 * a
return {"$set":{"b":b}}
def mod2(data):
b = data["b"]
c = "Good" if b > 1 else "Bad"
return {"$set":{"c":c}}
def mod3(data):
a = data["a"]
d = a - 3
return {"$set":{"d":d}}
def mod4(data):
c = data["c"]
d = data["d"]
e = d if c == "Good" else 0
return {"$set":{"e":e}}
以正确的顺序应用时,更新的文档将为{"a":2,"b":4,"c":"Good","d":-1,"e":-1}
。请注意,mod1
和mod3
可以同时运行,而mod4
必须等待mod2
和mod3
在文档上运行。我的问题比较笼统。做这样的事情的最好方法是什么?我当前的方法与此非常相似,但是由于每个模块的处理性较差,因此每个模块都有自己的Docker容器。这样做的问题是,它要求每个模块都在查询这些文档连续驻留的整个集合,以查看文档是否有效以供处理。
答案 0 :(得分:0)
您真的想要针对此类管道的事件驱动架构。随着记录的更新,将事件推送到主题队列(或ESB)上,并使其他管道监听这些队列。在事件发布后,其他管道阶段可以获取记录并处理其阶段。