Как вложенные структуры влияют на производительность запросов DocumentDB?


В противном случае вопрос можно было бы сформулировать следующим образом: "сглаживать или не сглаживать?"

Если бы я хранил вложенные JSON-документы в коллекции DocumentDB, выполнял бы запрос через эти вложенные структуры наравне с сохранением этих вложенных структур в отдельной коллекции в виде плоских документов самостоятельно?

Данные, о которых идет речь, будут записаны один раз и (вероятно) никогда не будут обновлены. Отчет о результатах работы находится в верхней части списка требований.

С одной стороны, хранение данных во вложенной структуре кажется "правильным" способом использования технологии no-schema / no SQL. То есть мы, естественно, хотим связать заголовочные данные с подробными данными в одном месте и в контексте. Но может ли он масштабироваться и продолжать работать, когда мы пишем тысячи строк в минуту и одновременно запускаем отчеты по этой коллекции из веб-приложения?

Или, может быть, лучше сгладить эти подробные данные, избыточно сохраняя соответствующие части данные заголовка в каждой строке коллекции деталей? Как давний разработчик / пользователь СУБД, я склонен не хранить данные избыточно, но должен ли я отказаться от этой идеи в пользу высокой производительности?

Делает ли плоская структура данных запрос более эффективным в DocumentDB и на сколько маржи? То есть, от чего я отказываюсь, делая это, и стоит ли это того, если производительность является главным (но не единственным) приоритетом?

1 3

1 ответ:

На это нет ни одного "правильного" ответа.

Выбор того, следует ли представлять отношения как единый встроенный документ (он же де-нормализующий) или как ссылки, как это было бы в СУБД (он же нормализующий), в значительной степени зависит от вашего варианта использования / сценария.

Обычно требуется де-нормализация для сценариев с высокой нагрузкой на чтение и нормализация для сценариев с высокой нагрузкой на запись.

Команда DocumentDB только что опубликовала справочный документ по этому вопросу; я бы рекомендовал прочитать его: http://azure.microsoft.com/en-us/documentation/articles/documentdb-modeling-data/