Предисловие
NoSQL, как правило, относится к нереляционной базе данных. С непрерывным развитием Интернета традиционная реляционная база данных не смогла справиться с веб-сайтами новой модели Интернета, особенно с очень масштабными и высокопроизводительными динамическими веб-сайтами типа SNS с высокой параллельностью, что выявило множество проблем, которые трудно преодолеть, в то время как нереляционная база данных быстро развивалась из-за ее собственных характеристик. Создание базы данных NoSQL призвано решить проблемы, связанные с крупномасштабным сбором данных и множеством типов данных, особенно прикладные проблемы больших данных. Сегодня мы в основном говорим о трех nosql, которые используются чаще: memcached , redis и mongodb .
Memcached
Преимущество 1. Memcached может использовать преимущества многоядерности, а пропускная способность одного экземпляра очень высока, которая может достигать сотен тысяч QPS (в зависимости от размера ключа и значения в байтах и производительности серверного оборудования пик QPS в повседневной среде составляет около 4-6 Вт). Подходит для максимальной грузоподъемности.
2. Он поддерживает прямую настройку в качестве дескриптора сеанса.
недостаток 1. Поддерживается только простая структура данных ключ/значение, в отличие от redis, которая может поддерживать расширенные типы данных.
2. Он не может быть сохранен, данные не могут быть скопированы, могут использоваться только для кэширования, и все данные будут потеряны после перезапуска.
3. Синхронизация данных не может быть выполнена, и данные в MC не могут быть перенесены в другие экземпляры MC.
4. Для выделения памяти memcached для управления памятью используется механизм выделения блоков. Когда распределение значений по размеру сильно отличается, использование памяти будет уменьшено, и такие проблемы, как выбивание, будут по – прежнему возникать при низком использовании. Пользователям необходимо обратить внимание на дизайн ценности.
Редис
Преимущество 1. Поддержка различных структур данных, таких как строка, список, дикт, набор, Zset и гиперлог.
2. Он поддерживает постоянную работу. Он может сохранять данные AOF и RDB на диске для резервного копирования или восстановления данных. Это лучшее средство для предотвращения потери данных.
3. Он поддерживает репликацию данных посредством репликации, синхронную репликацию данных в реальном времени через главный ведомый механизм, многоуровневую репликацию и инкрементную репликацию. Главный ведомый механизм является важным средством для 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 не имеет механизма избыточности данных и в этом нет необходимости; для предотвращения сбоев для решения проблемы дрожания, вызванной одной точкой сбоя, используется алгоритм хэширования или кольца amature.
Redis полагается на клиента для реализации распределенного чтения-записи; когда ведущий-ведомый узел повторно подключает главный узел, это зависит от всего снимка, без инкрементной репликации. Из-за проблем с производительностью и эффективностью проблемы с одной точкой являются более сложными; автоматическое сегментирование не поддерживается, и программа должна установить согласованный механизм хэширования. Одной из альтернатив является использование активной репликации (множественное хранилище) или инкрементной репликации (самореализация) вместо собственного механизма репликации redis, чтобы сбалансировать согласованность и производительность.
Mongodb поддерживает главный подчиненный, реплику (алгоритм выбора Paxos используется внутри и используется автоматическое восстановление после сбоев) и механизм автоматического разделения, который защищает клиента от отказа и механизма сегментации.
5. надежность Memcached не поддерживается. Обычно он используется для кэширования для повышения производительности.
Поддержка Redis (snapshot, OF): она зависит от моментального снимка для сохранения. Повышает надежность и влияет на производительность.
Mongodb начал работать с версии 1.8, чтобы использовать режим binlog для поддержки надежности сохранения.
6. согласованность В параллельном сценарии memcached использует ЦС для обеспечения согласованности.
Поддержка транзакций Redis слаба, что может гарантировать только непрерывное выполнение каждой операции в транзакции.
Mongodb не поддерживает транзакции. 7. Анализ данных
Mongodb имеет встроенную функцию анализа данных (MapReduce), которая не поддерживается двумя другими.
8. Сценарии приложений Memcached: используется для снижения нагрузки на базу данных и повышения производительности в динамической системе; используется для кэширования и повышения производительности (подходит для большего чтения и меньшей записи, сегментирование может использоваться для большого объема данных).
Redis: высокопроизводительная работа и работа с небольшим объемом данных.
Mongodb: это в основном решает проблему эффективности доступа к массивным данным.
Резюме и анализ
1. Memcached лучше подходит для простого доступа к ключевым данным (в основном для чтения). Если вы хотите поддерживать сохраняемость данных, объем невелик, а операции выполняются очень часто. Для расширенных приложений, таких как очереди с несколькими типами данных (например, наборы и хэши), вы можете использовать redis, но mongodb, когда объем данных большой.
2. Многие клиенты memcached более зрелые и стабильные. Протокол Redis более сложен, чем memcached. Может ли redis быть быстрее, чем memcached? Но результат теста таков, что redis имеет абсолютное преимущество.
3. Данные в экземпляре apsaradb для memcached хранятся в памяти. В случае простоя, сбоя питания в компьютерном зале или обычного обновления и обслуживания apsaradb для экземпляра memcached данные в памяти будут потеряны. Поэтому apsaradb для memcached нельзя использовать в качестве службы постоянного хранения данных. Данные Redis хранятся в памяти. Если сохраняемость не настроена, все данные будут потеряны после перезапуска redis. Поэтому необходимо включить функцию сохранения redis и сохранить данные на диске. При перезапуске redis данные могут быть восстановлены с диска для обеспечения сохраняемости.
4. Для redis и mongodb они обычно называются кэшем redis и базой данных mongodb. Красный цвет в основном хранит данные в памяти. Природа его “кэша” намного больше, чем у его “хранилища данных”, в котором добавление, удаление, изменение и запрос данных так же просты, как операции с переменными; mongodb-это система “хранения данных”, которая может добавлять множество элементов, как база данных SQL.
5. Mongodb и redis являются NoSQL и используют структурное хранилище данных. Существует определенная разница между этими двумя сценариями использования, которая в основном обусловлена различными методами обработки этих двух в отображении памяти. Mongodb рекомендует развертывание кластера. Рассматривая схему кластера в большей степени, redis фокусируется на последовательной записи процессов. Хотя он поддерживает кластеры, он работает только в режиме “ведущий-ведомый”.
Сопутствующая информация
Краткое введение в различие NoSQL между redis, memcache и mongodb