sql или nosql что выбрать
SQL против NoSQL на примере MySQL и MongoDB
Авторизуйтесь
SQL против NoSQL на примере MySQL и MongoDB
Когда необходимо выбрать СУБД, главный вопрос обычно заключается в выборе реляционной (SQL) или нереляционной (NoSQL) структуры. У обоих вариантов есть свои преимущества, а также несколько ключевых особенностей, которые стоит иметь в виду при выборе.
Основные различия
Представьте себе город — пусть он называется Город А, где все говорят на одном языке. Все дела ведутся на нём, он используется в любой форме коммуникации — в целом это единственное средство взаимодействия и взаимопонимания для обитателей города. Изменение языка в любой из сфер деятельности собьёт всех с толку.
Теперь представьте Город Б, где все обитатели говорят на разных языках. Они совершенно по-разному взаимодействуют с окружающим миром, и для них не существует «универсального» средства общения.
Эти два примера наглядно демонстрируют различия между реляционными и нереляционными базами данных, и за этими различиями скрываются ключевые особенности обеих СУБД.
Реляционные базы данных используют структурированный язык запросов (Structured Query Language, SQL) для определения и обработки данных. С одной стороны, это открывает большие возможности для разработки: SQL один из наиболее гибких и распространённых языков запросов, так что его выбор позволяет минимизировать ряд рисков, и будет особенно кстати, если предстоит работа с комплексными запросами. С другой стороны, в SQL есть ряд ограничений. Построение запросов на этом языке обязывает предопределять структуру данных и, как в случае с Городом А, последующее изменение структуры данных может быть губительным для всей системы.
Нереляционные базы данных, в свою очередь, предлагают динамическую структуру данных, которые могут храниться несколькими способами: ориентированно по колонкам, документо-ориентированно, в виде графов или на основе пар «ключ-значение». Такая гибкость означает следующее:
Масштабируемость
В большинстве случаев SQL базы данных вертикально масштабируемые, то есть вы можете увеличивать нагрузку на отдельно взятый сервер, наращивая мощность центральных процессоров, объёмы ОЗУ или системы хранения данных. А NoSQL базы данных горизонтально масштабируемы. Это означает, что вы можете увеличивать трафик, распределяя его или добавляя больше серверов к вашей СУБД. Всё равно, что добавлять больше этажей к вашему зданию, либо добавлять больше зданий на улицу. Во втором случае, система может стать куда больше и мощнее, делая выбор NoSQL базы данных предпочитаемым для больших или постоянно меняющихся структур данных.
Структура
В реляционных СУБД данные представлены в виде таблиц, в то время как в нереляционных — в виде документов, пар «ключ-значение», графов или wide-column хранилищ. Это делает SQL базы данных лучшим выбором для приложений, которые предполагают транзакции с несколькими записями — как, например, система учётных записей — или для устаревших систем, которые были построены для реляционных структур.
В число СУБД для SQL баз данных входят MySQL, Oracle, PostgreSQL и Microsoft SQL Server. Для работы с NoSQL подойдут MongoDB, BigTable, Redis, RavenDB Cassandra, HBase, Neo4j и CouchDB.
SQL vs. NoSQL: MySQL или MongoDB
Разобравшись с ключевыми структурными различиями SQL и NoSQL баз данных, стоит внимательно рассмотреть их функциональные особенности на примере MySQL и MongoDB.
MySQL: реляционная СУБД
MongoDB: нереляционная СУБД
Какую СУБД выбрать?
MySQL — верный выбор для любого проекта, который может положиться на предопределённую структуру и заданные схемы. С другой стороны, MongoDB — отличный вариант для быстрорастущих проектов без определённой схемы данных. В особенности если вы не можете определить схему для своей базы данных, вам не подходит ни одна из предлагаемых другими СУБД или в вашем проекте она постоянно меняется, как, например, в случае с мобильными приложениями, системами аналитики в реальном времени или контент-менеджмента.
👥 SQL или NoSQL – что использовать для следующего проекта?
С другой стороны, базы данных NoSQL впервые были использованы в 1998 году Карло Строцци.
Наиболее распространенным различием между этими двумя системами баз данных (БД) является то, что SQL является реляционным, а NoSQL нереляционным.
Давайте углубимся в эти две базы данных, чтобы лучше обосновать свое решение, когда в следующий раз вы рассматриваете базу данных для своего проекта.
Структура базы данных
Давайте поговорим о структурировании.
База данных SQL имеет определенную структуру схем.
Схема содержит таблицы, и каждая таблица содержит определенное количество столбцов.
Это означает, что пользователь не может обновить таблицу за пределами количества столбцов, указанных в таблице.
Это особенно полезно, когда вам необходимо сохранить целостность данных, а также убедиться в том, какие данные сохраняются в вашей базе данных.
Каждая таблица в базе данных SQL может быть связана, то есть, вы можете иметь отношения между таблицами.
Эти отношения могут быть один ко многим, многие ко многим или один к одному.
Тип ваших отношений зависит от того, что вам нужно.
Например, давайте рассмотрим гипотетическую ситуацию; У нас есть компания с пользователями, и пользователи могут делать заказы на товары.
Затем мы можем решить, что пользователи могут создавать несколько заказов, но каждый заказ может быть создан только одним пользователем.
Это будут отношения один ко многим, то есть один пользователь ко многим заказам.
Следовательно, структура таблицы для обеих таблиц будет выглядеть аналогично приведенной ниже.
В нашей БД у нас может быть таблица пользователей, структурированная так, как показано ниже:
В случае отношения «один к одному» мы могли бы также указать order_id в users_table, если мы решим получить пользователя по его связанному идентификатору заказа.
Для ситуаций «многие ко многим» обычно используется дополнительная таблица, называемая сводной таблицей.
Сравнение SQL и NoSQL: как выбрать систему хранения данных
Согласно рейтингу DB-Engines, в топе самых популярных СУБД четыре реляционных (SQL) и одна нереляционная (NoSQL). Реляционные базы данных занимают львиную долю рынка и наиболее известны. Однако в ряде случаев лучше выбрать NoSQL-решения различного типа.
Мы подготовили небольшой гайд по типам баз данных, чтобы вы могли принять верное решение.
Что такое реляционные и нереляционные базы данных
Реляционная база данных (SQL) — база, где данные хранятся в формате таблиц, они строго структурированы и связаны друг с другом. В таблице есть строки и столбцы, каждая строка представляет отдельную запись, а столбец — поле с назначенным ей типом данных. В каждой ячейке информация записана по шаблону.
Нереляционная база данных (NoSQL) — хранит данные без четких связей друг с другом и четкой структуры. Вместо структурированных таблиц внутри базы находится множество разнородных документов, в том числе изображения, видео и даже публикации в социальных сетях. В отличие от реляционных БД, NoSQL базы данных не поддерживают запросы SQL.
Реляционные базы данных, или базы данных SQL
Особенности. Основная особенность — надежность и неизменяемость данных, низкий риск потери информации. При обновлении данных их целостность гарантирована, они заменяются в одной таблице.
Реляционные базы данных, в отличие от нереляционных, соответствуют ACID — это требования к транзакционным системам. Соответствие им гарантирует сохранность данных и предсказуемость работы базы данных:
При работе с такими СУБД надо учитывать, что любые изменения в объектах нужно отражать в структуре таблиц, физическая структура данных не соответствует объектной модели приложения.
Реляционные БД идеальны для работы со структурированными данными, структура которых не подвержена частым изменениям.
Так выглядит хранение данных в реляционной базе, по сути, это просто таблица:
Клиент | Средний чек | Число покупок за период |
1 | 1000 | 10 |
2 | 1500 | 5 |
3 | 800 | 6 |
Масштабируемость. Вертикальная, то есть при росте нагрузки растет производительность сервера. Если в базу поступает большой объем данных, рано или поздно наступит порог вертикального масштабирования — сервер не сможет далее увеличивать производительность. Тогда понадобится горизонтальное масштабирование — параллельная обработка данных в кластере серверов.
В больших распределенных системах это может привести к тому, что общая производительность системы упадет, так как нужно поддерживать согласованность данных в нескольких узлах. Это не значит, что СУБД на SQL не подходят для больших проектов — они поддерживают кластеризацию, просто нужно приложить усилия, чтобы настроить систему. Либо использовать базы данных в облаке — там можно получить уже настроенные и надежно работающие кластеры в несколько кликов.
Самые известные SQL-базы данных
MySQL — одна из самых популярных open source реляционных баз данных. Подходит небольшим и средним проектам, которым нужен недорогой и надежный инструмент работы с данными. Поддерживает множество типов таблиц, есть огромное количество плагинов и расширений, облегчающих работу с системой.
Отличается простой установкой, может быть интегрирована с другими СУБД, также интеграция с MySQL есть в любой CMS, фреймворке, языке программирования. Среди минусов — не все задачи выполняет автоматически, если что-то нужное не включено в функционал, придется потратить время на доработку, нет встроенной поддержки OLAP.
PostgreSQL — вторая по популярности open source SQL СУБД. У нее много встроенных функций и дополнений, в том числе для масштабирования в кластер и шардинга таблиц. Подходит, если важна сохранность данных, предполагается их сложная структура. Позволяет работать со структурированными данными, но поддерживает JSON/BSON, что дает некоторую гибкость в схеме данных.
Отличается стабильностью, ее практически невозможно вывести из строя или что-то сломать в таблицах.
Из минусов — сложность конфигурации требует от пользователей некоторого опыта. Также скорость работы может падать во время проведения пакетных операций или при запросах на чтение.
PostgreSQL также можно развернуть в облаке — в отличие от MySQL, она подходит для крупных и масштабных проектов. Кроме того, ее стоит выбрать, если недопустимы ошибки в данных или есть особые требования к базе данных, например поддержка геоданных. Различные расширения PostgreSQL позволяют реализовать многие специализированные запросы.
Нереляционные базы данных, или базы данных NoSQL
Особенности. В отличие от реляционных, в нереляционных базах данных схема данных является динамической и может меняться в любой момент времени. К данным сложнее получить доступ, то есть найти внутри базы что-то нужное — с таблицей это просто, достаточно знать координаты ячейки. Зато такие СУБД отличаются производительностью и скоростью. Физические объекты в NoSQL обычно можно хранить прямо в том виде, в котором с ними потом работает приложение.
Базы данных NoSQL подходят для хранения больших объемов неструктурированной информации, а также хороши для быстрой разработки и тестирования гипотез.
В них можно хранить данные любого типа и добавлять новые в процессе работы.
Масштабируемость. NoSQL базы имеют распределенную архитектуру, поэтому хорошо масштабируются горизонтально и отличаются высокой производительностью. Технологии NoSQL могут автоматически распределять данные по разным серверам. Это повышает скорость чтения данных в распределенной среде.
Четыре вида нереляционных баз данных
Документоориентированные базы данных — данные хранятся в коллекциях документов, обычно с использованием форматов JSON, XML или BSON. Одна запись может содержать столько данных, сколько нужно, в любом типе данных (или типах) — ограничений нет. Внутри одного документа есть внутренняя структура, однако, она может отличаться от одного документа к другому. Также документы можно вкладывать друг в друга.
То есть вместо столбцов и строк мы описываем все данные в одном документе. Если нам нужно было бы добавить новые данные в таблицу реляционной базы данных, пришлось бы изменять ее схему данных. В случае с документами нужно только добавить в них дополнительные пары ключ-значение.
Пример такой базы данных: MongoDB.
Вот так будет выглядеть хранение данных в отдельных документах вместо таблицы со столбцами и строками:
Реляционные vs. нереляционные базы данных: отличия и преимущества
SQL или NoSQL — какую базу данных выбрать? В чем заключается их различие. Преимущества SQL и NoSQL. Сравнение и выводы.
SQL vs NoSQL
Любые компьютерные вычисления связаны с обработкой данных. Они бывают структурированными и неструктурированными. Первые размещают в базах данных, где наравне с информацией хранится ее описание. Говоря о БД, часто можно встретить термины SQL и NoSQL.
SQL — это методика обработки (язык, структура, действия), которая используется для того, чтобы проводить чтение и обработку реляционных и нереляционных (NoSQL) баз данных. Как это все работает и для чего нужно — объясняют специалисты Boodet.Online.
Понятие реляционных и нереляционных баз данных
Термин « реляционный » пришел из алгебры (теория множеств). В формате БД это значит, что данные реляционных баз хранятся в виде таблиц и строк. Нереляционные БД размещают информацию в коллекциях документов JSON.
Реляционные БД используют язык SQL (структурированных запросов). Структура таких баз данных позволяет связывать информацию из разных таблиц с помощью внешних ключей (или индексов), которые используются для уникальной идентификации любого атомарного фрагмента данных в этой таблице. Другие таблицы могут ссылаться на этот внешний ключ, чтобы создать связь между частями данных и частью, на которую указывает внешний ключ.
Различия SQL и NoSQL
SQL и NoSQL — это термины, которые описывают совершенно разные способы обработки данных. Чем они отличаются и почему это влияет на работу?
SQL используют универсальный язык структурированных запросов для определения и обработки данных. Это накладывает определенные ограничения: прежде чем начать обработку, данные надо разместить внутри таблиц и описать.
NoSQL таких ограничений не имеет. Динамические схемы для неструктурированных данных позволяют:
ориентировать информацию на столбцы или документы;
основывать ее на графике;
организовывать в виде хранилища KeyValue;
создавать документы без предварительного определения их структуры, использовать разный синтаксис;
добавлять поля непосредственно в процессе обработки.
Структура
SQL основаны на таблицах, а NoSQL — на документах, парах ключ-значение, графовых БД, хранилищах с широкими столбцами.
Масштабируемость
В большинстве случаев базы данных SQL можно масштабировать по вертикали. Что это значит? Можно увеличить нагрузку на один сервер, увеличив таким образом ЦП, ОЗУ или объем накопителя.
В отличие от SQL базы данных NoSQL масштабируются по горизонтали. Это означает, что больший трафик обрабатывается путем разделения или добавления большего количества серверов. Это делает NoSQL удобнее при работе с большими или меняющимися наборами данных.
В каких случаях используют SQL?
А в каких NoSQL?
необходимо хранить массивы в объектах JSON;
записи хранятся в коллекции с разными полями или атрибутами;
необходимо горизонтальное масштабирование.
Самые распространенные реляционные базы данных
Для работы с реляционными БД лучше всего подойдут:
Microsoft SQL Server.
MySQL
Бесплатный продукт с открытым исходным кодом от Oracle. Отличается стабильностью и хорошим тестированием обновлений до их внедрения. MySQL можно доработать под свои нужды или поискать готовые исправления в обширной библиотеке профильного сообщества.
MySQL работает с любыми ОС: Linux, Windows, Mac, BSD и Solaris. Дружит с Node.js, Ruby, C#, C++, Java, Perl, Python и PHP.
Базу данных MySQL можно реплицировать на несколько узлов, что уменьшает рабочую нагрузку при увеличении доступности приложения.
Oracle
Oracle Database часто используют крупные корпорации. Коммерческий вариант БД часто и грамотно обновляется, есть круглосуточная техническая поддержка.
Еще одно важное преимущество Oracle — возможность восстановления предыдущей версии БД. Помимо этого, есть индексация растровых изображений, секционирование, индексацию на основе функций и по обратному ключу, оптимизация приоритетных запросов.
Microsoft SQL Server
Microsoft SQL Server — это отличный вариант для малого и среднего бизнеса. Диалект T-SQL обрабатывает процедуры, встроенные функции и переменные. Есть важное ограничение: Microsoft SQL Server будет работать только с Linux или Windows. Простой интерфейс ускорит процесс миграции БД, если до этого вы пользовались другой системой.
Нереляционные базы данных
Согласно рейтингу Boodet.Online, самыми удобными системами для обработки нереляционных баз данных являются: MongoDB, Apache Cassandra и Google Cloud BigTable. У всех трех широкий функционал и высокий уровень гибкости.
MongoDB
Apache Cassandra
Apache Cassandra — это продукт с открытым исходным кодом, а значит, достаточно гибкий, адаптируемый практически для любых задач. Идентичность узлов упрощает масштабирование для наращивания архитектуры БД.
Apache Cassandra подойдет для масштабных проектов. Продукт обеспечивает высокую скорость чтения и записи. Даже если часть решения использует SQL, можно применить подобные SQL операторы: DDL, DML, SELECT. Для более высокого уровня безопасности есть резервное копирование и восстановление.
Apache Cassandra — это один из немногих инструментов обработки баз данных, который гарантирует безотказность работы (подробнее читайте в своем SLA).
Google Cloud BigTable
Неплохой продукт от Google, который гарантирует задержку обработки не более 10 мс. BigTable уделяют безотказности много внимания. Например, благодаря функции репликации базы данных более долговечны, доступны и устойчивы при зональных сбоях. Это отличный вариант для работы с Big Data в режиме реального времени (машинное зрение, AI) — можно изолировать рабочую нагрузку для приоритетной аналитики.
Так что же лучше?
Специалисты Boodet.Online работают с обоими вариантами баз данных. Основной критерий выбора: подходит ли приложение для решения конкретной задачи. Как мы определяем, что лучше для конкретного проекта:
Если в БД есть предопределенная схема — используем SQL, если схема динамическая — NoSQL.
Выбираем приоритетное направление масштабирования — по горизонтали или по вертикали.
Определяем, что будет использоваться в задаче — неструктурированные данные или многострочные транзакции.
Выводы
SQL и NoSQL: инь и ян в мире баз данных
SQL или NoSQL — вот в чём вопрос. Чем они различаются? Это конкуренты или сотрудники? Что о них спрашивают на собеседовании?
Про реляционные и нереляционные СУБД на техническом интервью спрашивают часто, причём не только администраторов баз данных, но и бэкенд-разработчиков, тестировщиков, специалистов по кибербезопасности, аналитиков и много кого ещё.
В одной статье мы не сможем глубоко погрузиться в эту тему — материал слишком объёмный. Поэтому просто дадим начальные знания или освежим прежние.
Поговорим про основные типы баз данных, их достоинства и недостатки. А отталкиваться будем от реляционных баз, поэтому их рассмотрим чуть подробнее.
Что такое реляционные базы данных
Это такие базы, в основе которых лежит реляционная модель.
Программист, консультант, специалист по документированию. Легко и доступно рассказывает о сложных вещах в программировании и дизайне.
Реляционную модель данных придумал Эдгар Кодд ещё в семидесятых годах прошлого века.
Математик по образованию, он предложил использовать для обработки данных аппарат теории множеств.
Кодд доказал, что любое представление данных сводится к совокупности двумерных таблиц особого вида, который в математике называется отношением (relation) — отсюда и слово «реляционная» в переводе названия.
Он же вывел 12 правил Кодда, которым должна подчиняться любая реляционная база данных. Они помогли бороться с устаревшими базами, которые недобросовестные поставщики пытались выдать за реляционные.
А ещё Эдгар Кодд дал жизнь языку SQL.
Основные понятия
Отношение — это двумерная таблица с уникальным именем. Она состоит из строк (записей) и столбцов (атрибутов).
Каждая строка таблицы представляет некоторый объект реального мира (экземпляр сущности) или соотношения между объектами.
Столбцы — это атрибуты сущности, для сущности каждого типа они свои.
Итак, реляционная БД — это ограниченный набор особых таблиц с данными. Эти таблицы называются отношениями. Отношения используются для представления сущностей, а также связей между ними.
А что там внутри. Пример нормализации
Разберём устройство реляционной БД подробнее на примере. Позже это поможет нам понимать и сравнивать базы разных типов.
Каждая строка этой таблицы содержит данные о звонке клиента по его проблеме и ответ оператора, а также дату обращения.
Телефон у компании многоканальный. Поэтому одному и тому же оператору могут звонить разные клиенты, а один и тот же клиент может попадать на разных операторов с разными вопросами.
client | client_phone | operator | operator_phone | question | answer | date |
---|---|---|---|---|---|---|
Вася | 8 (902) 111-11-11 | Оператор 1 | 8 (800) 111-11-11 | Когда принтер готов будет?! | Готов, забирайте. | 10.02.2021 |
Лера | 8 (910) 222-22-22 | Оператор 1 | 8 (800) 111-11-11 | На планшете стекло поменяете? | Конечно, приносите. | 10.02.2021 |
Вася | 8 (902) 111-11-11 | Оператор 2 | 8 (800) 222-22-22 | Принтер не работает ваще. | Приносите, посмотрим. | 20.02.2021 |
А теперь представьте, что записей в такой таблице десятки тысяч. И возникает такая ситуация: в компанию звонит самый любимый клиент и говорит, что сменил номер телефона. А нерешённых вопросов по этому клиенту в базе, скажем, сотня. Значит, придётся заменить номер телефона на новый по крайней мере в 100 записях, то есть внести изменения сразу во много строк таблицы Messages.
Конечно, это делается с помощью запроса, а не вручную. Однако даже запрос будет выполнять 99 лишних операций — из-за дублирования информации.
О подобном заботятся ещё на этапе проектирования базы, а предотвращают это путём нормализации отношений.
Что такое нормализация
Чтобы уменьшить размер реляционной базы (не хранить избыточные данные) и избежать противоречивости (аномалий) при работе с ними, отношения в базе нормализуют. Проще говоря — разбивают их на взаимосвязанные таблицы. Это называется декомпозицией.
Избыточность данных — это когда одни и те же данные хранятся в базе сразу в нескольких местах.
Проверим наш пример на избыточность
Каждая строка таблицы Messages содержит имя клиента и никнейм оператора, а также их телефоны. Причём в 1-й и 3-й строках мы видим звонки от одного и того же клиента, а в 1-й и во 2-й — ответы одного и того же менеджера. То есть в 1-й и 3-й строках дублируются имя и телефон клиента — Васи, а в 1-й и 2-й — никнейм менеджера «Оператор1».
Чтобы избавиться от дублирования информации, выделим сущности Клиент и Оператор. И вынесем специфичные для каждой атрибуты в отдельные таблицы.
В первой ( Clients) будут храниться имена и телефоны клиентов, а во второй ( Operators) — операторов. Кроме того, каждой записи в этих таблицах мы присвоим атрибут id — так называемый первичный ключ (его значение уникально, то есть не может повторяться в пределах таблицы). С его помощью мы установим связь с записями таблицы Messages.
Для этого к каждой записи в Messages (напомним, она всё ещё представляет сущность «звонок») добавим два новых атрибута (внешних ключа): id_client и id_oper. Они будут ссылаться на первичные ключи из таблиц Clients и Operators соответственно. Столбцы с именами и телефонами из таблицы Messages уберём.
В такой базе, чтобы поменять телефон клиента сразу для всех записей, достаточно изменить всего одно поле в таблице Clients.
Всего существует шесть форм нормализации реляционных баз данных — в порядке уменьшения избыточности отношений. Все они описаны формальными правилами. Наше отношение мы привели ко второй нормальной форме.
Системы управления реляционными базами данных
Данные в таблицах не лежат мёртвым грузом — с ними работают системы управления базами данных ( СУБД ).
С их помощью создают базы (метасхемы), заполняют их данными и проводят операции над всем этим: добавляют, удаляют, меняют структуру, анализируют и так далее.
Языки манипулирования данными
Это декларативный язык. То есть инструкции в нём не идут одна за другой (не как в императивных языках). Каждый оператор SQL описывает только необходимое действие, а СУБД сама принимает решение, как его выполнить.
Например, чтобы выбрать все данные из таблицы Messages за 10.11.2020, делается запрос:
SELECT * FROM messages WHERE date = ‘10.11.2020’
Язык структурированных запросов делится на несколько частей (группы операторов) и позволяет:
В SQL изначально нет средств для создания печатных отчётов, экранных форм и других инструментов для разработки программ. Хотя SQL сам по себе не является полноценным (Тьюринг-полным) языком программирования, но его стандарт позволяет создавать процедурные расширения. Они доводят его функциональность до полноценного языка программирования.
При этом синтаксис SQL в разных СУБД может различаться. Кое-где даже используются его отдельные диалекты, например:
Что такое объектно-реляционные базы данных
Это такие базы, в которые включены средства работы с объектными типами данных. А возникли они в связи с развитием объектно-ориентированных языков программирования.
В структуре таких баз и языке запросов используются классы, объекты, наследование. В этом направлении развиваются, например, Oracle и PostgreSQL.
Какие реляционные БД популярны в веб-разработке
MySQL
Это открытая СУБД, купленная Oracle в придачу к Sun Microsystems. С ней работают более половины (55,6%) всех разработчиков (по результатам опроса, который в 2020 году провёл сайт StackOverflow.com среди 65 тысяч респондентов).
Главные её преимущества — бесплатность и высокая скорость работы с данными. MySQL создавалась для обработки огромных массивов информации в промышленных масштабах, но благодаря доступности и быстродействию оккупировала Всемирную паутину, заслужив звание «СУБД всея интернета». И сегодня MySQL всё ещё самая удобная СУБД для работы с интернет-страницами и веб-приложениями.
MySQL пользуется мощной поддержкой у создателей языков программирования: практически во всех популярных языках есть интерфейс для работы с ней.
SQLite
Эта СУБД использует большую часть стандартного языка SQL.
Главное преимущество SQlight — встраиваемость. Это объясняется тем, что SQlight не приложение типа «клиент-сервер» (в отличие от других реляционных СУБД), а библиотека, которую подключают непосредственно к программе.
И она тоже весьма популярна: достаточно сказать, что SQLite есть в каждом смартфоне. Например, в смартфонах на Android там хранятся контакты и медиа, а в iOS её используют многие приложения.
PostgreSQL
Её можно назвать самой продвинутой. Это не просто реляционная, а объектно-реляционная свободная СУБД.
PostgreSQL поддерживает не только типы данных, которые есть в других реляционных СУБД. Помимо числовых, текстовых, булевых и других стандартных типов, в ней можно хранить и обрабатывать геометрические и денежные данные, сетевые адреса, JSON, XML, массивы, а также создавать собственные типы данных.
Ограничения реляционных СУБД
Реляционные СУБД просты, удобны и предсказуемы. А их рынок один из самых консервативных в IT-отрасли. Поэтому даже при появлении множества NoSQL реляционные базы остаются самым востребованным инструментом в очень разных отраслях.
По данным DB-Engines за февраль 2021 года, мировая доля реляционных СУБД составляет 74% от всех:
Однако реляционные БД не лишены недостатков.
Масштабируемость
Реляционную базу данных трудно масштабировать горизонтально, то есть распределять таблицы по разным серверам. В этом случае очень сложно строить запросы и связывать таблицы.
Поэтому растущую базу приходится помещать на более мощный и дорогой сервер, то есть масштабировать вертикально.
Но возможности даже самой мощной машины ограничены, поэтому реляционные базы плохо приспособлены для хранения действительно больших данных.
Сложность
Из-за нормализации реляционная база данных имеет сложную структуру. А скорость обработки запроса зависит от числа таблиц, к которым запрос обращается.
Представьте себе, что таблиц 100, 200, 1000, — СУБД будет работать медленно, а код запроса будет очень громоздким.
Гибкость
Реляционные СУБД подходят для обработки данных с чёткой структурой. Например, сообщений, информации о товарах, сведений о пользователях и так далее. Но в них сложно организовать хранение и обработку сущностей с произвольным набором атрибутов или иерархических данных.
NoSQL как альтернатива традиционным БД
Мир меняется. В ходе цифровой трансформации перед бизнесом встают новые задачи. Компании решают их с помощью новых баз данных. Во-первых, чтобы не перегружать имеющиеся, во-вторых, не для всех современных задач подходят классические реляционные СУБД.
И вот, в начале 2000-х появились нереляционные базы. Помимо решения новых задач, их разработчики сделали упор на исправление главных недостатков реляционных баз — проблем с гибкостью, низкой производительностью и масштабируемостью.
В NoSQL нет таких понятий, как строки, столбцы, таблицы и их соединения. Данные в нереляционных базах хранятся как объекты с произвольными атрибутами: это могут быть пары «ключ-значение», документы в формате JSON, графы и так далее.
Виды нереляционных баз данных
Базы NoSQL делятся на четыре основные категории (в зависимости от решаемых с их помощью задач).
Ключ-значение
Такую базу можно представить как огромную таблицу. В каждой её ячейке хранятся данные произвольного типа, а каждому значению присвоен уникальный ключ, по которому это значение можно найти.
Такая СУБД не поддерживает связи между объектами, выполняет лишь операции поиска значений по ключу, добавления и удаления записи.
Базы «ключ-значение» часто используют для кэширования данных и организации очередей.
Их достоинства — быстрый поиск и простое масштабирование.
Их недостаток — нельзя производить операции со значениями. Например — сортировать их или анализировать.
Базы «ключ-значение» применяют в поисковой системе Google, «Википедии», «Фейсбуке», интернет-магазине Amazon.
Одна из самых популярных — Redis. Её используют Uber, Slack, Stack Overflow, сайты гостиниц и туристические, социальная сеть Twitter.
Документоориентированные СУБД
В таких данные хранятся в виде иерархических структур (документов) с произвольным набором полей и их значений. Документы объединяются в коллекции.
Если провести аналогию с реляционными СУБД, то коллекциям соответствуют таблицы, а документам — строки в них.
Например, фрагмент документа с информацией о фильмах:
Документоориентированные базы используют в системах управления содержимым (CMS) — для хранения каталогов и пользовательских профилей.
Одна из самых популярных — MongoDB (там можно создавать процедуры на JavaScript).
Колоночные
Эти базы отличаются от реляционных лишь способом хранения данных на накопителе.
Если реляционная база создаёт для каждой таблицы по файлу, то в колоночной отдельный файл создаётся для каждого столбца таблицы.
Например, если реляционная таблица выглядит так:
name | color | property |
---|---|---|
волк | серый | зубастый |
коза | белая | рогатая |
капуста | зелёная |
То те же записи колоночной базы будут выглядеть примерно так:
Что это даёт? Представьте, что вам нужны только названия объектов, а их свойства вас не интересуют.
При выполнении запроса в реляционной таблице просматривается каждая запись и из неё выбираются нужные данные. В колоночной базе с диска будет считана только одна колонка с названиями. Это сокращает время выполнения запроса, причём намного.
Колоночные базы применяются в различных каталогах и архивах данных, работа с которыми основана на подобных выборках.
Одна из самых популярных СУБД такого типа — Apache Cassandra.
Графовые
В некоторых предметных областях данные удобно представлять в виде графов. Для их хранения лучше всего подходят графовые базы.
Вершины (или узлы графа) — это объекты (сущности), а рёбра графа — взаимосвязи между ними.
Например, информация о друзьях в социальных сетях просто идеальна для представления в виде графа:
Графовые базы применяют в социальных сетях, сервисах рекомендаций, системах выявления мошенничества и им подобных.
Одна из популярнейших графовых СУБД с открытым кодом и собственным языком запросов — это Neo4j.
Что дальше?
Приходите к нам на курс «Базы данных для разработчиков». Вы изучите проектирование баз данных и язык SQL, узнаете, как выбрать СУБД для своего проекта и выжать из неё максимум. Сможете работать с базами в банковской сфере, бэкенд-разработке веб- и мобильных приложений.