Каков наиболее эффективный способ запроса большого количества строк на основе тегов в Azure Table Storage?Запрос по тегам в Azure Table Storage
Мне нужно найти все строки, отмеченные как минимум тегами «A» и «B». Теги будут нормализованы до вставки, например. все строчные и буквенно-цифровые. Я также должен легко вытащить последние детали, поэтому мой текущий RowKey
содержит перевернутый DateTime
как string.Format("{0:D19}", DateTime.MaxValue.Ticks-DateTime.UtcNow.Ticks)
Все мои строки разделены на UserId
Мое текущее решение добавляет дополнительную строку для каждого тега (мышления о помещении их в отдельную таблицу), затем я могу запустить несколько запросов и присоединиться к ним на своем сервере, прежде чем возвращать их клиенту. Таким образом, при вставке лица, которые имеют две метки (A, B) будет храниться так:
[
{
"partitionKey": "123", // UserId
"rowKey": "2519633682044852820"
},
{
"partitionKey": "123_tags", // UserId + tags constant, this is not the actual tags - this is to put the tagged entities in a different partition
"rowKey": "a" // normalized tag
},
{
"partitionKey": "123_tags",
"rowKey": "b"
}
]
запросов мне нужно, было бы что-то вроде этого:
top 1000 latest entities where userId = "X"
all entities where userId = "X" and tags contains "A" AND "B"
Данные одного пользователя могут быть до миллиона. Я думаю, вы неправильно поняли мой текущий проект pk + rk, pk не содержит тегов, а просто строку под названием «теги». Это делается таким образом, чтобы отделить тегированные объекты от «последней». Я обновил свой вопрос, чтобы отразить это. – Martin
Да, я понимаю, мои предложения требуют изменений в дизайне pk + rk, с текущим невозможно выполнить запрос с предложением «Содержит», потому что он не поддерживается TS. –
Кстати о TimeStamp, разве это не сортировать старые -> новые? – Martin