我正在使用Windows Azure并首次冒险进入Azure表存储,以使我的应用程序可以扩展到高密度流量负载。 我的目标很简单,根据一组参数记录每个传入请求,并报告对日志中的数据进行计数或求和。在这方面,我提出了2个选项,我想知道更有经验的人认为哪个是更好的选择。
选项1:使用布尔值并计算“真”行
因为每行写入一次并且从不更新,将每个count参数存储为bool,在求和线程中,拉出查询中的行并对每组真值执行计数以获得每个参数的总计。 如果有很多参数,这将节省空间,因为我认为Azure Tables将bool存储为单个位值。
选项2:使用Int值并对行求和
每行都按上面的方式编写,但每个参数列都会添加为0或1的值。通过查询所有行并对每列使用Sum运算来进行求和。这会更快,因为Summation可能在一个查询中发生,但是我在为一个布尔值存储32位整数时会丢失一些东西吗?
我认为在这一点上查询速度,选项2是最好的,但我想大声问一下有关存储和检索方面的意见,因为我不太了解Azure表(我希望这个帮助其他人在路上。)
答案 0 :(得分:3)
表存储不执行聚合服务器端,因此对于这两个选项,您最终会在本地拉出所有行(及其所有属性)并进行计数/求和。这使得他们的表现同样糟糕。 : - )
我认为你最好保持一个跑步总数,而不是每次重新总结一切。我们在Cloud Cover Episode 43上讨论了一些模式:http://channel9.msdn.com/Shows/Cloud+Cover/Cloud-Cover-Episode-43-Scalable-Counters-with-Windows-Azure