Получение раздела из хранилища таблиц Azure
В моем табличном хранилище 10000 элементов на раздел. Теперь я хотел бы загрузить целый раздел в память. Однако это занимает очень много времени. Мне было интересно, если я делаю что-то не так или есть способ сделать это быстрее. Вот мой код:
public List<T> GetPartition<T>(string partitionKey) where T : TableServiceEntity
{
CloudTableQuery<T> partitionQuery = (from e in _context.CreateQuery<T>(TableName)
where e.PartitionKey == partitionKey
select e).AsTableServiceQuery<T>();
return partitionQuery.ToList();
}
Это так, как это должно быть сделано, или это что-то эквивалентное пакетной вставке для повторного извлечения элементов из таблицы?
Большое спасибо, Кристиан
РЕДАКТИРОВАТЬ
У нас есть все данные, также доступные в хранилище BLOB-объектов. Это означает, что один раздел полностью сериализуется как byte[] и сохраняется в BLOB-объекте. Когда я получаю это из хранилища BLOB-объектов и впоследствии десериализую его, это происходит намного быстрее, чем брать его со стола. Почти в 10 раз быстрее! Как это может быть?
2 ответа
В вашем случае я думаю, что отключение отслеживания изменений может иметь значение:
context.MergeOption = MergeOption.NoTracking;
Посмотрите на MSDN для других возможных улучшений: Советы по повышению производительности .NET и ADO.NET Data Service для таблиц Windows Azure
Изменить: Чтобы ответить на ваш вопрос, почему большой файл в хранилище больших двоичных объектов быстрее, вы должны знать, что максимальное количество записей, которое вы можете получить за один запрос, составляет 1000 элементов. Это означает, что для получения 10.000 элементов вам нужно будет выполнить 10 запросов вместо одного запроса в хранилище больших двоичных объектов. Кроме того, при работе с хранилищем больших двоичных объектов вы не проходите через службы данных WCF, что также может оказать большое влияние.
Кроме того, убедитесь, что вы работаете во втором поколении хранилища Azure... это, по сути, бесплатное обновление, если вы находитесь в центре обработки данных, который его поддерживает. Он использует SSD и модернизированную топологию сети.
Microsoft не будет переносить вашу учетную запись, просто создайте ее заново, и вы получите "бесплатное обновление" до хранилища Azure 2-го поколения.