sql >> Database teknologi >  >> NoSQL >> Redis

Hvilken NoSQL-database til ekstremt store datamængder

Jeg har erfaring med Redis og MongoDB, men vil heller ikke anbefale det til din brug. Redis er fantastisk i enhver henseende, men da det kun er RAM og ingen klyngefunktioner (endnu er de under udvikling), skalerer det ikke særlig godt. MongoDB ville jeg aldrig bruge igen til noget, der kræver andet end et lille replikasæt.

Grundlæggende er MongoDB umoden og fuldstændig uegnet til enhver form for krav til høj volumen og høj ydeevne. Den har en global skrivelås som holdes under disk flushes, hvilket betyder at ydeevnen kan variere voldsomt alt efter hvad man laver. I praksis gør det opdateringer, der udvider dokumenter, umulige, og du skal også være meget forsigtig med sletninger. Når vi taler om sletninger, så fragmenterer de databasen alvorligt, så hvis du laver mange sletninger, vil din præstation lide.

Sharding i 1.8.0 til 1.8.1 var en katastrofe. Der var komplette show-stop-fejl, der aldrig burde have gjort det til en stabil udgivelse. Konfigurationen blev ikke skyllet ordentligt ud, og det var meget nemt at få din database i en dårlig tilstand, så bidder aldrig flyttede væk fra det primære skær. 1.8.2 løser de fleste af dem og virker mere stabile, men jeg stoler ikke en smule på sharding-implementeringen. Læg dertil, at sharding er svært, selv når alt fungerer, det er ikke altid let at vælge en naturlig shard-nøgle, og hvis du ikke gør det, vil det give dig meget sorg.

MongoDB er virkelig nem at arbejde med, og funktionssættet er rigtig fint. Dokumentationen, chaufførerne og fællesskabet er alle gode. MongoDB fungerer super som en erstatning for MySQL, men brug det ikke til noget, der skal skaleres ud.

Vi overvejer i øjeblikket at flytte til Cassandra. Jeg finder dynamo-modellen (f.eks. ingen masterknudepunkter; skriv og læs hvor som helst; tilføj blot noder for at udvide klyngen) overbevisende, og funktionerne er mere eller mindre rigtige for os. Datamodellen er skemamindre ligesom MongoDB, selvom den er lidt mere begrænset (du kan grundlæggende vælge mellem hashes på et eller to niveauer). Jeg er sikker på, at fællesskabet er godt, når man først kommer ind i det, men indtil videre har jeg svært ved at finde god information om, hvordan man løser almindelige problemer, og dokumentationen mangler. Det meste af informationen, du finder på blogs, er et år gammelt, og der er sket mange ting siden da (0,7 og 0,8 ser ud til at være rigtig vigtige opdateringer begge to, men de fleste ting, du finder, er omkring 0,6). Driverne er heller ikke særlig modne eller veldokumenterede, ud fra hvad jeg har set indtil videre, og alle lader til at skændes om, hvorvidt Thrift, Avro eller CQL er det, der skal bruges (og det har ændret sig fra 0,6 til 0,7 til 0,8) .

Riak er interessant, af samme grunde som Cassandra, men for os er en ren nøgleværdi-butik ikke nok, vi skal kunne opdatere uden først at læse. Med Riak er dette ikke muligt, da værdierne kun er klatter. Det lyder dog som om det ikke ville være et problem for dig.

HBase er en anden udfordrer. Det virker som en smerte at sætte op og køre på grund af de mange forskellige stykker, ZooKeeper, HDFS osv. Men datamodellen ligner Cassandra (søjle, dvs. et niveau hashes), som fungerer godt for os, men måske ikke er vigtigt for dig. Det virker afprøvet og sandt, men som med MongoDB skal du passe på problemer med sønderdeling, du skal tænke lidt over dine nøgler, ellers kommer du i problemer.

Der er også CouchDB, Project Voldemort og utallige andre mulige valg. Jeg tror, ​​at hvis du er seriøs omkring "ekstremt høje datamængder", så er det mellem Cassandra, Riak og HBase. Slå til Riak, hvis ren nøgleværdi-lagring ikke er nok. Afhængigt af hvad du mener med "fuldstændig konsistent replikering", så er Cassandra og Riak ude, fordi der er en mulighed (ikke nødvendigvis stor og kan justeres) for at læse en forældet værdi.

I sidste ende er du selvfølgelig nødt til at prøve det af på netop din use case, så alt hvad du egentlig bør tage med hjem fra dette svar er:lad være med MongoDB.



  1. Hvordan NoSQL-databaser udfører på aggregerede funktioner (AVG, SUM osv.)

  2. Sådan opretter du en Redis-forbindelse med Master og Slave

  3. mongoDB:Oprettelse af et objekt-id for hvert nyt barn, der føjes til array-feltet

  4. Sådan projiceres array-indeks efter afvikling af et array med MongoDB-aggregationsramme