Je nachdem, wie Ihre Schlüsselstruktur aufgebaut ist, würde ich empfehlen, die Zinkr-Befehle zu pipenen. Sie haben einen einfachen „Commit“-Trigger – die Anfrage. Wenn Sie über Ihre Parameter iterieren und jeden Schlüssel zinkren, wird am Ende der Anfrage der Ausführungsbefehl übergeben, was sehr schnell geht. Ich habe ein System implementiert, wie Sie es sowohl als CGI- als auch als Django-App beschreiben. Ich habe eine Schlüsselstruktur nach folgendem Muster eingerichtet:
JJJJ-MM-TT:HH:MM -> sortierter Satz
Und war in der Lage, auf der Redis-Seite mit einem einzigen Prozess etwa 150000-200000 Inkremente pro Sekunde zu verarbeiten, was für Ihr beschriebenes Szenario ausreichen sollte. Diese Schlüsselstruktur ermöglicht es mir, Daten basierend auf Zeitfenstern zu erfassen. Ich habe den Schlüsseln auch ein Ablaufdatum hinzugefügt, um das Schreiben eines DB-Bereinigungsprozesses zu vermeiden. Ich hatte dann einen Cronjob, der Operationen zum "Aufrollen" von Statistiken in stündlich, täglich und wöchentlich unter Verwendung von Varianten des oben genannten Schlüsselmusters durchführte. Ich spreche diese Ideen an, da Sie auf diese Weise die integrierten Funktionen von Redis nutzen können, um die Berichtsseite zu vereinfachen. Es gibt andere Möglichkeiten, dies zu tun, aber dieses Muster scheint gut zu funktionieren.
Wie von eyossi angemerkt, kann die globale Sperre ein echtes Problem bei Systemen sein, die gleichzeitig schreiben und lesen. Wenn Sie dies als Echtzeitsystem schreiben, kann die Parallelität durchaus ein Problem sein. Wenn es sich um ein "Ende-wenn-Tag"-Protokollparsingsystem handelt, würde es den Konflikt wahrscheinlich nicht auslösen, es sei denn, Sie führen zum Zeitpunkt der Eingabe mehrere Instanzen des Parsers oder der Berichte aus. In Bezug auf das schnelle Halten von Lesevorgängen in Redis würde ich in Betracht ziehen, eine schreibgeschützte Redis-Instanz einzurichten, die von der Hauptinstanz abgesklavt wird. Wenn Sie es auf dem Server platzieren, auf dem der Bericht ausgeführt wird, und den Berichtsprozess darauf richten, sollten die Berichte sehr schnell erstellt werden.
Abhängig von Ihrem verfügbaren Speicher, der Datensatzgröße und davon, ob Sie andere Datentypen in der Redis-Instanz speichern, sollten Sie einen 32-Bit-Redis-Server ausführen, um die Speichernutzung gering zu halten. Eine 32b-Instanz sollte in der Lage sein, eine Menge dieser Art von Daten in einem kleinen Teil des Speichers zu halten, aber wenn das Ausführen des normalen 64-Bit-Redis nicht zu viel Speicher beansprucht, können Sie es gerne verwenden. Testen Sie wie immer Ihre eigenen Nutzungsmuster, um
zu validieren