2011-01-05 3 views
2

私はRedisを実験していましたが、私はそれがテーブルにもたらすスケーラビリティが本当に好きです。しかし、私はすでに生産中のシステムのデータ構造に対する変更をどのように処理するのかと思います。データ構造に対するRedis - handlingの変更

たとえば、ユーザーに関する情報を収集していて、user_idをキーとして使用し、ユーザーに関する他のデータをコンマ区切り値としてダンプするとします。どのように私は今、既存のデータのスナップショットを取り、それのために新しいインデックスを作成します -

user_id: name, email, etc. 

は今、約100000レコードの後、私はemailで照会するために必要なことを実現言いますか?

答えて

0

私がレディスを理解してから、これはレディスが設計していないものを必要とします。すべてのレコード(キー*を使用)をループして、データの順序を変更して新しいキーを作成する必要があります。個人的には、コンマ区切りの文字列の代わりにリストを使うことをお勧めします。リストでは、redisの内部からそれを並べ替えることができます。 Redisリストは次のようになります。

"Colum" => [0] [email protected] 
      [1] password 
      [2] Something 

同じ問題が発生したアプリをビルドしています。私はすべてのユーザーの情報のリストを持つことでそれを解決し、ユーザーのIDの値を持つユーザーの電子メールを持つキーを持っています。だから私のデータベースは次のようになります:

"Colum" => [0] [email protected] 
      [1] password 
      [2] Something 
"[email protected]" => "Colum" 

私はIDや電子メールを照会して、必要な情報を得ることができました。

申し訳ありませんが、ご質問に直接お答えできませんでした。これが助けてくれることを願います。

+0

はい、ありがとう、リストを使用してここで黄金のルールと思われる。どんな形のCSVでも将来の変更は非常に困難になります。 – jeffreyveon

+0

うれしい私は助けることができます。私はレディスでスタートしたときにこれを難しい方法で見つけました – Colum

1

変更をサポートしたい場合は、csvを使用することはおすすめできません。すべてが1つのキーに含まれている場合は、欠落値または新しい値を処理するシリアライザを使用する必要があります。また、名前付きサブキーを与える赤いハッシュを使用することもできます。いずれにしても、新しい値を持たないレコードを読み込んだ場合、コードが何をすべきかを知っているという唯一の要件を持つフィールドを追加/削除することができます。

電子メールでルックアップを許可するには、基本的に値としてユーザーIDを持つ電子メールごとのキー(またはリスト)を追加する必要があります。すべてのキーを一度取得し、電子メールが変更されたときに更新するようにして、このインデックスに値を設定する必要があります。

あなたはすべてのキーを繰り返し処理し、別のIDでそれらを保存することができますが、それはおそらくそれが価値があるよりもトラブルです。

関連する問題