MongoDB против Redis: как можно сравнить две очень мощные базы данных NoSQL, имеющие разную направленность? Хотя MongoDB в первую очередь предназначена для больших объемов данных, Redis впечатляет своей скоростью. Обе системы также можно комбинировать.
MongoDB: масштабируемый и гибкий
MongoDB, происходящее от английского термина «huMongous» («огромный»), считается одной из самых известных и популярных систем NoSQL в мире. База данных была разработана в 2009 году компанией 10gen (ныне MongoDB Inc.) с целью наглядного хранения и безопасного управления большими и разнообразными объемами данных. Система особенно характеризуется высокой горизонтальной масштабируемостью и связанной с ней гибкостью. MongoDB написана на C++, распространяется и постоянно развивается под лицензией Server Side Public License как система управления базами данных с открытым исходным кодом и дополнительными проприетарными версиями.
Redis: быстрое решение NoSQL
Несмотря на все различия в сравнении MongoDB и Redis, эти два решения имеют один и тот же год выпуска: Redis также был выпущен в 2009 году. База данных в памяти, название которой происходит от REmote DIctionary Server, была запрограммирована на языке ANSI C Сальваторе Санфилиппо. Он также имеет открытый исходный код (под лицензией BSD из трех пунктов) и не работает реляционно, поэтому (в значительной степени) избегает классических табличных шаблонов. Система устроена очень просто и особенно впечатляет своим высоким уровнем удобства и скорости. Сама система очень тонкая, но ее можно расширить разными способами. По этой причине Redis считается одним из наиболее часто используемых хранилищ ключей-значений в мире.
Цели
Прежде всего, MongoDB — абсолютный эксперт в области больших данных. Если вам необходимо управлять большими объемами данных и различными типами данных, решение NoSQL предлагает подходящие требования. Система также разработана с учетом растущих требований и растет вместе с вами. MongoDB особенно зарекомендовала себя для управления контентом, для решений и приложений электронной коммерции, которые должны оставаться свободно настраиваемыми и требовать постоянного анализа в режиме реального времени.
Для сравнения, Redis полагается в первую очередь на фактор скорости. Он также хранит данные в парах ключ-значение и поддерживает множество типов данных. Особенностью является обычное время ответа менее одной миллисекунды, что позволяет обрабатывать бесчисленное количество одновременных запросов в режиме реального времени. Это делает Redis оптимальным выбором для кэширования или хранения сеансов, где часто используемые данные разных типов должны быть доступны как можно быстрее. Другие области, в которых в основном используется Redis, включают мессенджеры и чаты, (онлайн) игры, анализ в реальном времени, потоковую передачу, финансовые услуги и Интернет вещей. Redis можно масштабировать как по горизонтали, так и по вертикали.
Функциональность
Сравнение MongoDB и Redis показывает, что подход и функциональность отличаются друг от друга. Хотя обе системы выбирают нереляционный подход, они интерпретируют его по-разному: MongoDB хранит данные в виде документов в формате BSON и объединяет эти документы в коллекции. Эти данные могут быть структурированными, полуструктурированными или неструктурированными. Документы состоят из пар ключ-значение, где ключ всегда представляет собой строку, а значение может состоять, среди прочего, из других документов, массивов, логических значений или файлов других типов. Чтобы обеспечить высокую доступность, MongoDB использует так называемое сегментирование, при котором данные распределяются по нескольким узлам. Запросы выполняются с использованием языка запросов MongoDB.
Redis достигает чрезвычайно высоких скоростей, поскольку все данные хранятся непосредственно в оперативной памяти и поэтому могут быть немедленно доступны. Таким образом, задержка очень низкая по сравнению с большинством других решений (однако в то же время пространство для хранения ограничено). Как и его оппонент в сравнении MongoDB и Redis, Redis также полагается на пары ключ-значение. База данных в памяти поддерживает различные значения и структуры данных, такие как хеши, списки, наборы, потоки и строки. Соответствующие ключи хранятся в словаре, а для обработки нескольких значений используется синтаксический анализатор. Имеются модули для дополнительных функций запроса.
Производительность
MongoDB — это очень быстрая база данных, обеспечивающая высокоскоростные запросы на чтение и запись. Бессхемная структура решения NoSQL означает отсутствие задержек даже при больших объемах данных. Такая скорость также достигается за счет сочетания различных воспоминаний. Однако при сравнении MongoDB и Redis база данных в памяти обычно работает значительно быстрее. Сохраняя их непосредственно в памяти, данные становятся доступными немедленно, поэтому Redis является оптимальным решением, если доступ к контенту необходимо получить как можно быстрее. Однако это также требует затрат оперативной памяти: при 4 ГБ на 100 000 ресурсов потребление примерно в четыре раза выше, чем при использовании MongoDB.
Масштабируемость
Совершенно другая картина вырисовывается при сравнении вариантов масштабирования MongoDB и Redis. Хотя обе системы в целом предлагают хорошие возможности, MongoDB особенно может проявить себя в этой области. База данных спроектирована таким образом, что ее можно без ограничений расширять по горизонтали, управляя при этом самыми разными типами данных. Шардинг распределяет данные таким образом, что они доступны, с одной стороны, и могут быть обработаны особенно эффективно, с другой. Хотя Redis предлагает горизонтальное и вертикальное масштабирование, по умолчанию он использует только один сегмент. Возможен только хешированный шардинг, и управление должно осуществляться вручную.
Доступность
Шардинг также положительно влияет на доступность данных в базе данных MongoDB. Система использует наборы реплик и позволяет пользователям создавать до 50 реплик файла. Затем их можно сохранить на разных узлах. Функции автоматического переключения при сбое не только определяют основную точку, но и автоматически заменяют ее немедленно в случае сбоя.
Redis также обычно обеспечивает высокую доступность и при желании использует разные узлы. Однако автоматическое переключение при сбое невозможно, если оно не настроено администратором вручную. Если это не так, аварийное переключение также должно быть инициировано независимо.
Совместимость
Если вы сравните MongoDB и Redis, самое большое сходство можно найти в отличной совместимости с операционными системами и языками программирования. Оба конкурента являются кроссплатформенными системами и работают под Linux, macOS и Windows. MongoDB также предлагает Solaris, а Redis включает в свою программу BSD. Выбор возможных языков программирования также огромен в обоих случаях.
| programming language | Powered by Mongo DB | Powered by Redis |
|---|---|---|
| Action script | ✓ | ✗ |
| C | ✓ | ✓ |
| C# | ✓ | ✓ |
| C++ | ✓ | ✓ |
| Clojure | ✓ | ✓ |
| ColdFusion | ✓ | ✗ |
| Crystal | ✗ | ✓ |
| D | ✓ | ✓ |
| darts | ✓ | ✓ |
| Delphi | ✓ | ✗ |
| Elixir | ✗ | ✓ |
| Erlangen | ✓ | ✓ |
| fancy | ✗ | ✓ |
| Go | ✓ | ✓ |
| Groovy | ✓ | ✗ |
| Haskell | ✓ | ✓ |
| knuckle | ✗ | ✓ |
| Java | ✓ | ✓ |
| JavaScript | ✓ | ✓ |
| Kotlin | ✓ | ✗ |
| Lisp | ✓ | ✓ |
| Lua | ✓ | ✓ |
| MatLab | ✓ | ✓ |
| Objective C | ✗ | ✓ |
| OCaml | ✗ | ✓ |
| Pascal | ✗ | ✓ |
| Pearl | ✓ | ✓ |
| PHP | ✓ | ✓ |
| PowerShell | ✓ | ✗ |
| prolog | ✓ | ✓ |
| Pure data | ✗ | ✓ |
| python | ✓ | ✓ |
| R | ✓ | ✓ |
| Rebol | ✗ | ✓ |
| Ruby | ✓ | ✓ |
| Rust | ✗ | ✓ |
| Scala | ✓ | ✓ |
| Scheme | ✗ | ✓ |
| Small talk | ✓ | ✓ |
| Swift | ✓ | ✓ |
| Tcl | ✗ | ✓ |
| Visual Basic | ✗ | ✓ |
Язык запросов
Запросы к MongoDB и Redis выполняются по-разному. MongoDB опирается на собственный язык запросов MongoDB (MQL), который поддерживает синтаксис, подобный JSON. Возможен даже анализ данных и запросы по нескольким областям и ключам. Redis, с другой стороны, не имеет собственного языка запросов и вместо этого использует простые команды, призванные упростить и ускорить поиск данных. По умолчанию возможны только запросы «ключ-значение». Для получения дополнительных опций необходимо интегрировать дополнительные модули.
Две базы данных с открытым исходным кодом
Еще одно сходство между MongoDB и Redis — это подход с открытым исходным кодом, используемый обеими системами. Оба опираются на открытые стандарты, каждый из которых используется и развивается заинтересованным сообществом. MongoDB также предоставляет коммерческие версии, такие как Enterprise или Atlas (для использования в облаке). Они предлагают дополнительные функции безопасности и получают профессиональную поддержку.
MongoDB против Redis: какие компании полагаются на эти решения?
Существует множество крупных компаний, которые полагаются на одного из двух кандидатов в сравнении MongoDB и Redis. Среди наиболее известных пользователей MongoDB можно назвать следующих:
- Adobe
- Amadeus
- AppScale
- Craftbase
- Disney
- Etsy
- Foursquare
- Lyft
- MTV
- The New York Times
- Via Varejo
Redis используется, в частности, этими компаниями и платформами:
- Airbnb
- Craigslist
- GitHub
- HelloFresh
- InstaCart
- Slack
- Snapchat
- Stack Overflow
- Trello
- Above
- X (formerly Twitter)
Заключение
Так кто же сможет победить в сравнении MongoDB и Redis? Ответ на этот вопрос во многом зависит от ваших требований. Если вам нужна база данных, характеризующаяся высокой скоростью и мгновенной доступностью данных, Redis — оптимальный выбор. Если вы в первую очередь сосредоточены на больших данных и максимально возможной гибкости, MongoDB вряд ли можно обойти. Если вы сомневаетесь, вам не обязательно принимать решение: MongoDB и Redis также прекрасно работают вместе и могут объединить свои сильные стороны. Это означает, что вы получаете выгоду от скорости, которую предлагает Redis, сохраняя при этом все возможности масштабирования MongoDB.








