2011-01-11 3 views
3

私は多くのアナログセンサーからのデータログを保存するためにRedisを使用しています。私の目標は、ログ・タイム・スタンプに従ってデータをソートし、特定の日時範囲からデータを抽出することです。私のオリジナルのデータモデルは、センサ名をキーとして使用し、各タイムスタンプのハッシュとハッシュキーに付加された値を持っていました。Redis - Seeking Dataモデリング提案

So. SensorA、SensorB、SensorCがある場合、キー*を押すとSensorA、2. SensorB、3. SensorCが返されます。 hget SensorB 20110111172900を実行すると、25としましょう。

現在のモデリングの問題点は、タイムスタンプのソートができないということです。

データの範囲のソートと抽出を可能にするデータモデルを提案することも、上記のデータモデルでこれを可能にする適切なソート引数を提案することもできます。

+0

ソートされたセットをもう一度見て、あなたが私に与えたperpectiveでそれらを明白な選択にします。 - トムありがとう! –

答えて

6

この場合、ソートされたセットはおそらくハッシュよりも適しています。

この値は、タイムスタンプとセンサー値の組み合わせになります。スコアはタイムスタンプになります。 ZRANGEBYSCOREを使用して値を取得します。読み取りと書き込みの両方がO(1)からO(Log(N))になりますが、値の範囲を返すことができます。

また、リストを使用してO(1)挿入を取得することもできます。特定のエントリを検索するには、読み込みはO(N)になりますが、最新のエントリを取得することはO(1)になります。

+0

しかし、小さな注意書きが見つかりました。センサーが同じ値(メンバー)を2回以上読み取ると(これは非常に軽くなります)、前のスコア(タイムスタンプ)は上書きされます。 –

+1

だからこそ、実際の値ではなく組み合わせを保存するのです。例えば、zadd SensorA 20110111172900 20110111172900:25 –

+0

あなたはそうです。興奮の中で、私たちはこの細部を完全に見落としました。提案したとおりに実装しましたが、うまくいきます。あなたに感謝します。 –