我正在使用Azure表存储,并试图找出提高性能的最佳方法。我执行的查询非常简单——要么使用分区键和行键进行精确选择,要么使用列表的where子句(例如,where x==1或x==2或x==3等)。一旦获得数据,我就不会在数据上下文中跟踪它(不需要跟踪更改等)。保存数据也是类似的,所以我只将它添加到上下文中以启用保存。
目前,我正在使用。net库(存储客户端)。由于我不使用更改跟踪和TableServiceContext的其他功能,我正在考虑直接使用HTTP API。有人尝试过这两种选择吗?如果是这样,您看到了什么样的性能差异?谢谢,埃里克
表存储在优化性能方面可能有点反复无常。有各种各样的因素会影响它。以下是我想到的一些建议:
- 在每个查询中使用分区键是必须的。如果你没有这样做,那你就做错了。如果您使用单个PK和单个RK(并且只有这两个),则它不再是查询,而是资源GET,并且应该相对瞬时。
- 不要使用基于or的查询。这将导致全表扫描,您的性能将非常糟糕。相反,在OR语句中并行处理这些查询。
- 分区策略将产生重大影响。您有多少分区以及访问它们的频率(以预热它们并使底层分区服务器实现负载平衡)将导致巨大的差异。分区的大小在这里也有很大的影响。顺序分区键通常不是一个好主意。
- 小请求可以从关闭唠叨(如前所述)中受益。
- 关闭上下文跟踪和100继续(见这里)也可以帮助。
我想还有更多的取决于你的应用程序。然而,我所提到的通常是我开始使用的。
你关掉Nagle了吗?
- Nagle算法对小请求不友好
:
- 在Windows Azure中最大化吞吐量-第1部分