1. Обзор
Часто нам сложно выбрать нереляционную базу данных в качестве основного хранилища данных для наших приложений.
В этой статье мы рассмотрим две популярные нереляционные базы данных, Redis и MongoDB .
Сначала мы кратко рассмотрим функции, предлагаемые Redis и MongoDB. Затем мы обсудим, когда использовать Redis или MongoDB, сравнив их друг с другом.
2. Редис
Redis — это хранилище структур данных в памяти, которое предлагает богатый набор функций. Он полезен в качестве кэша, брокера сообщений и очереди .
2.1. Функции
- Выделенный интерфейс командной строки — redis-cli
- Сохраняет пары ключ-значение и поддерживает структуры данных, такие как список, набор и хэш.
- Может хранить значения размером до 512 МБ.
- Позволяет публиковать и подписываться на сообщения, используя очереди сообщений публикации/ подписки.
- Геопространственная поддержка путем предоставления специальных команд для управления геопространственными данными в реальном времени.
- Разрешает выполнение LUA-скриптов
- Предлагает различные клиенты для популярных технологий
- Поддерживает IoT и встроенные устройства
- Поддержка весенних данных
- Поддержка Spring Cache с использованием Java-клиентов, таких как Redisson.
2.2. Монтаж
Мы можем скачать последнюю версию сервера Redis с официального сайта и установить его:
$ wget http://download.redis.io/releases/redis-6.0.9.tar.gz
$ tar xzf redis-6.0.9.tar.gz
$ cd redis-6.0.9
$ make
3. МонгоБД
MongoDB — это база данных документов NoSQL, которая хранит информацию в структуре документа, подобной JSON. Он полезен в качестве хранилища данных без схемы для быстро меняющихся приложений, создания прототипов и стартапов на этапе проектирования и реализации .
3.1. Функции
- Предлагает интерактивный интерфейс командной строки MongoDB Shell (
mongosh
) для выполнения административных операций и запроса/обновления данных . - Структура запроса на основе JSON с поддержкой объединений
- Поддерживает различные типы поиска, такие как географический поиск, поиск по графику и текстовый поиск.
- Поддерживает транзакции ACID с несколькими документами
- Поддержка весенних данных
- Доступно в версиях сообщества, предприятия и облака ( MongoDB Atlas ).
- Различные драйверы для основных технологий, таких как C++, Java , Go, Python, Rust и Scala.
- Предоставляет графический интерфейс для изучения и управления данными через MongoDB Compass.
- Предлагает визуальное представление данных с использованием диаграмм MongoDB .
- MongoDB BI Connector обеспечивает подключение к платформам бизнес-аналитики и аналитики.
3.2. Монтаж
Мы можем загрузить последнюю версию сервера MongoDB или, если вы используете macOS, мы можем установить версию сообщества напрямую с помощью Homebrew :
brew tap mongodb/brew
brew install mongodb-community@4.4
4. Когда использовать Redis?
4.1. Кэширование
Redis обеспечивает лучшую в своем классе производительность кэширования, обеспечивая время отклика менее миллисекунды для часто запрашиваемых элементов .
Кроме того, он позволяет устанавливать время истечения срока действия ключей с помощью таких команд, как EXPIRE
, EXPIREAT
и PEXPIRE
.
В то же время мы можем использовать команду PERSIST
, чтобы удалить время ожидания и сохранить пару ключ-значение, что делает ее идеальной для кэширования.
4.2. Гибкое хранение данных
Redis предоставляет различные структуры данных, такие как строка, список, набор и хеш, чтобы решить, как хранить и организовывать наши данные. Следовательно, Redis дает нам полную свободу в реализации структур базы данных.
Однако для продумывания дизайна БД также может потребоваться много времени. Точно так же может быть сложно создать и поддерживать внутреннюю структуру схемы с помощью Redis.
4.3. Комплексное хранилище данных
Точно так же, используя комбинацию списка, набора и хэша, мы можем реализовать сложные структуры данных, такие как очереди, массивы, отсортированные наборы и графики для нашего хранилища.
4.4. Чат, очередь и брокер сообщений
Redis может публиковать сообщения и подписываться на них, используя очереди сообщений публикации/подписки с сопоставлением шаблонов . Таким образом, Redis может поддерживать чат в реальном времени и приложения для социальных сетей.
Точно так же мы можем реализовать облегченную очередь, используя структуру данных списка . Кроме того, список Redis поддерживает атомарные операции и предлагает возможности блокировки, что делает его подходящим для реализации брокера сообщений.
4.5. Хранилище сеансов
Redis предоставляет хранилище данных в памяти с возможностями сохранения, что делает его хорошим кандидатом для хранения и управления сеансами для веб-приложений и мобильных приложений.
4.6. Интернет вещей и встроенные системы
Согласно официальной документации Redis, более новые версии, начиная с 4 и 5, поддерживают процессор ARM и Raspberry Pi .
Кроме того, он работает на Android, и предпринимаются попытки включить Android в качестве официально поддерживаемой платформы.
Таким образом, Redis идеально подходит для IoT и встраиваемых систем благодаря небольшому объему памяти и низким требованиям к процессору.
4.7. Обработка в реальном времени
Будучи невероятно быстрой структурой данных в памяти, мы можем использовать ее для приложений обработки в реальном времени.
Например, Redis может эффективно обслуживать приложения, предлагающие такие функции, как оповещения о курсах акций, списки лидеров и аналитика в реальном времени.
4.8. Геопространственные приложения
Redis предлагает специально созданную структуру данных в памяти Geo Set, построенную на отсортированном наборе, для управления геопространственными индексами. Кроме того, он предоставляет специальные геокоманды, такие как GEOADD
, GEOPOS
и GEORADIUS
, для добавления, чтения и анализа геопространственных данных.
Таким образом, с помощью Redis мы можем создавать геопространственные приложения в режиме реального времени с функциями определения местоположения, такими как время в пути и расстояние в пути .
5. Когда использовать MongoDB?
5.1. Динамические запросы
MongoDB предлагает мощный набор инструментов запросов. Кроме того, он предоставляет широкий спектр гибких схем запросов, таких как географический поиск, поиск по графу и текстовый поиск для эффективного поиска данных.
В то же время, благодаря поддержке структурированных запросов JSON, MongoDB выглядит лучшим выбором для сценариев, в которых поиск и аналитика данных являются повседневной деятельностью.
5.2. Быстро меняющаяся схема
MongoDB может быть полезен на этапах проектирования и ранней реализации, когда нам требуются быстрые изменения в нашей схеме. В то же время он не делает предположений о базовых данных и оптимизирует себя, не нуждаясь в схеме.
5.3. Прототипирование и хакатоны
Следуя структуре документов, подобной JSON, MongoDB позволяет быстро создавать прототипы, быстро интегрировать их с интерфейсными каналами и проводить хакатоны .
В то же время это может быть полезно для младших команд, которые не хотят иметь дело со сложностями СУБД.
5.4. Каталоги
Предоставляя динамическую схему с самоописанием, MongoDB упрощает добавление продуктов, функций и рекомендаций для таких каталогов, как электронная коммерция, управление активами и запасы.
Мы также можем использовать выразительные запросы в MongoDB для таких функций, как расширенный поиск и аналитика, путем индексирования поля или набора полей документа, структурированного в формате JSON.
5.5. Мобильные приложения
Структура документа JSON MongoDB позволяет хранить различные типы данных с разных устройств вместе с геопространственными индексами.
Кроме того, горизонтальная масштабируемость с собственным сегментированием позволяет легко масштабировать мобильное приложение. Таким образом, MongoDB может обслуживать множество пользователей, обрабатывать петабайты данных и поддерживать сотни тысяч операций в секунду, что делает его достойным выбором для поддержки мобильных приложений.
5.6. Богатые контентом приложения
Нелегко включать различный контент в РСУБД для современных приложений с большим количеством контента. С другой стороны, MongoDB позволяет хранить и обслуживать богатый контент, такой как текст, аудио и видео .
Кроме того, мы можем легко хранить файлы размером более 16 МБ, используя MongoDB GridFS . Это позволяет получить доступ к части больших файлов без загрузки всего файла в память.
Кроме того, он автоматически синхронизирует наши файлы и метаданные на всех серверах. В результате MongoDB выглядит более подходящим выбором для поддержки приложений с богатым содержимым.
5.7. Игровые приложения
Подобно мобильным и насыщенным контентом приложениям, игры также требуют значительного масштабирования и динамических структур данных. Таким образом, MongoDB может стать многообещающим выбором для игровых приложений.
5.8. Служба глобальной облачной базы данных
MongoDB Atlas доступен в нескольких облачных сервисах, таких как AWS, Google Cloud и Azure . Кроме того, со встроенным механизмом репликации и аварийного переключения он предлагает высокодоступную распределенную систему. Таким образом, мы можем быстро развернуть базу данных и управлять ею, а также использовать ее как глобальную облачную службу базы данных.
6. Заключение
В этой статье мы рассмотрели Redis и MongoDB как варианты нереляционной базы данных.
Сначала мы рассмотрели функции, предлагаемые обеими базами данных. Затем мы рассмотрели сценарии, в которых один из них лучше другого.
Мы определенно можем заключить, что Redis выглядит многообещающе как лучшее решение для кэширования, брокера сообщений и очереди . В то же время он может оказаться достойным в обработке в реальном времени, геопространственных приложениях и встроенных системах.
С другой стороны, MongoDB — хороший выбор для хранения JSON-подобных объектов. В результате MongoDB может лучше всего подходить для архитектуры без схемы для прототипирования современных мобильных и игровых приложений с большим количеством контента.