2013-08-26 2 views
4

Что вы посоветуете по следующему сценарию:Azure таблицы магазин хранения нескольких типов

У меня есть лазурь таблица под названием пользователей, где, как столбцы являются:

  • PrimaryKey
  • RowKey
  • Отметка
  • Первый номер
  • LastName
  • Email
  • Телефон

Тогда существуют различные типы заданий для каждого пользователя давайте называть их TaskType1 и TaskType2.

Оба типа задач имеют общие столбцы, но затем также ввести определенные столбцы, как это:

  • PrimaryKey (это то же самое, что и пользователи PrimaryKey найти все задачи, принадлежащие одному пользователю)
  • RowKey
  • Отметка
  • Имя
  • DueDate
  • Описание
  • Первоочередные

затем TaskType1 имеет дополнительные столбцы:

  • EstimationCompletionDate
  • IsFeasible

и TaskType2 имеет свой определенный столбец:

  • EstimatedCosts

Я знаю, что я могу хранить оба типа в одной таблице и на мой вопрос:

Если я использую различные таблицы для TaskType1 и TaskType2, что будет последствие в транзакционных издержках? Я угадаю, что если у меня есть 2 таблицы для каждого типа задачи, а затем я выведу запрос вроде: get me all tasks where the task Primarykey is equal to a specific user from Users table PrimaryKey, тогда мне придется запускать 2 запроса для каждого типа (потому что пользователи могут иметь оба типа задач), что означает больше транзакций ... вместо этого, если обе задачи находятся в одной и той же таблице, то это будет похоже на 1 запрос (в предел 1000 после операций с разбивкой по страницам), потому что я получу все строки, в которых PartitionKey является пользователем PartitionKey, поэтому раздел не разделяется, что означает 1 транзакцию правильно?

Так я правильно понял, что у меня будет больше транзакций, если я сохраню задачи в разных таблицах ..?

ответ

6

Ваше понимание совершенно верно. Если задачи разделены на две отдельные таблицы, это означало бы 2 отдельных запроса, таким образом, 2 транзакции (давайте теперь удерживать более 1000 сущностей из уравнения).Хотя стоимость сделки одна причина, чтобы держать их в той же таблице, есть и другие причины:

  • Держа их в той же таблице, вы будете в полной мере использовать схемы менее характер Azure Table Storage.
  • 2 таблицы означают 2 сетевых вызова. Хотя сервис очень доступен, но вам нужно будет принять во внимание сценарий, когда вызов первой таблицы будет успешным, однако вызов второй таблицы завершится неудачно. Как ваше приложение будет вести себя в этом сценарии? Вы также отбрасываете результат из 1-го стола? Сохраняя их всего за один стол, вы избавитесь от этого сценария.
  • Предполагая, что у вас есть сценарий в приложении, где пользователь может подписаться одновременно на задачи 1 и 2. Если вы храните их в одной таблице, вы можете использовать Entity Group Transaction, так как оба объекта (один для задачи 1 и другие для задачи 2) будут иметь тот же PartitionKey (то есть идентификатор пользователя). если вы сохраните их в отдельных таблицах, вы не сможете воспользоваться транзакциями групп объектов.

Одно из предложений, которое я бы дал, это указать атрибут «Тип задачи» в таблице «Задачи». Таким образом, у вас будет более простой способ фильтрации по задачам.

+0

Спасибо Gaurav! Я также подумал, что лучше хранить их в одном столе, но хотелось бы получить некоторые мнения! Еще раз спасибо! –

Смежные вопросы