Я много читал о производительности хранилища таблиц Azure. Мой вывод - если только использование partionkey Azure Table Storage работает молниеносно. Чтобы проверить это, я создал два сценария.
Сервер SQL на базовом ценовом уровне с 13 миллионами строк. Все столбцы проиндексированы. Таблица хранения с 120000 строками. Оба с одним и тем же объектом:
public class Item
{
[Key]
public int Id { get; set; }
public string Path { get; set; }
public bool Deleted { get; set; }
public int JobId { get; set; }
public DateTime Started { get; set; }
public int DurationInMS { get; set; }
public int Status { get; set; }
}
Когда я запрашиваю сервер SQL, он возвращает 706326 строк за 28 секунд.
Когда я запрашиваю хранение таблицы по ключу разделения, он возвращает 100000 строк в 36,5 секунд.
Я ожидаю, что хранение таблицы будет намного быстрее. Тем более, что в таблице гораздо меньше данных, а я использую только ключ разделения. SQL-сервер действительно быстрее? Я удивлен тем, что в большинстве статей говорится, что Table Storage работает так быстро.
Запрос SQL Server EF:
var db = new CleanupDB(_config.DBConnection);
var sw = new Stopwatch();
sw.Start();
var dd = db.Items.Where(p => p.JobId == 4).ToList();
sw.Stop();
var ms = sw.Elapsed.TotalMilliseconds;
Запрос хранения таблицы:
CloudTable table = tableClient.GetTableReference("items");
var q = from s in table.CreateQuery<ItemItemEntity>()
where s.PartitionKey == "1"
select s.JobId;
var sw = new Stopwatch();
sw.Start();
var ee = q.ToList();
sw.Stop();
var ms = sw.Elapsed.TotalMilliseconds;
Любой из васесть другой опыт? Я что-то здесь упускаю или SQL-сервер может быть быстрее? Я думаю, что этот конкретный сценарий должен отдавать предпочтение Table Storage.