Et par punkter vedrørende spørgsmålet og prøvekoden.
-
Pipelining er ikke en sølvkugle - du skal forstå, hvad den gør, før du bruger den. Hvad pipelining gør, er at batchere flere operationer, der sendes som bulk, ligesom deres svar fra serveren. Det, du vinder, er, at netværkets rundrejsetid for hver operation erstattes af batchens. Men batcher i uendelig størrelse er et reelt forbrug af ressourcer - du skal holde deres størrelse lille nok til at være effektiv. Som en tommelfingerregel forsøger jeg normalt at sigte mod 60KB pr. pipeline, og da alle data er forskellige, gør antallet af faktiske operationer i en pipeline det også. Forudsat at din nøgle og dens værdi er ~1KB, skal du kalde
pipeline.execute()
hver 60 operationer eller deromkring. -
Medmindre jeg groft misforstår, bør denne kode ikke køre. Du bruger
HMSET
som om det erSET
, så du mangler grundlæggende felt->værdikortlægningen af hashes. Hashs (HMSET
) og Strings (SET
) er forskellige datatyper og bør derfor bruges i overensstemmelse hermed. -
Det ser ud til, at denne ene lille løkke har ansvaret for hele "milliarden af data" - hvis det er tilfældet, ville din server, der kører koden, ikke kun bytte som en sindssyg, medmindre den har en masse RAM til at holde ordbogen, det ville også være meget ineffektivt (uanset Pythons hastighed). Du skal parallelisere dataindsættelsen ved at køre flere forekomster af denne proces.
-
Opretter du fjernforbindelse til Redis? Hvis det er tilfældet, kan netværket begrænse din ydeevne.
-
Overvej dine Redis' indstillinger - måske kan disse justeres/tunes for bedre ydeevne til denne opgave, forudsat at det faktisk er en flaskehals.