После некоторых исследований я по-прежнему не уверен, как лучше всего поддерживать «соединение» с Azure Table Storage. Должно ли CloudTableClient
или CloudTable
экземпляров повторно использовать запросы?Создание новых экземпляров CloudTableClient и CloudTable за транзакцию
Мы используем хранилище таблиц за общедоступным API с высоким трафиком. Мы требуем высокой доступности и производительности. Все запросы - это запросы POINT (доступны как ключ раздела, так и строка строки), а ответный платеж небольшой по размеру (менее 1 килобайта). Производительность записи не является большой проблемой. Каждый запрос API мог читать до 10-ти точечных запросов по нескольким разделам.
Из моего чтения, я понял следующее:
CloudTableClient
не поточно-и должны быть созданы для каждой сделки. По-видимому, это не должно мешать работе при непрерывном воссоздании.A
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;
}
}
Не могли бы вы объяснить, что вы подразумеваете под «Я до сих пор не знаю, как лучше всего поддерживать соединение с Azure Table Storage.»? –
@GauravMantri: По существу, следует ли повторять использование экземпляров «CloudTableClient» или «CloudTable» через запросы? Меня беспокоит неуважение к производительности, связанное с необходимостью воссоздавать их каждый раз, когда делается запрос (потенциально 1000 раз в минуту). – davenewza