sql >> Databasteknik >  >> NoSQL >> Redis

Öka hundratals räknare på en gång, redis eller mongodb?

Beroende på hur din nyckelstruktur är upplagd skulle jag rekommendera att pipelina zincr-kommandona. Du har en enkel "commit"-utlösare - begäran. Om du skulle iterera över dina parametrar och zincr varje tangent, så kommer det att gå väldigt snabbt i slutet av begäran och skicka exekveringskommandot. Jag har implementerat ett system som du beskriver som både en cgi- och en Django-app. Jag satte upp en nyckelstruktur i stil med detta:

ÅÅÅÅ-MM-DD:TT:MM -> sorterad uppsättning

Och kunde bearbeta något i stil med 150 000-200 000 steg per sekund på redis-sidan med en enda process som borde vara tillräckligt för ditt beskrivna scenario. Denna nyckelstruktur gör att jag kan ta data baserat på tidsfönster. Jag har också lagt till en expire till nycklarna för att undvika att skriva en db-rensningsprocess. Jag hade sedan ett cronjob som skulle ställa in operationer för att "rulla upp" statistik till tim, daglig och veckovis med varianter av det tidigare nämnda nyckelmönstret. Jag tar upp dessa idéer eftersom de är sätt du kan dra nytta av Redis inbyggda funktioner för att göra rapporteringssidan enklare. Det finns andra sätt att göra det på men det här mönstret verkar fungera bra.

Som noterat av eyossi kan det globala låset vara ett verkligt problem med system som skriver och läser samtidigt. Om du skriver det här som ett realtidssystem kan samtidigheten mycket väl vara ett problem. Om det är ett "slut om dagen"-loggtolkningssystem skulle det sannolikt inte utlösa konflikten om du inte kör flera instanser av tolken eller rapporterna vid tidpunkten för inmatningen. När det gäller att hålla läsningarna snabba i Redis, skulle jag överväga att ställa in en skrivskyddad redis-instans som är slavad från den huvudsakliga. Om du lägger den på servern som kör rapporten och riktar rapporteringsprocessen mot den bör det gå mycket snabbt att generera rapporterna.

Beroende på ditt tillgängliga minne, datamängdsstorlek och om du lagrar någon annan typ av data i redis-instansen kan du överväga att köra en 32-bitars redis-server för att hålla nere minnesanvändningen. En 32b-instans borde kunna hålla mycket av den här typen av data i en liten bit av minnet, men om det inte tar för mycket minne att köra den vanliga 64-bitars Redis, använd den gärna. Testa som alltid dina egna användningsmönster för att validera



  1. Meteor publicera/prenumerera strategier för unika samlingar på klientsidan

  2. Minneseffektivt sätt att lagra 32-bitars signerat heltal i Redis

  3. Exportera en mongoose-databasmodul

  4. MongoDB GridFs med C#, hur lagrar man filer som bilder?