Предисловие
NoSQL относится к нереляционным базам данных. С непрерывным развитием Интернета традиционная реляционная база данных не смогла справиться с новой интернет-моделью веб-сайтов, особенно сверхбольших и очень параллельных чистых динамических веб-сайтов типа SNS, что создает множество проблем, которые трудно преодолеть, в то время как нереляционная база данных развивалась очень быстро из-за ее собственных характеристик. База данных NoSQL создана для решения проблем, связанных с несколькими типами данных при крупномасштабной агрегации данных, особенно с проблемой применения больших объемов данных. Сегодня мы в основном говорим о трех NoSQL: Memcached, Redis и MongoDB.
Memcached
Преимущество 1. Memcached может использовать преимущества многоядерности и обладает очень высокой пропускной способностью для одного экземпляра, которая может достигать сотен тысяч QPS (в зависимости от размера ключа и значения в байтах и производительности серверного оборудования пик QPS в повседневной среде составляет около 4-6 Вт). Подходит для максимальной грузоподъемности.
2. Поддержка прямой настройки дескриптора сеанса.
недостаток 1. Поддерживает только простые структуры данных ключ/значение, в отличие от Redis, которая поддерживает расширенные типы данных.
2. Не может быть сохранено, данные не могут быть скопированы, могут использоваться только для кэширования и перезапуска всех потерянных данных.
3. Синхронизация данных невозможна, и данные в MC не могут быть перенесены в другие экземпляры MC.
4. Распределение памяти Memcached использует механизм распределения блоков для управления памятью. Большие различия в распределении значений по размеру приведут к снижению использования памяти и проблемам с выбросом при низкой загрузке. Пользователям необходимо обратить внимание на дизайн ценности.
Редис
Преимущество 1. Поддержка различных структур данных, таких как строка (string), список (двунаправленный связанный список), Dict (хэш-таблица), набор (set), Zset (сортированный набор), гиперлог (кардинальная оценка).
2. Поддерживая постоянную работу, данные AOF и RDB могут сохраняться на диске, таким образом, операции резервного копирования или восстановления данных являются лучшим средством предотвращения потери данных.
3. Поддержка репликации данных посредством репликации, синхронной репликации данных в реальном времени с помощью механизма master-slave, поддержка многоуровневой репликации и инкрементной репликации, механизм master-slave является важным средством для Redis для выполнения HA.
4. Однопоточные запросы, все команды выполняются последовательно, без учета согласованности данных в параллельных случаях.
5. Поддержка механизма подписки на pub/sub сообщения, который может использоваться для подписки на сообщения и уведомления.
6. Поддерживайте простые требования к транзакциям, но сценарии использования в отрасли немногочисленны и незрелы.
недостаток 1. Redis может использовать только один поток, производительность ограничена производительностью ЦП, поэтому ЦП одного экземпляра может достигать 5-6 Мбит/с в секунду (в зависимости от структуры данных, размера данных и производительности серверного оборудования пик QPS в повседневной среде составляет около 1-2 Вт).
2. Поддержка простых требований к транзакциям, но сценарии использования в отрасли немногочисленны и незрелы, как преимущества, так и недостатки.
3. Redis потребляет больше памяти строкового типа и может использовать Dict (хэш-таблицу) для сжатия хранилища, чтобы уменьшить потребление памяти.
MongoDB
Преимущество 1. При более высокой нагрузке на запись MongoDB имеет более высокую скорость вставки.
2. Обработка крупномасштабных отдельных таблиц, когда таблица данных слишком велика, легко разделить таблицы.
3. Высокая доступность, настройка M-S не только удобна, но и быстра. MongoDB также может быстро, безопасно и автоматически выполнять отказоустойчивость узла (центра обработки данных).
4. Быстрые запросы, MongoDB поддерживает двумерную пространственную индексацию, такую как конвейеры, чтобы данные можно было быстро и точно извлекать из указанных местоположений. MongoDB загружает данные из базы данных в память путем сопоставления файлов после запуска. Если ресурсов памяти достаточно, это значительно повысит скорость запросов к базе данных.
5. Взрывной рост неструктурированных данных в некоторых случаях может привести к блокировке всей базы данных или увеличению нагрузки, что приведет к снижению производительности. Из-за слабого режима структуры данных MongoDB добавление нового поля не окажет никакого влияния на старую таблицу, и весь процесс будет очень быстрым.
недостаток 1. Транзакции не поддерживаются.
2. MongoDB занимает слишком много места.
3. MongoDB не имеет зрелых инструментов обслуживания.
Различия между Memcached, Redis и MongoDB
1. Производительность Все три имеют высокую производительность. Вообще говоря, Memcached похож на Redis и выше, чем MongoDB.
2. Удобство Memcached имеет единую структуру данных.
Redis богаче, работа с данными лучше, а время ввода-вывода в сети меньше.
MongoDB поддерживает расширенное представление данных, индексирование, наиболее похожее на реляционные базы данных, и поддерживает расширенные языки запросов.
3. Место для хранения Memcached может изменять максимально доступную память, используя алгоритм LRU.
Red добавляет свои собственные функции виртуальной машины после версии 2.0, преодолевая ограничения физической памяти; он может устанавливать время истечения срока действия для значения ключа (аналогично memcached ).
MongoDB подходит для хранения большого объема данных. Он полагается на виртуальную машину операционной системы для управления памятью. Это съедает больше памяти. Услуга не должна быть связана с другими услугами.
4. Доступность Сам по себе Memcached не имеет механизма избыточности данных и в этом нет необходимости; для предотвращения сбоев он полагается на зрелый алгоритм хэширования или кольца для решения проблемы дрожания, вызванной одноточечной ошибкой.
Redis полагается на клиента для обеспечения распределенного чтения и записи; при репликации ведущий-ведомый каждый раз, когда ведомый узел повторно подключается к главному узлу, он полагается на весь моментальный снимок без инкрементной репликации. Из-за проблем с производительностью и эффективностью проблема с одной точкой является более сложной; она не поддерживает автоматическое сегментирование и должна полагаться на программу для настройки согласованного механизма хэширования. Одной из альтернатив является замена собственного механизма репликации redis активной репликацией (множественное хранилище) или инкрементной репликацией (самореализация), проблемы согласованности и компромиссы в производительности.
MongoDB поддерживает master-slave, набор реплик (внутренний алгоритм выбора Paxos, автоматическое восстановление после сбоев), механизм автоматического совместного использования, который защищает клиента от отказа и механизм сегментации.
5. Надежность Memcached не поддерживается и обычно используется для кэширования для повышения производительности.
Поддержка Redis (моментальные снимки, ОФ): В зависимости от сохраняемости моментальных снимков, ОФ повышает надежность, одновременно влияя на производительность.
MongoDB использует binlog для поддержки надежности сохранения с версии 1.8.
6. Согласованность Memcached гарантирует согласованность с ЦС в параллельных сценариях.
Поддержка транзакций Redis слаба и может гарантировать только непрерывное выполнение каждой операции в транзакции.
MongoDB не поддерживает транзакции. 7. Анализ данных
MongoDB имеет встроенные возможности анализа данных (mapreduce), которые не поддерживаются двумя другими.
8. Сценарии приложений Memcached: Используется для снижения нагрузки на базу данных и повышения производительности в динамических системах; Кэшируется для повышения производительности (подходит для большего чтения и меньшей записи, для больших объемов данных может использоваться сегментирование).
Redis: Высокопроизводительные операции и операции с небольшими объемами данных.
MongoDB: Это в основном решает проблему эффективности доступа к массивным данным.
Резюме и анализ
1. Было бы лучше использовать Memcached для простого доступа к данным типа ключ-значение (в основном для чтения). Если вы хотите поддерживать сохраняемость данных, объем невелик, операции выполняются очень часто, много типов данных (таких как сбор, хэш и т.д.), Использование типа списка в качестве очереди и других расширенных приложений, вы используете Redis, но если объем данных большой, вы используете MongoDB.
2. Многие клиенты Memcached более зрелые и стабильные, а протокол Redis более сложный, чем Memcached. Может ли Redis не быть быстрее, чем Memcached? Но результаты теста в основном красные, доминируют.
3. Данные в экземпляре Memcached версии облачной базы данных хранятся в памяти. При возникновении несчастных случаев, таких как простои, отключение питания в компьютерном зале или при обычном обновлении и обслуживании экземпляра версии облачной базы данных Memcached, данные в памяти будут потеряны. Таким образом, Memcached-версия облачной базы данных не может использоваться в качестве службы постоянного хранения данных. Данные Redis хранятся в памяти. Если нет конфигурации для сохранения, все данные будут потеряны после перезапуска Redis. Поэтому необходимо включить функцию сохранения Redis и сохранить данные на диске. При перезапуске Redis данные могут быть восстановлены с диска для обеспечения сохраняемости.
4. Для Redis и MongoDB они обычно называются кэш Redis и база данных MongoDB. Redis в основном хранит данные в памяти, и его свойство “кэш” намного больше, чем свойство “хранилище данных”, в котором добавление, удаление и изменение данных так же просто, как операция с переменными; MongoDB-это система “хранения данных”, добавление, удаление и изменение могут добавлять множество условий, таких же гибких, как база данных SQL.
5. И MongoDB, и Redis являются NoSQL, использующими структурированное хранилище данных. Существуют некоторые различия между ними в сценариях использования, что в основном связано с их различными методами обработки отображения памяти и сохраняемости. MongoDB рекомендует развертывание кластера, которое в большей степени учитывает схему кластера. Redis больше ориентирован на последовательную запись процессов, хотя он поддерживает кластер, он также ограничен режимом “ведущий-ведомый”.
Соответствующая информация
Краткое введение в Nosql Различия Redis, Memcache, MongoDB