我计划使用Azure Tables来存储各种与应用程序相关的计数器。我担心的是计数器会从应用程序的许多不同客户端实例中增加。
看起来似乎是表面上的一项简单任务,但仔细观察它是非常具有挑战性的。
我希望有人可以分享一些有助于使问题更易于管理的智慧。
谢谢!
答案 0 :(得分:3)
System.Threading.Interlocked
功能更新静态变量。这可以避免服务器上的多个线程尝试更新相同的号码。答案 1 :(得分:3)
为什么不为每次点击存储一行,而不是保留计数器。汇总数据以了解计数器值。
混合方法将保持整理命中率。继续执行聚合和保存。然后清除旧的命中数据\删除。
答案 2 :(得分:3)
使用Redis缓存介绍Redis可用于此任务,而redis具有原子增量(http://redis.io/commands/INCR)。
答案 3 :(得分:0)
根据计数器的数量和更新频率,Azure表存储可能不是最好的方法。例如,表存储不提供锁定或事务支持,也不提供在没有首先检索它的情况下更新服务器上的值的能力。因此,您可能最终会遇到更新失败的情况,因为当您尝试更新同一行时,另一个实例更新了该行。
如果更新的数量和频率使得频繁重试更新变得不合适,您可能需要考虑SQL Azure,而不是在服务器端可以使更新成为原子的。 (比如UPDATE Abc SET Value = Value + 1 WHERE ...。)。