Я думаю, что контакты могут быть хорошим кандидатом для хранения в табличном хранилище - но только если вы можете разделить на владельца, и вам действительно не нужно искать или объединять по нескольким пользователям-владельцам.
Один из возможных вариантов для этого:
- сохраняет контакты один раз с владельцем-пользователем в качестве ключа раздела и некоторым уникальным полем для ключа строки, но с полями в виде столбцов в каждой строке.
Как мне искать определенное поле (например, электронная почта или телефон)?
- Затем вы можете попросить хранилище таблиц выполнить поиск в пределах раздела - тогда он выполнит сканирование в этом разделе - что не должно быть особенно большим или медленным для любого отдельного раздела.
Как получить только контакты, принадлежащие определенному пользователю?
- Это простой запрос только по ключу раздела
Как отсортировать контакты по полю?
- Все результаты из хранилища таблиц сортируются по (ключу раздела, ключу строки), поэтому для сортировки контактов для пользователя вам потребуется запросить все из них, а затем отсортировать их в своей веб-роли или рабочей роли.
Возможны и другие конструкции -
например. Вы можете хранить каждый контакт в нескольких строках в нескольких таблицах - это позволит вам иметь предварительно сформированные порядки сортировки в хранилище таблиц.
например. вы можете использовать отдельные таблицы вместо отдельных разделов для каждого пользователя - это дает то преимущество, что при удалении пользователя вы можете удалить всю таблицу, принадлежащую этому пользователю.
Заметьте ... хотя для этого можно использовать хранилище таблиц ... на самом деле, я почти всегда возвращаюсь в SQL Azure на данный момент - он гораздо более мощный и предсказуемый (IMO). Когда команда выполняет вторичную индексацию, у меня может возникнуть желание использовать ее для большей части моих данных.