Есть ли в таблицах хранения Azure RowKey, индексируемый индивидуально для использования в запросах подразделов? - PullRequest
4 голосов
/ 28 сентября 2011

Мне нужно знать, проиндексировали ли таблицы хранения Azure RowKey отдельно от PartitionKey, чтобы выполнить запрос такого типа ...

Предположение: в моей таблице есть сообщения на форуме, имеющие PartitionKey = UserEMail, RowKey = PostInstant. Итак, я хочу запросить вот так ...

SELECT data FROM forum WHERE PartitionKey="user@company.com" AND RowKey < DateLimit;

(Примечание: я знаю, что PostInstant должен быть написан "в обратном порядке", чтобы использовать преимущества сортировки по возрастанию и, таким образом, получать ее в порядке убывания, это не главное).

Как я понимаю, явно указав PartitionKey, запрос хорошо идет по пути производительности, но после этого ... будет ли RowKey разумно использован для а) выдачи отсортированных результатов и б) остановки сканирования после достижения DateLimit?

Или, другими словами, применяется ли индексация таблицы хранения Azure к объединению PartitionKey + RowKey, поэтому она может быть полезна только для точного сопоставления строк и полной сортировки таблиц?

Ответы [ 2 ]

2 голосов
/ 28 сентября 2011

PartitionKey и RowKey в настоящее время являются единственными индексированными атрибутами, которые вы можете использовать.Тем не менее, вы используете только один в вашем вопросе.Таким образом, ваш запрос будет искать весь PartitionKey 'user@company.com' без какого-либо дополнительного индекса.Если это небольшой раздел, это может не иметь большого значения.Если он большой, то вам также следует использовать RowKey.Обратите внимание: хотя вы указываете атрибут PostInstant, он не совпадает с RowKey.Вы должны специально запросить RowKey (даже если оно совпадает с именем другого столбца).

Таким образом, ваш запрос будет выглядеть примерно так:

ctx.CreateQuery<Foo>('tablename').Where(s => s.PartitionKey == "user@company.com" && s.RowKey.Compare(DateLimit) > 0);

Я, конечно, предполагаю, что 'DateLimit'на самом деле дата в формате строки (например, галочки).Если вы инвертируете порядок тиков, вы также инвертируете оператор сравнения (>).

2 голосов
/ 28 сентября 2011

Да, написанный вами запрос настолько же эффективен, насколько вы можете написать его для таблиц Azure, и он должен использовать индексы как для PartitionKey, так и для RowKey.

Ваши результаты гарантированывернуться в порядке PartitionKey, а затем RowKey.

...