2014-02-21 9 views
8

Ich muss einige Zeitreihen Daten in redis speichern. Ich habe Unix-Zeitstempel und dass die ich benötige einen Wert zuzuordnen (Zeitstempel < -> Wert)Speichern von Zeitreihen in Redis

I sortierten Sets mit dem Zeitstempel als Partitur versucht und den Wert als Mitglied (so kann ich zrange auf dem Zeitstempel tun).

127.0.0.1:6379> ZADD timeserie 1392141527245 10 1392141527275 12 1392141527100 10 
(integer) 2 
127.0.0.1:6379> zscan timeserie 0 
1) "0" 
2) 1) "10" 
    2) "1392141527245" 
    3) "12" 
    4) "1392141527275" 
127.0.0.1:6379> 

Aber ich habe ein Problem, Mitglieder sind nicht wiederholt, während meine Werte für verschiedene Zeitstempel die gleichen sein können. Irgendeine Idee, wie man das angeht? Ist ein anderer Datentyp besser?

Antwort

13

Ein einfacher Trick, dieses Problem zu lösen, besteht darin, den Zeitstempel und den Wert zu verketten.

Statt Speicherung:

ZADD timeserie 1392141527245 10 

können Sie speichern:

ZADD timeserie 1392141527245 10:1392141527245 

Bis zur Anwendung zu codieren/analysieren den Wert: Zeitformat.

Sortierte Sets sind als Skip-Liste plus Hash-Tabelle implementiert, daher sind sie im Speicher nicht besonders kompakt. Wenn das Volumen Ihrer Daten erheblich ist, können Sie besser mit einer anderen Lösung umgehen.

Einige Leute verwenden normale Strings zum Kodieren von Zeitreihen, die viel kompakter sind als sortierte Sätzen. Sie können hier ein Beispiel finden: https://github.com/antirez/redis-timeseries

+0

Das ist genau die Lösung, mit der ich ging. Sehr hilfreich. Vielen Dank! – maephisto

+0

Sie können den Wert mit dieser Lösung nicht erhöhen. –

1

Es ist eine sortierte Set, so kann in der Tat Wert nicht wiederholen. Redis ist möglicherweise nicht das beste Werkzeug für Ihre Verwendung, versuchen Sie es mit einer speziellen Datenbank wie influxdb.