В чем разница между NoSQL и реляционными базами данных?
Azure Cosmos DB характеризуется как нереляционным, так и горизонтально масштабируемым.
Горизонтальное и вертикальное масштабирование
Реляционные базы данных, как правило, увеличиваются путем увеличения размера виртуальной машины или вычислительной среды, где они размещены. Базы данных NoSQL, такие как Azure Cosmos DB, масштабируемые путем добавления дополнительных серверов или узлов. Это называется горизонтальное масштабирование. Эти узлы также называются физическими секциями в Cosmos DB. Данные, хранящиеся в других физических секциях, должны быть упорядочены, чтобы их можно было эффективно использовать позже.
Данные направляются в разные физические секции с помощью значения необходимого свойства в каждом документе. Это свойство называется ключом секции контейнера. Этот ключ секции необходимо указать при создании контейнера. Передача ключа секции при записи или чтении данных из контейнера гарантирует, что операции эффективны только путем перенаправления запроса к секции, в которую он хранится.
Хотя потребность в ключе секции может показаться ограничением, такой подход имеет ряд серьезных преимуществ. Как правило, реляционная база данных может увеличиваться максимум до 100 ТБ. База данных NoSQL может увеличиваться до неограниченного размера без ущерба для времени отклика при доступе к данным из любой одной секции.
Кроме того, по мере добавления секций также добавляется больше вычислительных ресурсов и растет объем обработки, поддерживаемый базой данных. Это означает, что она также может поддерживать более параллельных пользователей. Кроме того, не влияет на производительность.
Нереляционные и реляционные базы данных
Второй определяющей характеристикой базы данных NoSQL являются отсутствие внешних ключей, ограничений или принудительных связей любого типа между фрагментами данных. Поскольку данные в базе данных NoSQL хранятся на разных физических серверах, применение ограничений или отношений путем создания блокировок данных может привести к низкой или непредсказуемой производительности.
Однако отсутствие принудительных связей не означает, что нельзя управлять сущностями, имеющими отношения в базе данных NoSQL. Просто здесь требуется другой подход.
Почему эти типы баз данных так отличаются?
Понимание того, как изменилась экономичность вычислений, с момента появления реляционных баз данных позволяет понять, почему эти два типа баз данных настолько отличаются.
Когда реляционные базы данных были изобретены в 1970 году, стоимость хранения и памяти относительно вычислений была достаточно высокой. Целью нормализации модели базы данных было сокращение количества повторяющихся данных, то есть затрат на базу данных. Ядро СУБД применяло блокировки, в том числе кратковременные, чтобы обеспечить строгую семантику ACID (атомарность, согласованность, изоляция, устойчивость) при выполнении операций со всеми необходимыми элементами данных вместе. Блокировки данных обеспечивают согласованность данных, но это покупается за счет параллелизма, задержки и доступности.
Сегодня стоимость хранилища и памяти относительно низкая по сравнению с вычислениями, поэтому нам больше не приходится оптимизировать эффективность хранения. При наличии рабочих нагрузок, требующих увеличения уровня параллелизма и доступности, а также более низких задержек, требуется новый тип базы данных, оптимизированный под эти требования. Так появились базы данных NoSQL.
Именно поэтому одна из целей моделирования данных для базы данных NoSQL заключается в том, чтобы обеспечить эффективное использование вычислительных ресурсов для чтения или записи данных. Отчасти потому, что реляционные операторы, такие как объединения между документами, не существуют в базах данных NoSQL, данные должны храниться так, как их использует приложение. Часто данные необходимо денормализовать, дублировать или иным образом сохранить в нарушение многих правил нормализации, действующих в реляционных моделях.
Можно ли использовать NoSQL для реляционных рабочих нагрузок?
На этом этапе может возникнуть вопрос, подходят ли базы данных NoSQL для использования с реляционными рабочими нагрузками. Ответ: да! Базы данных NoSQL можно использовать для рабочих нагрузок, в которых существуют отношения между разными сущностями.
Базы данных NoSQL часто используются, когда реляционная база данных не может удовлетворить желаемые требования к производительности, масштабу или доступности приложения.
Методы, используемые при проектировании для базы данных NoSQL, отличаются от моделирования данных для реляционной базы данных. Эти методы сложно понять специалисту, который работал только с реляционными базами данных. Некоторые рекомендации по созданию реляционных баз данных часто являются антипаттернами при разработке для базы данных NoSQL.
В оставшейся части этого модуля и в модуле о расширенном моделировании мы рассмотрим методы, которые используются для моделирования данных таким образом, чтобы повысить производительность базы данных NoSQL.