1.1 Как работает база данных NoSQL

Базы данных NoSQL используют различные модели данных для доступа и управления информацией. Они оптимизированы для приложений, которые работают с большим объемом данных, требуют низкой задержки и гибких моделей данных. Для этого ослабляются строгие требования к непротиворечивости данных, характерные для других типов БД.

Моделируем простую базу данных книг.

  • В реляционной базе данных запись о книге часто разделяется на несколько частей (или «нормализуется») и хранится в отдельных таблицах. Отношения между ними определяются ограничениями первичных и внешних ключей. Например, в таблице «Книги» имеются столбцы «ISBN», «Название книги» и «Номер издания», в таблице «Авторы» – столбцы «ИД автора» и «Имя автора», а в таблице «Автор–ISBN» – столбцы «Автор» и «ISBN». Реляционная модель создана для обеспечения целостности ссылочных данных между таблицами в базе данных. Данные нормализованы для снижения избыточности и оптимизированы для хранения.
  • В базе данных NoSQL запись о книге обычно хранится как документ JSON. Для каждой книги или элемента значения «ISBN», «Название книги», «Номер издания», «Имя автора» и «ИД автора» хранятся в качестве атрибутов в едином документе. Эта модель данных оптимизирована для интуитивно понятной разработки и горизонтальной масштабируемости.

1.2 Для чего можно использовать базы данных NoSQL?

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

  • Гибкость.Базы данных NoSQL обычно имеют гибкие схемы, что позволяет разработчикам писать код быстрее и поэтапно внедрять изменения. Такие модели подходят для частично структурированных и неструктурированных данных.
  • Масштабируемость. Базы данных NoSQL предназначены для масштабирования с помощью распределенных кластеров аппаратного обеспечения, а не через дорогостоящие надежные серверы. Некоторые провайдеры облачных услуг автоматизируют этот процесс в фоновом режиме, предоставляя полностью администрируемый сервис.
  • Высокая производительность. Базы данных NoSQL заточены под конкретные модели и способы доступа, что дает большую производительность, чем у реляционных баз данных.
  • Широкие функциональные возможности. Базы данных NoSQL предоставляют API и типы данных с широким функционалом, разработанные специально для соответствующих моделей данных.

1.3 Типы баз данных NoSQL

NoSQL базы данных используются, если нет возможности поместить данные в таблицу. Данные могут быть в разных форматах. Обычно можно выделить 6 основных типов NoSQL баз.

БД на основе пар «ключ‑значение»

Базы данных с парами «ключ-значение» позволяют разделять данные по-другому и масштабировать их без ограничений, в отличие от других БД. Это полезно для игр, рекламных приложений и устройств IoT. Например, Amazon DynamoDB может быстро обрабатывать данные любого размера с задержкой в несколько миллисекунд. Это помогло Snapchat перенести Stories на сервис DynamoDB и поддерживать большую нагрузку на запись в хранилище.

Документ

В приложениях данные часто хранятся в похожем на JSON формате, потому что для разработчиков это удобно и понятно. Документные базы данных позволяют использовать ту же модель документов, что и в коде приложения. Модель данных гибкая, полуструктурированная и иерархическая, поэтому можно модифицировать ее под свои нужды.

Такую модель можно использовать для каталогов, профилей пользователей и систем управления контентом, где документы уникальны и изменяются по мере изменения обстоятельств. Amazon DocumentDB (совместимая с MongoDB) и MongoDB — это две популярные документные базы данных, которые предоставляют функциональные и понятные API для разработки.

Графовые БД

Графовые базы данных помогают создавать и запускать приложения, которые работают с связанными данными. Например, социальные сети, системы рекомендаций, детекторы мошенничества и графы знаний. Amazon Neptune - это управляемый сервис графовых баз данных. Neptune поддерживает модель Property Graph и Resource Description Framework (RDF), и предлагает два графовых API: TinkerPop и RDF / SPARQL. Популярные графовые БД - Neo4j и Giraph.

Базы данных в памяти

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

Amazon MemoryDB для Redis — это совместимый с Redis сервис базы данных в памяти. Он ускоряет чтение до нескольких миллисекунд и обеспечивает надежность в нескольких зонах доступности. MemoryDB создана для повышения производительности и надежности, поэтому ее можно использовать в качестве основной базы данных для приложений на базе микросервисов.

Amazon ElastiCache - это сервис для поддержания рабочих нагрузок с низкой задержкой и высокой пропускной способностью. Он управляется и совместим с Redis и Memcached. Клиенты, такие как Tinder, используют хранилища данных в памяти, чтобы их приложения имели быстрые отклики. Amazon DynamoDB Accelerator (DAX) - это другое хранилище данных, которое позволяет DynamoDB работать быстрее.

Поисковые базы данных

Многие приложения создают журналы, чтобы помогать разработчикам находить и устранять проблемы.

Amazon OpenSearch – это специально разработанный сервис для визуализации и аналитики данных, которые генерируются автоматически, почти в реальном времени. Это достигается путем индексирования, агрегирования частично структурированных журналов и метрик и поиска по ним.

Amazon OpenSearch - мощный, высокопроизводительный сервис для полнотекстового поиска, который использует Expedia для отслеживания 150 доменов, 30 ТБ данных и 30 миллиардов документов для мониторинга, устранения неисправностей, отслеживания стека распределенных приложений и оптимизации затрат.

1.4 Сравнение баз данных SQL (реляционных) и NoSQL (нереляционных)

NoSQL имеет много преимуществ. Поэтому до начала писать свой инструмент, нужно знать, что уже есть такой. Вот сравнение NoSQL и SQL баз данных:

Подходящие рабочие нагрузки

Реляционные БД предназначены для приложений обработки транзакций, которые должны быть строго непротиворечивыми и работать в режиме реального времени (OLTP). Они также хорошо подходят для аналитической обработки в режиме реального времени (OLAP).

Базы данных NoSQL делают доступными много видов доступа к данным, в том числе приложения с низким временем отклика. Поисковые БД NoSQL подходят для аналитики частично структурированных данных.

Модель данных

Реляционная модель организует данные в таблицы со строками и столбцами. Она показывает как должны быть связаны таблицы, строки, столбцы, индексы и прочее в базе данных. Это гарантирует целостность связанных данных.

NoSQL базы данных предлагают различные типы данных, как пары «ключ-значение», документы и графы, которые работают быстро и устойчиво к нагрузке.

Свойства ACID

Реляционные базы данных обеспечивают набор свойств ACID: атомарность, непротиворечивость, изолированность и надежность.

  • Атомарность требует, чтобы транзакция либо выполнялась полностью, либо не выполнялась вовсе.
  • Непротиворечивость означает, что после завершения транзакции все данные должны соответствовать таблице базы данных.
  • Для изоляции требуется, чтобы параллельные транзакции выполнялись отдельно друг от друга.
  • Надежность означает, что после непредвиденных проблем в системе или прекращения подачи электроэнергии мы можем восстановить последнее сохраненное состояние.

Базы данных NoSQL часто предлагают компромисс, позволяя более гибкой модели данных, чтобы сохранить возможность горизонтального масштабирования. Это делает БД NoSQL - хорошим выбором для примеров c большой пропускной способностью и низкой задержкой, когда нужно масштабировать без ограничений одного инстанса.

Производительность

Главным образом, производительность зависит от дисковой подсистемы. Для достижения максимальной производительности часто требуется оптимизация запросов, индексов и структуры таблицы.

Производительность зависит от размера кластера аппаратного обеспечения, задержки сети и приложения, вызывающего её.

Масштабирование

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

Базы данных NoSQL обычно поддерживают высокую разделяемость благодаря шаблонам доступа с возможностью масштабирования на основе распределенной архитектуры. Это позволяет повысить пропускную способность и обеспечить устойчивую производительность почти в неограниченных масштабах.

API

Запись и извлечение данных делается с помощью запросов на языке SQL. Запросы анализирует и исполняет реляционная база данных.

API объектно-ориентированное позволяет программистам легко записывать и извлекать данные. С помощью ключей секций приложения можно делать поиск по парам «ключ-значение», столбцам или частично структурированным документам, которые содержат объекты и атрибуты приложений.