Космос БД
Эта статья может чрезмерно полагаться на источники, слишком тесно связанные с предметом , что потенциально препятствует тому, чтобы статья была проверяемой и нейтральной . ( Июль 2015 г. ) |
Разработчик(и) | Майкрософт |
---|---|
Первоначальный выпуск | 2017 |
Доступно в | Английский |
Тип | Многомодельная база данных |
Веб-сайт | учиться |
Azure Cosmos DB — это глобально распределенная многомодельная служба баз данных, предлагаемая Microsoft . Он предназначен для обеспечения высокой доступности, масштабируемости и доступа к данным с малой задержкой для современных приложений. В отличие от традиционных реляционных баз данных, Cosmos DB представляет собой базу данных NoSQL (что означает «не только SQL», а не «нулевой SQL») и векторную базу данных. [1] это означает, что он может обрабатывать неструктурированные, полуструктурированные, структурированные и векторные типы данных. [2]
Модель данных
[ редактировать ]Внутри Cosmos DB хранит «элементы» в «контейнерах». [3] при этом эти две концепции проявляются по-разному в зависимости от используемого API (например, это будут «документы» в «коллекциях» при использовании API, совместимого с MongoDB). Контейнеры группируются в «базы данных», которые аналогичны пространствам имен над контейнерами. Контейнеры не зависят от схемы, что означает, что при добавлении элементов схема не применяется.
По умолчанию каждое поле в каждом элементе автоматически индексируется, что обычно обеспечивает хорошую производительность без настройки конкретных шаблонов запросов. Эти значения по умолчанию можно изменить, установив политику индексирования, которая может указать для каждого поля тип индекса и желаемую точность. Cosmos DB предлагает два типа индексов:
- диапазон, поддержка диапазона и запросов ORDER BY
- пространственный, поддерживающий пространственные запросы из точек, полигонов и линейных строк, закодированных в стандартных GeoJSON. фрагментах
Контейнеры также могут применять ограничения уникальных ключей для обеспечения целостности данных. [4]
Каждый контейнер Cosmos DB предоставляет канал изменений, на который клиенты могут подписаться, чтобы получать уведомления о добавлении или обновлении новых элементов в контейнере. [5] По состоянию на 7 июня 2021 г. удаление элементов не отображается в канале изменений. Изменения сохраняются в Cosmos DB, что позволяет запрашивать изменения в любой момент времени с момента создания контейнера.
« Время жизни » (или TTL) можно указать на уровне контейнера, чтобы Cosmos DB автоматически удалял элементы по истечении определенного периода времени, выраженного в секундах. Этот обратный отсчет начинается после последнего обновления элемента. При необходимости TTL также можно перегрузить на уровне элемента.
Многомодельные API
[ редактировать ]Внутренняя модель данных, описанная в предыдущем разделе, предоставляется через:
- собственный SQL API.
- пять различных API совместимости, предоставляющих конечные точки, частично совместимые с проводными протоколами MongoDB , Gremlin , Cassandra , Azure Table Storage и etcd ; Эти API-интерфейсы совместимости позволяют любому совместимому приложению подключаться к Cosmos DB и использовать его через стандартные драйверы или пакеты SDK, а также пользоваться преимуществами основных функций Cosmos DB, таких как секционирование и глобальное распространение.
API | Внутреннее картографирование | Статус совместимости и замечания | |
---|---|---|---|
Контейнеры | Предметы | ||
МонгоБД | Коллекции | Документы | Совместим с проводным протоколом версии 6 и серверной версией 3.6 MongoDB. [6] |
Гремлин | Графики | Узлы и ребра | Совместим с версией 3.2 спецификации Gremlin. |
Кассандра | Стол | Ряд | Совместим с версией 4 проводного протокола языка запросов Cassandra (CQL). |
Хранилище таблиц Azure | Стол | Элемент | |
и т. д. | Ключ | Ценить | Совместим с версией 3 etcd. [7] |
SQL API
[ редактировать ]API SQL позволяет клиентам создавать, обновлять и удалять контейнеры и элементы. Элементы можно запрашивать с помощью диалекта SQL, доступного только для чтения и поддерживающего JSON . [8] Поскольку в Cosmos DB встроен механизм JavaScript , API SQL также позволяет:
- Хранимые процедуры . Функции, которые объединяют произвольно сложный набор операций и логики в транзакцию, совместимую с ACID . Они изолированы от изменений, внесенных во время выполнения хранимой процедуры, и либо все операции записи завершаются успешно, либо все они завершаются неудачно, оставляя базу данных в согласованном состоянии. Хранимые процедуры выполняются в одном разделе. Таким образом, вызывающая сторона должна предоставить ключ секции при вызове секционированной коллекции. Хранимые процедуры могут использоваться для восполнения отсутствия определенных функций. Например, отсутствие возможности агрегирования компенсируется реализацией куба OLAP в виде хранимой процедуры в файле documentdb-lumenize с открытым исходным кодом. [9] проект.
- Триггеры . Функции, которые выполняются до или после определенных операций (например, при вставке документа), которые могут либо изменить операцию, либо отменить ее. Триггеры выполняются только по запросу.
- Пользовательские функции (UDF) . Функции, которые можно вызывать и дополнять язык запросов SQL, компенсируют ограниченные возможности SQL.
SQL API представлен как REST API, который сам реализован в различных SDK, официально поддерживаемых Microsoft и доступных для .NET Framework , .NET , [10] Node.js ( JavaScript ), Java и Python .
Разделение
[ редактировать ]В 2016 году в Cosmos DB добавлена возможность автоматического секционирования с появлением секционированных контейнеров. За кулисами разделенные контейнеры охватывают несколько физических разделов, элементы которых распределяются с помощью ключа раздела, предоставленного клиентом. Cosmos DB автоматически решает, по скольким разделам распределять данные, в зависимости от размера и требований к пропускной способности. При добавлении или удалении разделов операция выполняется без простоев, поэтому данные остаются доступными во время их повторной балансировки по новым или оставшимся разделам.
До того, как секционированные контейнеры стали доступны, было принято писать собственный код для секционирования данных, и некоторые пакеты SDK Cosmos DB явно поддерживали несколько различных схем секционирования. Этот режим по-прежнему доступен, но рекомендуется только в том случае, если требования к хранилищу и пропускной способности не превышают емкость одного контейнера или когда встроенная возможность секционирования иным образом не отвечает потребностям приложения.
Настраиваемая пропускная способность
[ редактировать ]Разработчики могут указать желаемую пропускную способность, соответствующую ожидаемой нагрузке приложения. Cosmos DB резервирует ресурсы (память, ЦП и количество операций ввода-вывода в секунду ), чтобы гарантировать запрошенную пропускную способность, сохраняя при этом задержку запроса ниже 10 мс как для чтения, так и для записи на уровне 99-го процентиля . Пропускная способность указывается в единицах запроса (RU) в секунду. Стоимость чтения элемента размером 1 КБ составляет 1 единицу запроса (или 1 RU). Операции выбора по идентификатору потребляют меньшее количество RU по сравнению с операциями удаления, обновления и вставки для того же документа. Большие запросы (например, агрегаты, такие как count) и выполнение хранимых процедур могут потреблять от сотен до тысяч ЕЗ в зависимости от сложности необходимых операций. [11] Минимальная оплата за час.
Пропускная способность может обеспечиваться либо на уровне контейнера, либо на уровне базы данных. При предоставлении на уровне базы данных пропускная способность распределяется между всеми контейнерами в этой базе данных с дополнительной возможностью выделения пропускной способности для некоторых контейнеров. Пропускная способность, предоставленная в контейнере Azure Cosmos, резервируется исключительно для этого контейнера. [12] Максимальное количество ЕЗ по умолчанию, которое может быть предоставлено для каждой базы данных и каждого контейнера, составляет 1 000 000 ЕЗ, но клиенты могут увеличить этот лимит, обратившись в службу поддержки клиентов.
В качестве примера расчета затрат с использованием экземпляра одного региона: для подсчета 1 000 000 записей по 1 КБ каждая за 5 с требуется 1 000 000 RU по цене 0,008 доллара США в час , что будет равно 800 долларам США . Два региона удваивают стоимость.
Глобальное распространение
[ редактировать ]Базы данных Cosmos DB можно настроить так, чтобы они были доступны в любом из регионов Microsoft Azure (54 региона по состоянию на декабрь 2018 г.), что позволяет разработчикам приложений размещать свои данные ближе к местам, где находятся их пользователи. [13] Данные каждого контейнера прозрачно реплицируются во всех настроенных регионах. Добавление или удаление регионов выполняется без каких-либо простоев и влияния на производительность. Благодаря использованию API множественной адресации Cosmos DB приложения не нужно обновлять или повторно развертывать при добавлении или удалении регионов, поскольку Cosmos DB автоматически направляет их запросы в регионы, которые доступны и находятся ближе всего к их местоположению.
Уровни согласованности
[ редактировать ]Согласованность данных можно настраивать в Cosmos DB, что позволяет разработчикам приложений выбирать один из пяти различных уровней: [14]
- Eventual не гарантирует какой-либо упорядоченности, а лишь гарантирует, что реплики в конечном итоге сойдутся.
- Последовательный префикс добавляет гарантии заказа помимо возможных
- Сеанс ограничен одним клиентским соединением и в основном обеспечивает согласованность чтения для каждого клиента; это уровень согласованности по умолчанию [15]
- Ограниченное устаревание усиливает согласованность префикса, гарантируя, что чтение не будет отставать от x версий элемента или определенного временного окна.
- Строгая согласованность (или линеаризуемость ) гарантирует, что клиенты всегда будут читать последние глобально зафиксированные записи.
Желаемый уровень согласованности определяется на уровне учетной записи, но его можно переопределить для каждого запроса с помощью определенного заголовка HTTP или соответствующей функции, предоставляемой SDK. Все пять уровней согласованности были указаны и проверены с использованием языка спецификации TLA+ , при этом модель TLA+ выложена в открытый доступ на GitHub. [16]
Мультимастер
[ редактировать ]Исходная модель распространения Cosmos DB включает один регион записи, а все остальные регионы являются репликами только для чтения. В марте 2018 года было объявлено о новой возможности использования нескольких главных серверов, позволяющей нескольким регионам быть репликами записи в рамках глобального развертывания. Потенциальные конфликты слияния, которые могут возникнуть, когда в разных регионах записи выполняются одновременные конфликтующие операции записи, можно разрешить либо с помощью политики Last Write Wins по умолчанию, либо с помощью пользовательской функции JavaScript.
Аналитический магазин
[ редактировать ]Эта функция, анонсированная в мае 2020 года, [17] — это полностью изолированное столбчатое хранилище, позволяющее осуществлять крупномасштабный анализ операционных данных в Azure Cosmos DB без какого-либо влияния на транзакционные рабочие нагрузки. Эта функция решает проблемы сложности и задержки, которые возникают в традиционных конвейерах ETL, необходимых для оптимизации репозитория данных для выполнения онлайн-аналитической обработки путем автоматической синхронизации рабочих данных в отдельное хранилище столбцов, подходящее для крупномасштабных аналитических запросов, выполняемых в оптимизированном режиме. таким образом, что приводит к уменьшению задержки таких запросов.
Использование Microsoft Azure Synapse Link [18] для Cosmos DB можно создавать гибридные решения для транзакционной/аналитической обработки без ETL , напрямую связываясь с аналитическим хранилищем Azure Cosmos DB из Synapse Analytics. Это позволяет проводить крупномасштабную аналитику практически в реальном времени непосредственно на оперативных данных.
Прием
[ редактировать ]Gartner Research позиционирует Microsoft как лидера в Магическом квадранте систем управления операционными базами данных в 2016 году. [19] и в своей статье упоминает уникальные возможности Cosmos DB.
Реальные варианты использования
[ редактировать ]Microsoft использует Cosmos DB во многих своих приложениях. [20] включая Microsoft Office , Skype , Active Directory , Xbox и MSN .
Для создания более глобально устойчивого приложения/системы Cosmos DB объединяется с другими службами Azure, такими как службы приложений Azure и диспетчер трафика Azure. [21]
Профилировщик Cosmos DB
[ редактировать ]Инструмент оптимизации облачных затрат Cosmos DB Profiler обнаруживает неэффективные запросы данных при взаимодействии между приложением и его базой данных Cosmos DB. Профилировщик предупреждает пользователей о потере производительности и чрезмерных расходах на облако. Он также рекомендует, как их решить, изолируя и анализируя код и направляя пользователей в точное место. [22]
Ограничения
[ редактировать ]- SQL ограничен. Агрегации ограничены функциями COUNT, SUM, MIN, MAX, AVG, но не поддерживают GROUP BY или другие функции агрегирования, имеющиеся в системах баз данных. Однако хранимые процедуры можно использовать для реализации возможности агрегирования в базе данных. [23]
- SQL-соединения между «таблицами» невозможны,
- Поддержка только типов данных чистого JSON. В частности, в Cosmos DB отсутствует поддержка данных даты и времени, поэтому вам необходимо хранить эти данные, используя доступные типы данных. Например, его можно сохранить как строку ISO-8601 или целое число эпохи. MongoDB , база данных, с которой чаще всего сравнивают Cosmos DB, расширила JSON в своей спецификации двоичной сериализации BSON, чтобы охватить данные даты и времени, а также традиционные типы чисел, регулярные выражения и неопределенное значение. Однако многие утверждают [ ВОЗ? ] что выбор Cosmos DB чистого JSON на самом деле является преимуществом, поскольку он лучше подходит для API REST на основе JSON и механизма JavaScript, встроенного в базу данных.
Ссылки
[ редактировать ]- ^ «Векторная база данных» . Learn.microsoft.com . Проверено 30 марта 2024 г.
- ^ Кумар, Чандан (7 марта 2023 г.). «Базы данных Azure Cosmos DB и NoSQL» . скиллзкафе . Проверено 11 апреля 2023 г.
- ^ «Работа с базами данных, контейнерами и элементами Azure Cosmos DB» . docs.microsoft.com . Проверено 13 декабря 2018 г.
- ^ «Уникальные ключи в Azure Cosmos DB» . Блог Дибрана . 3 июля 2018 года . Проверено 13 декабря 2018 г.
- ^ «Работа с поддержкой канала изменений в Azure Cosmos DB» . docs.microsoft.com . Проверено 03 июля 2021 г.
- ^ «API Azure Cosmos DB теперь поддерживает MongoDB версии 3.6» . azure.microsoft.com . Проверено 11 февраля 2020 г.
- ^ «Введение в API etcd Azure Cosmos DB» . docs.microsoft.com . Проверено 10 июня 2020 г.
- ^ «Синтаксис языка SQL в Azure Cosmos DB» . docs.microsoft.com . Проверено 13 декабря 2018 г.
- ^ Макчероне, Ларри. «Анонсируем documentdb-lumenize» . blog.lumenize.com . Проверено 11 декабря 2016 г.
- ^ «Использование Azure DocumentDB и ASP.NET Core для максимальной производительности NoSQL» . auth0.com .
- ^ «Подготовленная пропускная способность: единицы запросов в Azure Cosmos DB» . docs.microsoft.com . Проверено 21 июля 2019 г.
- ^ «Обеспечение пропускной способности контейнеров и баз данных» . docs.microsoft.com . Проверено 21 июля 2019 г.
- ^ «Как глобально распределять данные с помощью Azure Cosmos DB» . docs.microsoft.com . Проверено 22 августа 2017 г.
- ^ «Глубокое изучение различных уровней согласованности Azure Cosmos DB» . www.c-sharpcorner.com . Проверено 13 декабря 2018 г.
- ^ «Настраиваемые уровни согласованности данных в Azure Cosmos DB» . docs.microsoft.com . Майкрософт . Проверено 22 августа 2017 г.
- ^ GitHub — Azure/azure-cosmos-tla: спецификации Azure Cosmos TLA+. , Microsoft Azure, 09 декабря 2018 г. , получено 13 декабря 2018 г.
- ^ «Microsoft объявляет о новой модели ценообразования для Azure Cosmos DB и дополнительных возможностях» . www.infoq.com . Проверено 20 июня 2020 г.
- ^ «Подробнее о Azure Synapse Link» . ЗДНет . Проверено 15 апреля 2017 г.
- ^ «Магический квадрант операционных систем управления базами данных» . www.gartner.com . Проверено 11 декабря 2016 г.
- ^ http://www.vldb.org/pvldb/vol8/p1668-shukla.pdf [ пустой URL PDF ]
- ^ Питшманн, Крис (28 июня 2017 г.). «Создание глобально устойчивых приложений с помощью Службы приложений Azure и Cosmos DB» . Build5Nines.com . Оперативность . Проверено 30 января 2018 г.
- ^ «Профилировщик Cosmos DB» . hibernatingrhinos.com . Спящие носороги . Проверено 20 мая 2020 г.
- ^ «Добавить поддержку группировки для агрегатных функций» . обратная связь.azure.com . Проверено 31 марта 2019 г.