1. Oversigt
Ofte finder vi det udfordrende at vælge en ikke-relationel database som primært datalager for vores applikationer.
I denne artikel vil vi udforske to populære ikke-relationelle databaser, Redis og MongoDB.
Først vil vi tage et hurtigt kig på funktionerne, der tilbydes af Redis og MongoDB. Derefter vil vi diskutere, hvornår vi skal bruge Redis eller MongoDB ved at sammenligne dem med hinanden.
2. Redis
Redis er et datastrukturlager i hukommelsen, der tilbyder et rigt sæt funktioner. Det er nyttigt som cache, meddelelsesmægler og kø .
2.1. Funktioner
- En dedikeret kommandolinjegrænseflade – redis-cli
- Gemmer nøgleværdi-par og understøtter datastrukturer som liste, sæt og hash
- Kan gemme værdier på op til 512 MB i størrelse
- Tillader at publicere og abonnere på beskeder ved hjælp af pub-/submeddelelseskøer
- Geospatial support ved at give specielle kommandoer til at administrere geospatiale data i realtid
- Tillader udførelse af LUA-scripts
- Tilbyder forskellige kunder til populære teknologier
- Understøtter IoT og indlejrede enheder
- Forårsdataunderstøttelse
- Forår Cache-understøttelse ved hjælp af Java-klienter som Redisson
2.2. Installation
Vi kan downloade den seneste Redis-server fra den officielle hjemmeside og installere den:
$ 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 er en NoSQL dokumentdatabase, der gemmer information i en JSON-lignende dokumentstruktur. Det er nyttigt som et skemaløst datalager til hurtigt skiftende applikationer, prototyper og startups i en design- og implementeringsfase .
3.1. Funktioner
- Tilbyder en interaktiv kommandolinjegrænseflade MongoDB Shell (mongosh ) for at udføre administrative handlinger og forespørge/opdatere data
- JSON-baseret forespørgselsstruktur med understøttelse af joinforbindelser
- Understøtter forskellige typer søgninger såsom geo-baseret søgning, grafsøgning og tekstsøgning
- Understøtter ACID-transaktioner med flere dokumenter
- Forårsdataunderstøttelse
- Tilgængelig i fællesskabs-, virksomheds- og cloud-udgaver (MongoDB Atlas)
- Forskellige drivere til større teknologier som C++, Java, Go, Python, Rust og Scala
- Tilbyder GUI til at udforske og manipulere data gennem MongoDB Compass
- Tilbyder en visuel repræsentation af data ved hjælp af MongoDB-diagrammer
- MongoDB BI Connector giver forbindelser til BI- og analyseplatforme
3.2. Installation
Vi kan downloade den seneste MongoDB-server, eller hvis vi bruger macOS, kan vi installere community-udgaven direkte ved hjælp af Homebrew:
brew tap mongodb/brew
brew install [email protected]
4. Hvornår skal Redis bruges?
4.1. Caching
Redis giver klassens bedste caching-ydeevne ved at give sub-millisekunder responstid på ofte anmodede elementer .
Desuden tillader den indstilling af udløbstid på taster ved hjælp af kommandoer som UDLØB , UDLØB , og PEXPIRE .
Samtidig kan vi bruge PERSIST kommando for at fjerne timeout og fortsætte nøgleværdi-parret, hvilket gør det ideelt til cachelagring.
4.2. Fleksibel datalagring
Redis leverer forskellige datastrukturer som streng, liste, sæt og hash til at beslutte, hvordan vi gemmer og organiserer vores data. Derfor giver Redis os fuld frihed over implementeringen af databasestrukturerne.
Det kan dog også kræve lang tid at gennemtænke DB-designet. På samme måde kan det være udfordrende at opbygge og vedligeholde skemaets indre struktur ved hjælp af Redis.
4.3. Kompleks datalagring
På samme måde kan vi med kombinationen af listen, sæt og hash implementere komplekse datastrukturer som køer, arrays, sorterede sæt og grafer til vores opbevaring.
4.4. Chat, kø og meddelelsesmægler
Redis kan udgive og abonnere på meddelelser ved hjælp af pub-/undermeddelelseskøer med mønstermatching . Således kan Redis understøtte chat- og sociale medier-feedapplikationer i realtid.
På samme måde kan vi implementere en letvægtskø ved hjælp af listedatastrukturen . Desuden understøtter Redis's liste atomoperationer og tilbyder blokeringsfunktioner, hvilket gør den velegnet til at implementere en meddelelsesmægler.
4.5. Session Store
Redis giver et datalager i hukommelsen med persistensfunktioner, hvilket gør det til en god kandidat til at gemme og administrere sessioner til web-/mobilapplikationer.
4.6. IoT og indlejrede systemer
I henhold til Redis' officielle dokumentation understøtter nyere versioner fra 4 og 5 ARM-processoren og Raspberry Pi .
Den kører også på Andriod, og der arbejdes på at inkludere Android som en officielt understøttet platform.
Så Redis ser ideel ud til IoT og indlejrede systemer, draget fordel af dets lille hukommelsesfodaftryk og lave CPU-krav.
4.7. Realtidsbehandling
Da vi er en lynhurtig datastruktur i hukommelsen, kan vi bruge den til realtidsbehandlingsapplikationer.
For eksempel kan Redis effektivt betjene applikationer, der tilbyder funktioner som aktiekursalarmer, ranglister og realtidsanalyser.
4.8. Geospatiale apps
Redis tilbyder en specialbygget in-memory datastruktur Geo Set – bygget på sorteret sæt – til styring af geospatiale indekser. Det giver også specifikke geo-kommandoer som GEOADD , GEOPOS og GEORADIUS at tilføje, læse og analysere geospatiale data.
Derfor kan vi bygge geospatiale applikationer i realtid med lokationsbaserede funktioner som køretid og køredistance ved hjælp af Redis .
5. Hvornår skal man bruge MongoDB?
5.1. Dynamiske forespørgsler
MongoDB tilbyder et kraftfuldt sæt forespørgselsværktøjer. Det giver også en bred vifte af fleksible forespørgselsskemaer som geo-baseret søgning, grafsøgning og tekstsøgning for effektiv datahentning.
Samtidig ser MongoDB ud til at være et bedre valg til scenarier, hvor datasøgning og analyse er daglige aktiviteter, med støtte fra JSON-strukturerede forespørgsler.
5.2. Hurtigt skiftende skema
MongoDB kan være behjælpelig i design- og tidlige implementeringsfaser, hvor vi kræver hurtige ændringer af vores skema. Samtidig gør den ikke antagelser om de underliggende data, og den optimerer sig selv uden behov for et skema.
5.3. Prototyping og Hackathons
Ved at følge den JSON-lignende dokumentstruktur giver MongoDB mulighed for hurtig prototyping, hurtige integrationer med front-end-kanaler og hackathons .
Samtidig kan det være nyttigt for juniorhold, der ikke ønsker at håndtere kompleksiteten af et RDBMS.
5.4. Kataloger
Ved at giveet dynamisk skema, der er selvbeskrivende, gør MongoDB det nemmere at tilføje produkter, funktioner og anbefalinger til kataloger som e-handel, asset management og lagerbeholdning.
Vi kan også bruge udtryksfulde forespørgsler i MongoDB til funktioner som avanceret søgning og analyse ved at indeksere et felt eller et sæt felter i det JSON-strukturerede dokument.
5.5. Mobilapps
MongoDBs JSON-dokumentstruktur tillader lagring af forskellige typer data fra forskellige enheder sammen med geospatiale indekser.
Desuden muliggør horisontal skalerbarhed med indbygget sharding nem skalering af en mobilapp. Derfor kan MongoDB betjene tonsvis af brugere, behandle petabytes af data og understøtte hundredtusindvis af operationer i sekundet, hvilket gør det til et værdigt valg til at understøtte mobilapps.
5.6. Indholdsrige apps
Det er ikke let at inkorporere forskelligt indhold i RDBMS til moderne indholdsrige apps. På den anden side tillader MongoDB lagring og visning af rigt indhold som tekst, lyd og video .
Desuden vi kan nemt gemme filer større end 16 MB effektivt ved hjælp af MongoDB GridFS . Det giver adgang til en del af store filer uden at indlæse hele filen i hukommelsen.
Derudover synkroniserer den automatisk vores filer og metadata på tværs af alle servere. Som et resultat ser MongoDB ud til at være et mere velegnet valg til at understøtte indholdsrige apps.
5.7. Gaming-apps
I lighed med mobil- og indholdsrige apps kræver spil også massiv skalering og dynamiske datastrukturer. Således kan MongoDB være et lovende valg til gaming-apps.
5.8. Global Cloud Database Service
MongoDB Atlas er tilgængelig på tværs af flere cloud-tjenester som AWS, Google Cloud og Azure . Derudover tilbyder den med indbygget replikering og failover-mekanisme et meget tilgængeligt distribueret system. Derfor kan vi hurtigt implementere og administrere databasen og bruge den som en global cloud-databasetjeneste.