sql >> Databasteknik >  >> NoSQL >> Redis

Hur infogar man miljarder data till Redis effektivt?

Några punkter angående frågan och exempelkoden.

  1. Pipelining är inte en silverkula - du måste förstå vad den gör innan du använder den. Vad pipelining gör är att batcha flera operationer som skickas som bulk, liksom deras svar från servern. Det du vinner är att nätverkets tur och returtid för varje operation ersätts med batchens. Men partier i oändlig storlek är ett rejält tapp på resurser - du måste hålla storleken tillräckligt liten för att vara effektiv. Som en tumregel brukar jag försöka sikta på 60KB per pipeline och eftersom alla data är olika så gör det också antalet faktiska operationer i en pipeline. Förutsatt att din nyckel och dess värde är ~1KB, måste du anropa pipeline.execute() var 60:e operation eller så.

  2. Om jag inte missförstår grovt, bör den här koden inte köras. Du använder HMSET som om det är SET , så du saknar i princip field->value mappningen av hashes. Hashs (HMSET ) och Strings (SET ) är olika datatyper och bör därför användas därefter.

  3. Det verkar som om den här lilla slingan är ansvarig för hela "Billion of data" - om så är fallet, inte bara skulle din server som kör koden byta som en galning om den inte har mycket RAM för att hålla ordboken, det skulle också vara väldigt ineffektivt (oavsett Pythons hastighet). Du måste parallellisera datainfogningen genom att köra flera instanser av denna process.

  4. Ansluter du till Redis på distans? Om så är fallet kan nätverket begränsa din prestanda.

  5. Tänk på dina Redis inställningar - kanske kan dessa justeras för bättre prestanda för den här uppgiften, förutsatt att det verkligen är en flaskhals.



  1. I Flask konvertera form POST-objekt till en representation lämplig för mongodb

  2. Den snabbare metoden att flytta redis-data till MySQL

  3. Selleri/Redis samma uppgift utförs flera gånger parallellt

  4. varför går det så långsamt med 100 000 poster när man använder pipeline i redis?