很有趣的问题!!!扩展@Brian Reischl 的答案(其中很多都在大声思考,所以请多多包涵:))
假设:
- 您的实体可以以某种形状或形式序列化。我假设您将获得 XML 格式的原始数据。
- 您有一个单独的工作人员角色,负责读取实体的所有内容。
- 您知道编写修改后的实体需要多少个辅助角色。为了争论,我们假设它是你提到的 20。
可能的解决方案:
首先,您将创建 20 个 blob 容器。我们将它们命名为 container-00、container-01、... container-19。
然后您开始阅读实体 - 一次 1000 个。由于您从表存储中获取 XML 格式的原始数据,因此您创建了一个 XML 文件并将这 1000 个实体存储在 container-00 中。您获取下一组实体并将它们以 XML 格式保存在 container-01 中,依此类推,直到您点击 container-19。然后下一组实体进入 container-00。这样,您就可以在所有 20 个容器中均匀分布您的实体。
编写完所有实体后,您处理这些实体的工作角色就会出现。由于我们知道 Windows Azure 中的实例是按顺序排列的,因此您会得到实例名称,例如 WorkerRole_IN_0、WorkerRole_IN_1、...等等。
您要做的是获取实例名称,获取数字“0”、“1”等。基于此,您将确定哪个工作角色实例将从哪个 blob 容器中读取...WorkerRole_IN_0 将从容器-00 中读取文件, WorkerRole_IN_1 将从 container-01 读取文件,依此类推。
现在,您的个人工作者角色实例将读取 XML 文件,从该 XML 文件创建实体,更新这些实体并将其保存回表存储中。完成此过程后,您将删除 XML 文件并继续处理该容器中的下一个文件。读取并处理完所有文件后,您可以删除容器。
正如我之前所说,这是很多“大声思考”的解决方案,必须考虑一些事情,比如当“读者”工作者角色下降时会发生什么以及其他事情。