2012-02-28 19 views
3

私はRedisをnosqlデータベースとして使用していますが、実際にはそれを楽しんでいますが、それは便利ではない場合もあります(すべてのデータモデルをnosqlで使用できるとは限りませんが...)。
私は、Redisで以下を実行する適切な方法があるのか​​、それともRDMSを決定的に行う必要があるのか​​を知りたいと思います。nosqlによる情報の重複?

のは、私は2つのオブジェを持っているとしましょう:

- User 
- Asset 

資産は、「フラット」、「建物」や「家」のいずれかになります。

は、私のような資産を収集し「資産」という名前のRedisのリストを使用します。

assets = [asset:1, asset:2, ....] 

各資産があるが、ハッシュのように:私はすべての資産のリストを取得できますか

asset:1 = {type: flat, value: 150000$} 

タイプ "フラット"?

最も簡単な方法は、アセットのリストを反復して、それぞれのタイプをチェックすることです。これは線形であり、とても良いようです。

もっと良い解決策はありますか?

「フラット」というタイプの資産の参照を含む「フラット」が新しいリストを作成すると便利なことがありますが、このニュースリストはオーバーヘッドを引き起こすため、同期させる必要があります。

flats = [asset:1, asset:5, ...] 

これはデータ複製につながります...これは悪い...これはまだnosqlと一緒に行く方法ですか?

他の提案はありますか?

答えて

4

通常、インデックスを含む2番目のキーを作成します。したがって、新しいアセットを作成するときは、アセットのセットと特定のアセットタイプのセットに書きます。オーバーヘッドですが、他のデータベースでも同じオーバヘッドが発生します。インデックス作成には常に追加の書き込みが必要ですが、Redisはこれが起こっていることを本当に明白にしています。

また、私はちょうどあなたの「資産」のセットではなく、資産にIDを格納します:ちょうど1つの

+0

感謝you'r権利を格納し、1、事は私達がはっきりオーバーヘッドを参照のNoSQLです。最後の点については、私もユーザーのためのリストを使用する場合は、あなただけのインデックスを使用してもusers:[2、4、9]、assets = [1,5]?私はこのアプローチを使用しませんでしたが、私はユーザーと資産の鍵が十分に分かれていないことを肯定するでしょう。 – Luc

+0

RDMSと同じインデックス機構を構築すれば、nosqlのメリットは何ですか?私は、RedisがRAMにあるので、利点はスケーラビリティとパフォーマンスだと言いますが、それはそれほど明白です。 – Luc

+0

@Lucキーの名前はIDをスコープできます。それはタイプ "user"の値 "1"なので、キーユーザを構築することを知っています:1 ポイントはリレーショナルデータベースに関して有効です。制御の引数があります。あなたはもっときめ細かくコントロールできます。ほとんどの人は、たとえそれを使わなくてもデータをレディスでモデル化しなければならないと考えているので、実際にはどのリクエストを実行する必要があるのか​​を見ることができます。 Oracleはそれを隠すでしょう、あなたはそれを見ています。 – menacingly

関連する問題