sql >> Database >  >> NoSQL >> Redis

Welke NoSQL-database voor extreem grote hoeveelheden gegevens

Ik heb ervaring met Redis en MongoDB, maar zou het ook niet aanbevelen voor uw gebruik. Redis is in elk opzicht geweldig, maar omdat het alleen RAM is en geen clusteringfuncties heeft (maar ze zijn in ontwikkeling), schaalt het niet erg goed. MongoDB zou ik nooit meer gebruiken voor iets dat iets anders nodig heeft dan een kleine replicaset.

Kortom, MongoDB is onvolwassen en volledig ongeschikt voor elke vorm van hoge volumes en hoge prestatie-eisen. Het heeft een globale schrijfvergrendeling die wordt vastgehouden tijdens schijfspoelingen, wat betekent dat de prestaties enorm kunnen variëren, afhankelijk van wat je doet. In de praktijk maakt het updates die documenten laten groeien onmogelijk, en je moet ook heel voorzichtig zijn met verwijderingen. Over verwijderen gesproken, ze fragmenteren de database ernstig, dus als je veel verwijdert, zullen je prestaties eronder lijden.

Sharding in 1.8.0 tot en met 1.8.1 was een ramp. Er waren complete showstopper-bugs die nooit een stabiele release hadden mogen worden. De configuratie is niet goed doorgespoeld en het was heel eenvoudig om uw database in een slechte staat te krijgen, zodat er nooit chunks van de primaire shard zijn verwijderd. 1.8.2 lost de meeste van hen op en lijkt stabieler, maar ik vertrouw de sharding-implementatie geen beetje. Voeg hieraan toe dat sharden moeilijk is, zelfs als alles werkt, het niet altijd gemakkelijk is om een ​​natuurlijke shardsleutel te selecteren, en als je niet sharding zal je veel verdriet bezorgen.

MongoDB is heel gemakkelijk om mee te werken en de functieset is echt leuk. De documentatie, de stuurprogramma's en de community zijn allemaal geweldig. MongoDB werkt super als vervanging voor MySQL, maar gebruik het niet voor iets dat moet worden uitgebreid.

We overwegen momenteel om naar Cassandra te verhuizen. Ik vind het dynamomodel (bijv. geen hoofdknooppunten; overal schrijven en lezen; voeg eenvoudig knooppunten toe om het cluster te laten groeien) overtuigend en de functies zijn min of meer geschikt voor ons. Het datamodel is schema-minder, net als MongoDB, hoewel een beetje beperkter (je kunt in principe kiezen tussen een of twee niveau-hashes). Ik weet zeker dat de community goed is als je er eenmaal in bent, maar tot nu toe vind ik het moeilijk om goede informatie te vinden over het oplossen van veelvoorkomende problemen, en de documentatie ontbreekt. De meeste informatie die je op blogs vindt, is een jaar oud en sindsdien is er veel gebeurd (0,7 en 0,8 lijken beide echt belangrijke updates te zijn, maar de meeste dingen die je vindt zijn ongeveer 0,6). De stuurprogramma's zijn ook niet erg volwassen of goed gedocumenteerd, van wat ik tot nu toe heb gezien, en iedereen lijkt te kibbelen over de vraag of Thrift, Avro of CQL is wat moet worden gebruikt (en dat is veranderd van 0,6 naar 0,7 naar 0,8) .

Riak is interessant, om dezelfde redenen als Cassandra, maar voor ons is een pure key-value-store niet genoeg, we moeten kunnen updaten zonder eerst te lezen. Met Riak is dit niet mogelijk omdat de waarden slechts blobs zijn. Dit klinkt echter alsof het voor jou geen probleem zou zijn.

HBase is een andere kanshebber. Het lijkt lastig om op te zetten en uit te voeren vanwege de vele verschillende onderdelen, ZooKeeper, HDFS, enz. Maar het datamodel is vergelijkbaar met Cassandra (kolomvormig, d.w.z. hashes van één niveau), wat goed werkt voor ons, maar misschien niet zo is belangrijk voor u. Het lijkt beproefd en waar, maar net als bij MongoDB moet je oppassen voor sharding-problemen, je moet goed nadenken over je sleutels of je komt in de problemen.

Er is ook CouchDB, Project Voldemort en talloze andere mogelijke keuzes. Ik denk dat als je serieus bent over "extreem grote hoeveelheden gegevens", het tussen Cassandra, Riak en HBase is. Sla Riak over als pure sleutel-waarde-opslag niet genoeg is. Afhankelijk van wat je bedoelt met 'volledig consistente replicatie', vallen Cassandra en Riak uit, omdat er een mogelijkheid is (niet per se groot en instelbaar) om een ​​verouderde waarde te lezen.

Uiteindelijk moet je het natuurlijk uitproberen op jouw specifieke gebruiksgeval, dus alles wat je echt mee naar huis moet nemen van dit antwoord is:doe geen moeite met MongoDB.



  1. Rails hoe te zien of een sidekiq-werker klaar is met perform_async

  2. Java, MongoDB:hoe werk je elk object bij terwijl je een enorme verzameling itereert?

  3. StackExchange.Redis-client gebruiken met Redis-cluster

  4. Welke versie van MongoDB is geïnstalleerd op Ubuntu