2011-08-19 143 views
7

我正在使用Azure表存储,并试图找出提高性能的最佳方法。我执行的查询非常简单 - 无论是使用分区键和行键的精确选择,还是具有列表的where子句(例如,WHERE x == 1或x == 2或x == 3等)。一旦我得到数据,我不会在数据上下文中追踪它(不需要更改跟踪等)。保存数据也是如此,所以我只将它添加到上下文中以启用保存。Azure表存储性能 - REST与StorageClient

目前,我正在使用.NET库(存储客户端)。由于我没有使用TableServiceContext的更改跟踪和其他功能,因此我正在考虑直接使用HTTP API。有没有人试过这两种选择?如果是这样,你看到了什么样的性能差异?

感谢, 埃里克

回答

10

表存储可以是有点善变兽以优化性能。有多种因素会影响它。这里只是我的头顶几个:

  1. 在每个查询中使用分区密钥是必须的。如果你不这样做,你做错了。如果您使用单个PK和单个RK(只有那两个),它不再是查询,而是资源GET,应该是相对即时的。
  2. 请勿使用基于OR的查询。这将导致全表扫描,你的表现会很糟糕。相反,在OR语句中并行化这些查询。
  3. 分区策略将产生重大影响。您拥有多少个分区以及多久访问它们(预热它们并导致基础分区服务器负载均衡)将导致巨大差异。分区的大小也在这里产生很大的影响。顺序分区键通常是一个坏主意。
  4. 小型请求可以受益于关闭唠叨(如前所述)。
  5. 关闭上下文跟踪并继续100(see here)也可以提供帮助。

还有很多我认为取决于您的应用程序。但是,我提到的那些通常是我开始的那些。