2011-01-11 7 views
3

Ich verwende Redis, um Datenprotokolle von vielen analogen Sensoren zu speichern. Mein Ziel ist es, die Daten nach einem Protokoll-Zeitstempel zu sortieren und die Daten aus einem bestimmten Datumsbereich zu extrahieren. Mein Ursprungsdatenmodell bestand darin, den Sensornamen als Schlüssel zu verwenden und einen Hash für jeden Zeitstempel und den Wert, der an den Hash-Schlüssel angehängt wurde, zu haben.Redis - Ich suche Datenmodellierungsvorschläge

So. Wenn ich SensorA, SensorB und SensorC habe, würde die Eingabe einer Taste * 1. SensorA, 2. SensorB und 3. SensorC zurückgeben. Doing hget SensorB 20110111172900 würde zurück, sagen wir 25.

Das Problem mit der aktuellen Modellierung ist, dass es nicht erlaubt, auf dem Zeitstempel zu sortieren, oder so denke ich, seit alles, was ich versucht habe, ist fehlgeschlagen.

Wäre jemand in der Lage, ein Datenmodell vorzuschlagen, das das Sortieren und Extrahieren von Datenbereichen ermöglicht, oder schlagen Sie die richtigen Sortierargumente vor, die dies im obigen Datenmodell ermöglichen würden.

+0

Wenn Sie sich die sortierten Sätze mit der Perspektive, die Sie mir gegeben haben, nochmals ansehen, sind sie die offensichtliche Wahl. - Danke Tom! –

Antwort

6

Ein sortierter Satz ist in diesem Fall wahrscheinlich besser als ein Hash.

Der Wert wäre eine Kombination aus Zeitstempel und Sensorwert. Das Ergebnis wäre der Zeitstempel. Verwenden Sie ZRANGEBYSCORE, um die Werte abzurufen. Sowohl Lesen als auch Schreiben gehen von O (1) nach O (Log (N)), aber Sie erhalten die Fähigkeit, einen Wertebereich zurückzugeben.

Sie können auch eine Liste verwenden, um O (1) einzufügen. Das Lesen würde O (N) zum Abrufen eines bestimmten Eintrags sein, aber das Erhalten der neuesten Einträge wäre O (1).

+0

Wir fanden jedoch einen kleinen Vorbehalt. Wenn der Sensor den gleichen Wert (Element) mehr als einmal liest (was mehr als nur leicht ist), wird der vorherige Punkt (Zeitstempel) überschrieben. –

+1

Deshalb speichern Sie lieber eine Kombination als den tatsächlichen Wert - zB zadd SensorA 20110111172900 20110111172900: 25 –

+0

Sie haben recht, in der Aufregung haben wir diese Details total übersehen. Wir haben implementiert, wie Sie es vorgeschlagen haben, und es funktioniert sehr gut. Vielen Dank an dich. –