Я включил репликацию RA-GRS на моей службе таблицы хранения Azure. Есть ли возможность читать с вторичного, даже если нет переключения на другой ресурс. Какие изменения необходимо внести в строку соединения, отличную от добавления -среднего имени учетной записи?Обслуживание в лазурной таблице - чтение со вторичного
ответ
Гео-избыточное хранилище с возможностью чтения (RA-GRS) действительно позволяет вам читать со вторичной конечной точки без события сбоя. Для этого вам нужно добавить secondary
к имени учетной записи в строке подключения. Он должен выглядеть примерно как youraccount-secondary.table.core.windows.net
.
Если вы используете .Net SDK, вам не нужно вручную добавлять -secondary
к имени учетной записи. Чтобы подключиться к вторичной конечной точке, вы можете использовать свойство TableRequestOptions.LocationMode
и автоматически подключиться к вторичной конечной точке.
Взгляните на образец кода ниже. В нем перечислены таблицы в учетной записи хранилища из вторичного местоположения:
static void ConnectToSecondary()
{
var cred = new StorageCredentials(accountName, accountKey);
var account = new CloudStorageAccount(cred, true);
var client = account.CreateCloudTableClient();
var requestOptions = new TableRequestOptions()
{
LocationMode = Microsoft.WindowsAzure.Storage.RetryPolicies.LocationMode.SecondaryOnly
};
var tables = client.ListTables(null, requestOptions);
foreach (var table in tables)
{
Console.WriteLine(table.Uri.AbsoluteUri);
}
}
и вот выход из скрипача:
GET https://account-secondary.table.core.windows.net/Tables HTTP/1.1
User-Agent: Azure-Storage/7.0.0 (.NET CLR 4.0.30319.42000; Win32NT 6.2.9200.0)
x-ms-version: 2015-07-08
Accept-Charset: UTF-8
MaxDataServiceVersion: 3.0;NetFx
Accept: application/json;odata=minimalmetadata
x-ms-client-request-id: 0f123ca9-1f35-4e46-9590-ebca0912baa8
x-ms-date: Fri, 11 Nov 2016 10:59:14 GMT
Authorization: SharedKey account:sEsvrm3W0Tn7QhkHqHDrS5o2IvldI4NVUL4U276JudQ=
Host: account-secondary.table.core.windows.net
Connection: Keep-Alive
для чтения из таблицы мне нужна ссылка в таблице. что-то вроде client.GetTableReference (tablename). Параметры запроса не могут быть переданы этому методу. – Shetty
Нет, вы не можете. Вы используете параметры запроса при выполнении некоторой операции над таблицей. Я просто использовал пример листинга таблиц со вторичной конечной точки. –
Вы потребляя хранения REST API напрямую или с помощью какой-то SDK (.Net, например) ? –
Я использую .NET SDK. Я изменил строку подключения, добавив -secondary и попробовав прочитать. Это исключает высказывание «403 запрещенной» аутентификации. – Shetty