sql >> Database >  >> NoSQL >> Redis

Honderden tellers tegelijk verhogen, redis of mongodb?

Afhankelijk van hoe je sleutelstructuur is ingedeeld, raad ik aan om de zinr-commando's te pipelinen. Je hebt een gemakkelijke "commit" -trigger - het verzoek. Als je je parameters zou herhalen en elke sleutel zou zinkreren, dan zal aan het einde van het verzoek het execute-commando zeer snel zijn. Ik heb een systeem geïmplementeerd zoals je beschrijft als zowel een cgi- als een Django-app. Ik heb een sleutelstructuur opgezet in de trant van:

JJJJ-MM-DD:UU:MM -> gesorteerde set

En was in staat om zoiets als 150000-200000 stappen per seconde aan de redis-kant te verwerken met een enkel proces dat voldoende zou moeten zijn voor uw beschreven scenario. Met deze sleutelstructuur kan ik gegevens verzamelen op basis van tijdvensters. Ik heb ook een vervaldatum aan de sleutels toegevoegd om te voorkomen dat er een db-opruimingsproces wordt geschreven. Ik had toen een cronjob die set-operaties zou doen om statistieken op te rollen naar elk uur, dagelijks en wekelijks met behulp van varianten van het bovengenoemde sleutelpatroon. Ik breng deze ideeën naar voren omdat het manieren zijn waarop u kunt profiteren van de ingebouwde mogelijkheden van Redis om de rapportagekant eenvoudiger te maken. Er zijn andere manieren om het te doen, maar dit patroon lijkt goed te werken.

Zoals opgemerkt door eyossi kan de globale vergrendeling een echt probleem zijn bij systemen die gelijktijdig schrijven en lezen. Als u dit als een realtime systeem schrijft, kan de gelijktijdigheid een probleem zijn. Als het een "end if day"-log-parseersysteem is, zou het de strijd waarschijnlijk niet activeren, tenzij u meerdere exemplaren van de parser of rapporten uitvoert op het moment van invoer. Met betrekking tot het snel lezen in Redis, zou ik overwegen een alleen-lezen redis-instantie op te zetten die losgekoppeld is van de hoofdversie. Als u het op de server plaatst waarop het rapport wordt uitgevoerd en het rapportageproces erop richt, zou het zeer snel moeten zijn om de rapporten te genereren.

Afhankelijk van uw beschikbare geheugen, de grootte van de gegevensset en of u een ander type gegevens opslaat in de redis-instantie, kunt u overwegen een 32-bits redis-server te gebruiken om het geheugengebruik laag te houden. Een 32b-instantie zou veel van dit soort gegevens in een klein deel van het geheugen moeten kunnen bewaren, maar als het gebruik van de normale 64-bits Redis niet te veel geheugen in beslag neemt, kunt u het gerust gebruiken. Test zoals altijd uw eigen gebruikspatronen om te valideren



  1. Efficiënt pagineren in MongoDB met mgo

  2. Redis-client

  3. Hoe Spring te gebruiken om verbinding te maken met MongoDB waarvoor authenticatie vereist is?

  4. Redis zoekt naar env redis url-variabele weet niet waar env-variabele slechte URI (is geen URI?):(URI::InvalidURIError)