SQL vs NoSQL

Статья основана на шестом видео из 30 тем курса SQL c 0 от Аристова Евгения. Ссылки на видео на платформах RUTUBE и VK видео.

В прошлых статьях мы разбирали реляционную модель базы данных, нормальные формы и другое. Всё это относилось к SQL решениям. Сегодня подробнее узнаем о NoSQL решениях.

RDBMS

RDBMS – Relational Database Management System – реляционная база данных

Характеристики RDBMS:

  • Способ взаимодействия с базой данных – SQL
  • Внутри базы всё находится в таблицах (relation)
  • ACID – транзакционная база данных. Транзакции переводят базу данных из одного консистентного состояния в другое, не мешая друг другу.
  • Плохо масштабируется (горизонтально)

Примеры RDBMS: Oracle, MSSQL, SQL Lite, MySQL, PostgreSQL

История развития СУБД

Как видно из схемы, Oracle – одна из самых долго живущих СУБД. Также до сих пор используется в ряде компаний DB2.

Пик MySQL пришёлся на 1999-2003 годы, что связано с активным развитием интернета в тот период и простотой интеграции с perl и php. В целом популярность MySQL до сих пор сохраняется из за LAMP стека.

В 1996 в PostgreSQL был добавлен SQL (подробнее об истории PostgreSQL).

После 2000 года стали появляться различные NoSQL решения, которые выполняют какие-то определенные узкоспециализированные задачи области лучше, чем мультикомбайны RDBMS.

Рейтинг СУБД

Здесь можно найти актуальный рейтинг СУБД, который обновляется ежемесячно. По состоянию на март 2024 года, классические решения – Oracle и MySQL – находятся на топовых позициях, а PostgreSQL и MongoDB активно растут. Интересно, что также в списке лидеров присутствует Microsoft Access, который очень популярен, например, в Германии, из за низкого порога входа и простоты реализации графического приложения. Практически все остальные позиции в рейтинге – NoSQL решения.

NoSQL

NoSQL имеет две расшифровки:

  • No SQL – нереляционная база данных
  • Not also SQL – не только реляционная база данных, так как многие NoSQL базы данных поддерживают SQL нотацию.

Всего в NoSQL решениях четыре больших семейства:

  1. Колоночное хранение – всё хранится в колонках
  2. Ключ-значение
  3. Графовые базы данных
  4. Документоориентированные

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

Внутри обычно хранится key-value, json (чаще встречается) или графовое представление, но не таблица. Это зависит от структуры языка.

В таких решениях обычно нет SQL (SELECT, UPDATE и т.д.), но во многих популярных языках есть транслятор SQL запросов – пишется SQL запрос, который внутри преобразуется в NoSQL.

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

Преимущества NoSQL решений – легко масштабируются и имеют бесплатные community open sourse версии. В последнее время считается, что open sourse – это скорее минус, чем плюс. Однако, это помогает спрогнозировать, в какие места могут быть нанесены атаки.

Примеры NoSQL решений: MongoDB, Cassandra, Elasticsearch, Redis

Key Value

Каждому ключу соответствует одно значение. Практически мгновенный поиск осуществляется по ключу.

Рейтинг key-value решений

Примеры не таких известных key-value решений:

  • DCS (Distributed Control System) – etcd, consul, ZooKeeper
  • Foundationdb – распределенная база данных с транзакциями и очень высокой скоростью, стремительно набирает популярность
  • Redis – самое популярное решение, open sourse лицензия, набрало 60к+ звезд на Github, 50+ поддерживаемых языков. Очень быстрое решение, для которого миллионы запросов – не проблема. Доступно кластерное исполнение. Может хранить данные не только в памяти, но и записывать на диск. Классическое использование – кэширование, хранение сессий и брокер сообщений.

Document Store

Документоориентированное хранение не сильно отличается от key-value. В document storage тоже есть ключ и значение, но в значении хранится целый документ, содержащий ряд полей, по которым можно делать поиск и агрегацию.

В типе хранения key-value вместо value также можно записать документ, поэтому граница между данными двумя способами хранения в последнее время размыта.

Классические варианты: MongoDB, CouchBase.

Рейтинг document store решений

CouchBase Server можно назвать лучшим NoSQL решением в мире на сегодняшний день. Хорошо работает и с OLTP, и с OLAP нагрузкой. Обеспечивает выполнение миллионов запросов. Используется повсеместно:

Column

Column хранение принципиально отличается от реляционных баз и key-value.

По сути column хранение является транспонированной таблицей. В ней список атрибутов хранится слева – в колонке, а список значений каждого атрибута – в строчке.

Преимущества колоночных таблиц:

  • Высокий коэффициент сжатия данных – до 10 раз, в среднем в 3-5 (данные хорошо сжимаются, так как они однотипные)
  • Высокая производительность при операциях чтения (так как данные предагрегированы)
  • Исключение дополнительных индексов
  • Параллелизация
  • При OLAP нагрузке column решения могут быть в тысячи раз быстрее RDBMS решений

Недостатки:

  • Операции INSERT, UPDATE являются DDL операциями (меняющими описание таблицы), а это очень дорого по памяти и по времени
  • Добавление по одной записи не оптимально и занимает аналогичное время с добавлением миллиона записей

Самый классический популярный представитель – ClickHouse.

Рейтинг column решений

Graph

Реализуется через графы для решения классических задач, например, нахождения расстояния между городами. Также используется для хранения систем социальных сетей.

Рейтинг graph решений

Последнее время появились NoSQL решения, которые не укладываются в классческое разделение. Например:

NewSQL

В 2016 году появился термин NewSQL.

Он объединяет преимущества SQL и NewSQL:

  • способ взаимодействия SQL, иногда встроенный язык
  • внутри базы данных – таблицы и иногда JSON
  • ACID
  • отлично масштабируется

Основные примеры:

  • Amazon Aurora
  • BigQueryAI-ready analytics
  • Google Spanner
  • CockroachDB – поддерживает PostgreSQL протокол, поэтому удобен для переезда на него

Презентация к статье здесь.

Седьмая из 30 тем будет скоро доступна. Если вы хотите быстрее получить доступ – присоединяйтесь к онлайн группе, ссылка доступна в описании курса.

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

десять − пять =