時刻と曜日に基づいて適用するルーティングルールを見つける必要があるアプリケーション(nodejs/express)があります。だから、REDIS - クエリを減らすための意味のあるキーを作成する
例えば、私は、次のビジネスルールを持っている:9:00 GMTから12:00 GMTの間に、月曜日と火曜日に
- 、私は「位置x」にルートオブジェクトABCが必要です。
- 火曜日は13:00から13:30の間にABCを「場所y」にルーティングする必要があります。私は限り私はRedisのデータベースで私の鍵を設計する方法として、2つのオプションの議論しています
(この議論の目的のために、本当にABCが何であるかのオブジェクトは関係ありません。)
オプション1
このように、日情報オブジェクトデータの一部行います
HMSET routing_rules:objectABC_09:00_12:00 days 'mon tues' location X
HMSET routing_rules:objectABC_13:00_13:30 days 'tues' location Y
この方法の
利点 - それは、私は単にこれを行うことができ日間のリストを更新する時間です:
HMSET routing_rules:objectABC_09:00_12:00 days 'mon tues thu'
ここでの欠点は、右のルールを見つけるために、私は2つのクエリをしなければならないということです。..まず、正しい時間範囲を見つけるためにSCANコマンドを実行し、一致するものがあれば...曜日の値を見つける別のクエリを実行します。
オプション2
キー
HMSET routing_rules:objectABC_09:00_12:00_mt location X
HMSET routing_rules:objectABC_13:00_13:30_t location Y
の一環として、私はオプション2に
m = monday
t = tuesday
w = wed
r = thursday
etc.
利点のような命名規則を使用する曜日情報を含めます現在の日時に基づいて適切なルーティングルールを見つけるためには、1つのSCANコマンドを実行するだけです(私たちは私のSCANコマンドは、1回のショットですべての結果を返します)
しかし、私は、キーに新しい一日を追加する必要がある場合は、オプション2の欠点は、私は iがキーと値を削除する必要があると思います。 ..それを作り直してください。これは正しいです?
今のところ、私が削除する方法を知っている唯一の方法は、オブジェクト内の各値に対してHDELを実行し、次にキーを削除することです。私は全体のキー/値のペアを削除するには、オブジェクト内のすべての値をリストする必要があり
127.0.0.1:6379> HDEL routing_rules:objectABC_00:00_00:00 days 'mon tues' location x
: だから例えば、私はこのような何かをやってきました。 この例では、このキーの2つの値(locationフィールドとdaysフィールドのみ)があるため、それほど悪くありません。しかし、さらに多くのデータがあれば、少し面倒です。また、このキーに関連付けられているフィールドの数以外に考慮すべき他の考慮事項があるかどうかはわかりません。
最適なパフォーマンスとメンテナンスのためにこのキーを設計する方法についてご意見がありましたら、私はすべて耳にします。私が見ているように、スキャンを少なくとも1回は実行しないようにする方法はありません。しかし、これは私の最初のredisデータベースの試みですので、私は修復の質問/ noobの間違いを事前に謝罪します。
EDIT 1
私は十分なメモリを持っていると仮定すると、私は唯一の私は、このように私のキーを作成しましょう、1つのフィールド/キーごとに値を保存する必要があると仮定:
SET routing_rules:objectABC_09:00_12:00_m X
SET routing_rules:objectABC_09:00_12:00_t X
SET routing_rules:objectABC_13:00_13:30_t Y
そして、今ではオブジェクトABCの要求があり、月曜日はUTC 11です。私のキーは開始時刻と終了時刻(別名範囲)を表しているので、スキャンを行わずに正しいキーと値のペアを見つける方法はわかりません。
何か不足していますか?
パスカル、エントリ数の「高い」値とは何でしょうか? – Happydevdays
これは、サーバー上の使用可能なメモリーと比較して、各キー+値のメモリー・サイズに依存します。 –
私は約15 GBの使用するオブジェクトと50,000個のオブジェクトを持っていると思います。各オブジェクトには最大5つのルーティングルールがあります。 – Happydevdays