SQL Server数据库时间可以用于同步多个客户端吗?

时间:2011-07-20 06:41:40

标签: sql-server database sql-server-2008 concurrency azure-sql-database

这是解决this problem的另一种方法,而不是重复方法。

我希望我的Azure角色为reprocess data in case of sudden failures。我考虑以下选项。

对于要处理的每个数据块,我有一个数据库表行,我可以添加一个列,意思是“从处理节点上次ping的时间”。因此,当节点抓取数据块进行处理时,它将“处理”状态和该时间设置为“当前时间”,然后节点负责更新该时间,例如每隔一分钟。然后定期某个节点将询问“所有具有处理状态和ping时间大于10分钟的块”,并将这些块视为已放弃,并以某种方式将它们排队以进行重新处理。

我有一个非常严重的担忧。上述方法要求节点或多或少具有相同的时间。看起来我不应该对全球时间做出假设。

但所有节点都与同一个数据库通信。如果我使用那个数据库时间 - 在SQL请求中使用像GETUTCDATE()这样的函数我将完全按照我的计划做什么,但是我似乎并不关心节点时间是否同步 - 他们都会使用数据库时间。

如果我使用数据库时间函数,这种方法是否可靠?

1 个答案:

答案 0 :(得分:1)

作为一般规则,这种方法应该有效。如果当前时间只有一个来源,则时间同步问题不会影响您。

但是你必须考虑如果数据库服务器发生故障会发生什么。 Azure会将您切换到另一个副本,另一个服务器上,另一个机架中,并且不保证此数据库服务器至少与原始服务器的时间同步。

如果您必须扩展数据库,这种方法无疑会让您遇到麻烦。

我认为我仍然更喜欢基于队列的方法。