我正在使用Windows Azure,并首次进入Azure表存储,以便使我的应用程序可扩展到高密度流量负载。我的目标很简单,根据一组参数记录每个传入请求,并对日志中的数据进行计数或求和。在这篇文章中,我提出了两个选择,我想知道更有经验的人认为什么是更好的选择。
选项1:使用布尔值并计数"True"行
因为每一行只写一次,从不更新,所以将每个计数参数存储为bool,并在求和线程中,在查询中提取行,并对每组真值执行计数,以获得每个参数的总数。如果有很多参数,这将节省空间,因为我认为Azure表将bool存储为单个位值。
选项2:使用Int值并对行求和
每一行都按照上面的方式编写,但每个参数列都添加为0或1的值。求和将通过查询所有行并对每列使用求和操作来进行。这会更快,因为求和可能发生在单个查询中,但我在为布尔值存储32位整数时是否会丢失一些东西?
我认为在这一点上,就查询速度而言,选项2是最好的,但我想大声询问一下,以获得对存储和检索方面的意见,因为我对Azure Tables不太了解(我希望这能帮助其他人)。
表存储不在服务器端进行聚合,因此对于这两个选项,您最终都会在本地提取所有行(及其所有属性)并进行计数/求和。这让他们的表现同样糟糕。:-)
我认为你最好保持一个连续的总数,而不是每次都重新求和。我们在《云覆盖》第43集中讨论了一些模式:http://channel9.msdn.com/Shows/Cloud+封面/Cloud-Cover-Episode-43-可缩放计数器-带窗口-Azure