sql >> Database >  >> NoSQL >> Redis

Hoe efficiënt miljarden gegevens in Redis invoegen?

Een paar punten met betrekking tot de vraag en voorbeeldcode.

  1. Pipelining is geen wondermiddel - u moet begrijpen wat het doet voordat u het gebruikt. Wat pipelining doet, is een batch van verschillende bewerkingen die als bulk worden verzonden, evenals hun reactie van de server. Wat u wint, is dat de retourtijd van het netwerk voor elke bewerking wordt vervangen door die van de batch. Maar batches van oneindige grootte zijn een echte aanslag op de middelen - u moet hun grootte klein genoeg houden om effectief te zijn. Als vuistregel probeer ik meestal te streven naar 60 KB per pijplijn en aangezien elke data anders is, geldt dat ook voor het aantal daadwerkelijke bewerkingen in een pijplijn. Ervan uitgaande dat uw sleutel en zijn waarde ~1KB zijn, moet u pipeline.execute() aanroepen elke 60 handelingen of zo.

  2. Tenzij ik het schromelijk verkeerd begrijp, zou deze code niet moeten worden uitgevoerd. Je gebruikt HMSET alsof het SET . is , dus je mist eigenlijk de field->value mapping van hashes. Hashs (HMSET ) en Strings (SET ) zijn verschillende gegevenstypen en moeten daarom dienovereenkomstig worden gebruikt.

  3. Het lijkt alsof deze ene kleine lus verantwoordelijk is voor de hele "miljard gegevens" - als dat het geval is, zou niet alleen uw server waarop de code wordt uitgevoerd als een gek wisselen, tenzij hij veel RAM heeft om het woordenboek vast te houden, het zou ook erg ineffectief zijn (ongeacht de snelheid van Python). U moet de gegevensinvoeging parallel uitvoeren door meerdere instanties van dit proces uit te voeren.

  4. Maakt u op afstand verbinding met Redis? Als dit het geval is, kan het netwerk uw prestaties beperken.

  5. Overweeg de instellingen van uw Redis - misschien kunnen deze worden aangepast/afgesteld voor betere prestaties voor deze taak, ervan uitgaande dat het inderdaad een knelpunt is.



  1. Node mangoest zoekquery in lus werkt niet

  2. Basisoverwegingen voor het nemen van een MongoDB-back-up

  3. Voeg tekenreekswaarden samen in een array in een enkel veld in MongoDB

  4. MongoServer.State-equivalent in de 2.0-driver