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

Базы данных SQL и NoSQL

Двумя наиболее распространенными типами баз данных являются базы данных SQL (реляционные) и базы данных NoSQL. Оба широко используются во многих типах вычислений и хранения данных. Согласно опросу ScaleGrid, проведенному в марте 2019 года, базы данных SQL используют примерно 60% разработчиков, а базы данных NoSQL используют примерно 40% разработчиков.

С 1980-х годов реляционные базы данных были основным способом хранения и доступа разработчиков к данным. SQL (язык структурированных запросов) — это инструмент, используемый для взаимодействия с реляционными базами данных. Реляционные базы данных содержат таблицы, которые структурируют данные в отдельные столбцы и строки. Эти схемы должны быть определены и настроены до того, как вы сможете работать с данными в своей базе данных. Это означает, что все данные в базе данных должны соответствовать определенной схеме. Как вы можете себе представить, эта жесткость — палка о двух концах: разработчики могут предсказуемо взаимодействовать со своими данными, но имеют ограниченную гибкость, если их моделирование данных нуждается в изменении по мере роста проекта.

Ниже приведен пример того, как реляционная база данных может моделировать систему ввода заказов для производителя. Каждый блок представляет собой отдельную таблицу (например, «Заказы»). Каждая запись в блоке представляет столбец таблицы и соответствующий ему тип данных.

Базы данных NoSQL впервые получили распространение в эпоху Web 2.0, когда пользовательский контент означал постоянно растущие объемы данных, которые необходимо было хранить и получать к ним доступ на многочисленных устройствах. NoSQL означает «не SQL» или «не только SQL». Как видно из названия, базы данных NoSQL используют модели данных, отличные от табличных отношений с SQL.

Базы данных NoSQL отличаются друг от друга более широко, чем реляционные базы данных. Существует четыре основных типа баз данных NoSQL: ключ-значение, столбец, документ и график. Как показано на графике ниже, эти типы отличаются друг от друга по нескольким ключевым аспектам, включая производительность, масштабируемость, гибкость и сложность.

Когда выбирать базу данных SQL или NoSQL

Поскольку базы данных NoSQL относительно новы, вам может быть интересно, почему все больше разработчиков и компаний начали использовать их вместо реляционных (SQL) баз данных.

Реляционные базы данных превосходно обеспечивают целостность данных, которая также известна как ACID (атомарность, согласованность, изоляция, устойчивость) в контексте транзакций базы данных. Например, для большинства финансовых транзакций база данных SQL по-прежнему является лучшим выбором. Реляционные базы данных также имеют смысл, когда вы работаете с данными, которые сильно структурированы и вряд ли претерпят значительные изменения. Например, реляционная база данных хорошо подойдет для моделирования школьных и академических систем управления.

С другой стороны, базы данных NoSQL превосходны в тех областях, где работа с базами данных SQL становится сложной. Во многих случаях решение об использовании базы данных NoSQL сводится к одному: большие данные. В ситуациях с постоянно растущими объемами и типами данных базы данных NoSQL позволяют разработчикам хранить разрозненные данные такими способами, к которым по-прежнему легко получить доступ и которыми легко манипулировать. Базы данных NoSQL также популярны среди стартапов, поскольку их быстрый рост и смена приоритетов требуют множества изменений схемы базы данных.

Мне было сложно понять, как эта разница выглядит на практике. AWS предоставляет хороший пример, помогающий понять, чем работа с базой данных NoSQL может отличаться от работы с базой данных SQL.

В приведенном выше примере с вводом заказа, если бы мы хотели создать список позиций заказа на покупку, отсортированных по количеству на складе, мы могли бы использовать следующий запрос:

Однако, поскольку базы данных NoSQL (например, DynamoDB от AWS, база данных на основе документов) могут хранить гораздо более сложные данные в одном элементе, мы могли бы использовать следующий короткий запрос для доступа к тем же данным:

Напомним, что базы данных SQL полезны, когда вам абсолютно необходимо постоянно поддерживать целостность данных (соответствие ACID) и когда вы работаете со структурированными данными, которые вряд ли претерпят значительные изменения. Базы данных NoSQL идеально подходят для хранения больших объемов неструктурированных данных и в ситуациях, когда быстрый рост и развитие могут привести к частым изменениям структуры данных.

Вы должны выбрать только один?

Нет! Фактически, большинство организаций используют в своих системах базы данных как SQL, так и NoSQL. Таким образом, разработчики могут извлечь выгоду из уникальных сильных и слабых сторон каждого типа базы данных.