Статья основана на шестом видео из 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 решениях четыре больших семейства:
- Колоночное хранение – всё хранится в колонках
- Ключ-значение
- Графовые базы данных
- Документоориентированные
На данный момент разработано более 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 решений:
- 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.
Graph
Реализуется через графы для решения классических задач, например, нахождения расстояния между городами. Также используется для хранения систем социальных сетей.
Последнее время появились NoSQL решения, которые не укладываются в классческое разделение. Например:
NewSQL
В 2016 году появился термин NewSQL.
Он объединяет преимущества SQL и NewSQL:
- способ взаимодействия SQL, иногда встроенный язык
- внутри базы данных – таблицы и иногда JSON
- ACID
- отлично масштабируется
Основные примеры:
- Amazon Aurora
- BigQuery – AI-ready analytics
- Google Spanner
- CockroachDB – поддерживает PostgreSQL протокол, поэтому удобен для переезда на него
Презентация к статье здесь.
Седьмая из 30 тем будет скоро доступна. Если вы хотите быстрее получить доступ – присоединяйтесь к онлайн группе, ссылка доступна в описании курса.
Добавить комментарий