- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
经过一些研究后,我仍然不确定如何最好地保持与 Azure 表存储的“连接”。是否应该跨请求重用 CloudTableClient
或 CloudTable
实例?
我们在公共(public)高流量 API 后面使用表存储。我们需要高读取可用性和性能。所有查询都是 POINT 查询(分区键和行键都可用),并且响应支付大小较小(小于 1 KB)。写入性能并不是一个大问题。 API 上的每个请求最多可以跨几个分区读取 10 个点查询。
通过阅读,我了解到以下内容:
CloudTableClient
不是线程安全的,应该为每个事务创建。显然,这不应该在连续重新创建时影响性能。
因此还必须为每个事务创建一个 CloudTable
实例。
这些假设正确吗?
因此,我针对每个请求重新初始化 CloudTableClient
和 CloudTable
。感觉很浪费。
查看实现:
public class EntityStorageComponent : IEntityComponent
{
private CloudStorageAccount storageAccount;
public CloudTable Table
{
get
{
var tableClient = storageAccount.CreateCloudTableClient();
ServicePoint tableServicePoint = ServicePointManager.FindServicePoint(storageAccount.TableEndpoint);
tableServicePoint.UseNagleAlgorithm = false;
tableServicePoint.ConnectionLimit = 100;
var context = new OperationContext();
context.Retrying += (sender, args) =>
{
Debug.WriteLine("Retry policy activated");
};
// Attempt delays: ~200ms, ~200ms, ~200ms
var requestOptions = new TableRequestOptions
{
RetryPolicy = = new LinearRetry(TimeSpan.FromMilliseconds(200), 3),
MaximumExecutionTime = TimeSpan.FromSeconds(60)
};
var table = tableClient.GetTableReference("farematrix");
table.CreateIfNotExists(requestOptions, context);
return table;
}
}
public EntityStorageComponent(IOptions<ConfigurationOptions> options)
{
storageAccount = CloudStorageAccount.Parse(options.Value.TableStorageConnectionString);
}
public SomeEntity Find(Guid partitionKey, Guid rowKey)
{
var retrieveOperation = TableOperation.Retrieve<SomeEntity>(partitionKey, rowKey);
var retrievedResult = Table.Execute(retrieveOperation);
return retrievedResult.Result as SomeEntity;
}
}
最佳答案
除了创建对象的常见开销之外,我没有发现创建 CloudTableClient
和 CloudTable
对象的多个实例有任何问题。因此,如果您只是执行以下操作,我认为您不会获得出色的性能:
var tableClient = storageAccount.CreateCloudTableClient();
var table = tableClient.GetTableReference("farematrix");
但是,我确实发现您在代码(Table
成员)中创建 CloudTable
的方式存在问题。本质上,在您的代码中,每当您从 EntityStorageComponent
获取 Table
属性时,您都在尝试在存储帐户中创建一个表。
var table = tableClient.GetTableReference("farematrix");
table.CreateIfNotExists(requestOptions, context);
这是一个问题,因为 table.CreateIfNotExists(requestOptions, context);
将进行网络调用,并会显着降低系统速度。您可能需要移出 table.CreateIfNotExists(requestOptions, context);
代码并将其放入启动代码中,以便您始终(大部分)确定该表存在。
关于azure - 每个事务创建 CloudTableClient 和 CloudTable 的新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36598183/
如何为依赖于 Azure 表存储的类编写单元测试,即 Microsoft.Azure.Cosmos.Table.CloudTableClient ? 我发现了这个 GitHub 问题,Azure St
使用 CloudTableClient 时,我看到三个选项: (1) 每次需要访问云表时创建一个新客户端。 (2) 在应用程序启动时创建一个新客户端,并在所有需要访问的资源之间共享它。 (3) 在应用
我正在使用新的 WindowsAzure.Storage 2.0(可能不是相关信息),并且我正在使用 CloudTableClient 实现数据访问。我见过的大多数示例都是在 ASP MVC Cont
我在这里关注 Azure 关于 Java API 的基本教程:https://www.windowsazure.com/en-us/develop/java/how-to-guides/table-s
经过一些研究后,我仍然不确定如何最好地保持与 Azure 表存储的“连接”。是否应该跨请求重用 CloudTableClient 或 CloudTable 实例? 我们在公共(public)高流量 A
我有一个 .NET Core 2.2 Web 应用程序,我正在尝试与我的 Azure 表存储资源进行通信。到目前为止我所拥有的: using Microsoft.WindowsAzure.Storag
我正在努力寻找一些关于是否应该在 ASP.Net WebAPI 应用程序中共享 Azure 表存储对象集实例的真正指导。 为了完整起见,从表存储中检索实体如下所示。 当在数据层中集成类似的东西时,我在
我知道 CloudTableClient.BaseUri.AbsoluteUri 返回一个表示主端点的字符串值。但是,如果出现故障,该值是否会更新到辅助端点? 最佳答案 根据document ,Clo
我正在考虑使用 Azure AD 来验证对 Azure 存储帐户的访问。 https://learn.microsoft.com/en-us/azure/active-directory/manage
我正在构建 Outlook WEB 插件,并将 Microsoft.Azure.Storage.Common 和 Microsoft Azure.CosmosDB.Table nuget 添加到我的项
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 3 年前。 Improv
我把头撞在墙上,试图找出为什么我缺少这个功能。 缺少 CloudTableClient GetTableReference var tableClient = new CloudTableClient
我使用 Microsoft.WindowsAzure.Storage C# 库通过存储凭据访问我的 Azure Table Storage 帐户,如下所示。 _CloudStorageAccount
我是一名优秀的程序员,十分优秀!