1. Общ преглед
Често намираме за предизвикателство да вземем решение за нерелационна база данни като основно хранилище на данни за нашите приложения.
В тази статия ще разгледаме две популярни нерелационни бази данни, Redis и MongoDB.
Първо, ще разгледаме набързо функциите, предлагани от Redis и MongoDB. След това ще обсъдим кога да използваме Redis или MongoDB, като ги сравним един с друг.
2. Редис
Redis е хранилище за структура на данни в паметта, което предлага богат набор от функции. Той е полезен като кеш, посредник на съобщения и опашка .
2.1. Характеристики
- Специален интерфейс на командния ред – redis-cli
- Съхранява двойки ключ-стойност и поддържа структури от данни като списък, набор и хеш
- Може да съхранява стойности с размер до 512 MB
- Позволява публикуване и абониране на съобщения с помощта на опашки за съобщения в pub/sub
- Геопространствена поддръжка чрез предоставяне на специални команди за управление на геопространствени данни в реално време
- Позволява изпълнение на LUA скриптове
- Предлага различни клиенти за популярни технологии
- Поддържа IoT и вградени устройства
- Поддръжка на Spring Data
- Поддръжка на 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
MongoDB е NoSQL документна база данни, която съхранява информация в структура на документ, подобна на JSON. Полезен е като безсхемно хранилище на данни за бързо променящи се приложения, създаване на прототипи и стартиране във фаза на проектиране и внедряване .
3.1. Характеристики
- Предлага интерактивен интерфейс на командния ред MongoDB Shell (mongosh ) за извършване на административни операции и заявка/актуализация на данни
- Структура на заявка, базирана на JSON, с поддръжка на присъединявания
- Поддържа различни типове търсения като географско търсене, търсене в графики и текстово търсене
- Поддържа многодокументни ACID транзакции
- Поддръжка на Spring Data
- Предлага се в издания за общност, предприятия и облак (MongoDB Atlas)
- Различни драйвери за основни технологии като C++, Java, Go, Python, Rust и Scala
- Предоставя GUI за изследване и манипулиране на данни чрез MongoDB Compass
- Предлага визуално представяне на данни с помощта на MongoDB Charts
- MongoDB BI Connector осигурява връзки към BI и платформи за анализ
3.2. Инсталация
Можем да изтеглим най-новия сървър MongoDB или, ако използваме macOS, можем да инсталираме изданието на общността директно с помощта на Homebrew:
brew tap mongodb/brew
brew install [email protected]
4. Кога да използваме Redis?
4.1. Кеширане
Redis осигурява най-добрата производителност на кеширане в класа, като предоставя време за реакция под милисекунда за често търсени елементи .
Освен това позволява задаване на време на изтичане на ключове с помощта на команди като EXPIRE , ИЗТИЧАНЕ и PEXPIRE .
В същото време можем да използваме PERSIST команда за премахване на изчакването и запазване на двойката ключ-стойност, което я прави идеална за кеширане.
4.2. Гъвкаво съхранение на данни
Redis предоставя различни структури от данни като низ, списък, набор и хеш, за да реши как да съхраняваме и организираме нашите данни. Следователно Redis ни дава пълна свобода при внедряването на структурите на базата данни.
Въпреки това, може да е необходимо и дълго време за обмисляне на дизайна на DB. По същия начин може да бъде предизвикателство да се изгради и поддържа вътрешната структура на схемата с помощта на Redis.
4.3. Комплексно съхранение на данни
По същия начин, с комбинацията от списък, набор и хеш, можем да внедрим сложни структури от данни като опашки, масиви, сортирани набори и графики за нашето съхранение.
4.4. Чат, опашка и брокер за съобщения
Redis може да публикува и да се абонира за съобщения, използвайки опашки за съобщения в pub/sub с съвпадение на шаблон . По този начин Redis може да поддържа приложения за чат в реално време и социални медии.
По подобен начин можем да внедрим лека опашка, използвайки структурата на списъчните данни . Освен това списъкът на Redis поддържа атомни операции и предлага възможности за блокиране, което го прави подходящ за внедряване на посредник на съобщения.
4.5. Магазин за сесии
Redis предоставя съхранение на данни в паметта с възможности за постоянство, което го прави добър кандидат за съхраняване и управление на сесии за уеб/мобилни приложения.
4.6. Интернет на нещата и вградени системи
Според официалната документация на Redis, по-новите версии, започващи от 4 и 5 поддържат ARM процесора и Raspberry Pi .
Освен това работи на Andriod и се полагат усилия за включване на 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 позволява бързо създаване на прототипи, бързи интеграции с предни канали и хакатони .
В същото време може да бъде полезно за младши отбори, които не искат да се справят със сложността на RDBMS.
5.4. Каталози
Като предоставядинамична схема, която се описва самостоятелно, MongoDB улеснява добавянето на продукти, функции и препоръки за каталози като електронна търговия, управление на активи и инвентар.
Можем също да използваме изразителни заявки в MongoDB за функции като разширено търсене и анализ, като индексираме поле или набор от полета на JSON-структурирания документ.
5.5. Мобилни приложения
JSON структурата на документа на MongoDB позволява съхраняване на различни типове данни от различни устройства заедно с геопространствени индекси.
Освен това хоризонталната мащабируемост с естествено разделяне позволява лесно мащабиране на мобилно приложение. Следователно MongoDB може да обслужва тонове потребители, да обработва петабайтове данни и да поддържа стотици хиляди операции в секунда, което го прави достоен избор за поддържане на мобилни приложения.
5.6. Приложения с богато съдържание
Не е лесно да се включи различно съдържание в RDBMS за модерни богати на съдържание приложения. От друга страна, MongoDB позволява съхраняване и обслужване на богато съдържание като текст, аудио и видео .
Също така, можем лесно да съхраняваме файлове по-големи от 16MB ефективно с помощта на MongoDB GridFS . Позволява достъп до част от големи файлове, без да се зарежда целият файл в паметта.
Освен това той автоматично синхронизира нашите файлове и метаданни на всички сървъри. В резултат на това MongoDB изглежда по-подходящ избор за поддръжка на богати на съдържание приложения.
5.7. Приложения за игри
Подобно на мобилните приложения и приложенията с богато съдържание, игрите също изискват масивно мащабиране и динамични структури от данни. По този начин MongoDB може да бъде обещаващ избор за приложения за игри.
5.8. Глобална услуга за облачна база данни
MongoDB Atlas се предлага в множество облачни услуги като AWS, Google Cloud и Azure . В допълнение, с вграден механизъм за репликация и отказ, той предлага високодостъпна разпределена система. Поради това можем бързо да внедрим и управляваме базата данни и да я използваме като глобална услуга за облачна база данни.