【发布时间】:2011-07-20 06:41:40
【问题描述】:
这是解决this problem 的另一种方法,而不是重复。
我希望我的 Azure 角色为 reprocess data in case of sudden failures。我考虑以下选项。
对于要处理的每个数据块,我都有一个数据库表行,我可以添加一个表示“来自处理节点的最后一次 ping 的时间”的列。因此,当一个节点抓取一个数据块进行处理时,它会将“处理”状态和那个时间设置为“当前时间”,然后节点负责更新那个时间,比如每分钟更新一次。然后定期某个节点会询问“所有处理状态和 ping 时间大于 10 分钟的块”,并将这些块视为已废弃,并以某种方式将它们排队等待重新处理。
我有一个非常严重的担忧。上述方法要求节点具有或多或少相同的时间。看来我不应该对全球时间做出假设。
但所有节点都与同一个数据库通信。如果我使用那个数据库时间——在 SQL 请求中使用像 GETUTCDATE() 这样的函数,我会做与我计划完全相同的事情,但我似乎并不关心节点时间是否同步——它们都将使用数据库时间。
如果我使用数据库时间函数,这种方法会可靠工作吗?
【问题讨论】:
标签: sql-server database sql-server-2008 concurrency azure-sql-database