私は数百のサッカーゲームを私のredusデータベースに保存しています。彼らはキーの下にハッシュで保存されています:games:soccer:data
私は3つのzのセットを持って来て、ライブにそれらをclasifyし、終了しました。すべての日付(スコア)順。こうすれば、すぐに始まるか、すでに起こっているか、すでに終了しているかによって、簡単に検索できます。さて、私はリーグ名でそれらを取得できるようにしたい。レディスでリーグ名でサッカーゲームを検索する最善の方法は何ですか?
私は2つの選択肢を思い付いた:
まず代替:ゲームIDとリーグ名を含む単一のハッシュ保存。この方法では、すべてのライブゲームIDを取得し、それぞれのハッシュに対して各IDを確認し、必要なリーグ名に一致する場合は配列にプッシュし、そうでなければスキップします。最後に、必要なリーグのすべてのゲームIDを配列に返します。
第二の代替:は、各リーグのキーを作成し、今後のライブがあり、それぞれのセットを終えました。このようにして、ゲームIDを取得する方が速くなると思います。しかし、各セットを維持することは苦痛であろう。
これ以外の方法がある場合は、お知らせください。並べ替えが高速でメモリが節約できるかどうかはわかりません。
私はスピードとメモリ使用量を探しています。
(ホッブズ代替以下)EDIT:
const multi = client.multi();
const tempSet = 'users:data:14:sports:soccer:lists:temp_' + getTimestamp();
return multi
.sunionstore(
tempSet,
[
'sports:soccer:lists:leagueNames:Bundesliga',
'sports:soccer:lists:leagueNames:La Liga'
]
)
.zinterstore(
'users:data:14:sports:soccer:lists:live',
2,
'sports:lists:live',
tempSet
)
.del(tempSet)
.execAsync()
私は私のクエリにAGGREGATE MAX
を設定する必要があると私はどのようには考えています。
各リーグのすべてのゲームを含むこのSETが何千ものエントリで非常に大きくなるとどうなりますか?そのサイズは重要ですか? – ElPirru
@ElPirruそれは問題ですが、何千もの "非常に大きい"ではなく、問題になる可能性は低いです。しかし、確かに、いくつかのテストデータを作成し、パフォーマンスを測定してください! – hobbs
私はいくつかのテストを実行し、結果をポストバックします。私は、サイズを「小さく」保つためにx時間以上のゲームを削除することも、2つのSETを持つこともできます.1つは1か月より新しいゲームで、残りのゲームは他のゲームで行います。もし私がハッシュからゲームのリーグをレトリーブし、そこから新しいセットを作るとすれば?これは私が推測するソート関数を使用するでしょう.... – ElPirru