Как масштабируется Azure DocumentDB? И мне нужно беспокоиться об этом?

У меня есть приложение, которое перерастает SQL Azure - по цене, которую я готов заплатить, во всяком случае - и я заинтересован в исследовании Azure DocumentDB. Очевидно, что предварительный просмотр имеет различные пределы масштабируемости (например, здесь), но я думаю, что, возможно, мне удастся сэкономить время для предварительного просмотра, если я использую это правильно.

Итак, вот вопрос, который у меня есть. Как мне настроить приложение для использования встроенной масштабируемости Azure DocumentDB? Например, я знаю, что с помощью Azure Table Storage - дешевой, но <забастовочной > ужасной очень ограниченной альтернативы - вам нужно структурировать все ваши данные в двухэтапной иерархии: PartitionKey и RowKey. Если вы это сделаете (что практически невозможно в реальном приложении), ATS (как я понимаю) перемещает разделы позади, от машины к машине, так что вы получаете почти бесконечную масштабируемость. Удивительно, и вам никогда не придется об этом думать.

Масштабирование с помощью SQL Server, очевидно, намного сложнее - вам нужно создать свою собственную систему ошпаривания, разобраться с тем, на каком сервере находится осколок, и т.д. Возможно, и сделано правильно достаточно масштабируемым, но сложным и болезненным.

Как работает масштабируемость с DocumentDB? Это promises произвольная масштабируемость, но как механизм хранения работает за кулисами? Я вижу, что у него есть "Базы данных", и каждая база данных может иметь некоторое количество "Коллекций" и т.д. Но как его произвольная масштабируемость соответствует этим другим понятиям? Если у меня есть таблица SQL, содержащая сотни миллионов строк, я собираюсь получить требуемую масштабируемость, если я поместил все эти данные в одну коллекцию? Или мне нужно вручную распространять его по нескольким коллекциям, как-то иначе? Или через несколько БД? Или DocumentDB достаточно умен, чтобы объединить запросы с помощью разных машин, без необходимости думать об этом? Или...?

Я смотрел вокруг и еще не нашел никаких указаний о том, как подойти к этому. Очень интересно то, что другие люди нашли или что рекомендует MS.

Ответ 1

Обновление: по состоянию на апрель 2016 года DocumentDB внедрил концепцию секционированной коллекции, которая позволяет масштабировать и использовать преимущества серверного разделения.

Одна база данных DocumentDB может масштабироваться практически до неограниченного объема хранилища документов, разделенных коллекциями (другими словами, вы можете масштабировать, добавляя больше коллекций).

Каждая коллекция обеспечивает 10 ГБ хранения и переменную пропускную способность (в зависимости от уровня производительности). Коллекция также предоставляет возможности для хранения документов и выполнения запросов; и также является доменом транзакции для всех документов, содержащихся в нем.

Источник: http://azure.microsoft.com/en-us/documentation/articles/documentdb-manage/

Здесь ссылка на сообщение в блоге Я написал о масштабировании и разделении данных для многопользовательского приложения на DocumentDB.

Ответ 2

С последней версией DocumentDB все изменилось. По-прежнему существует ограничение на 10 ГБ на коллекцию, но в прошлом вам было необходимо выяснить, как разделить ваши данные на несколько коллекций, чтобы не попасть в ограничение на 10 ГБ.

Вместо этого вы можете указать ключ раздела, и теперь DocumentDB обрабатывает разделы для вас, например. Если у вас есть данные журнала, вы можете захотеть разбить данные на значение даты в вашем документе JSON, чтобы каждый день создавался новый раздел.