2

私は Redis を試してきましたが、Redis がもたらすスケーラビリティがとても気に入っています。ただし、既に運用されているシステムのデータ構造への変更をどのように処理するのか疑問に思っています。

たとえば、ユーザーに関する情報を収集していて、user_id をキーとして使用し、ユーザーに関するその他のデータをコンマ区切りの値としてダンプしているとします。

user_id: name, email, etc.

たとえば、約 100,000 レコードを処理した後、クエリを実行する必要があることに気付きemailました。既存のデータのスナップショットを取得し、新しいインデックスを作成するにはどうすればよいでしょうか。

4

2 に答える 2

1

変更をサポートしたい場合、csv を使用することはお勧めできません。すべてが 1 つのキーにある場合は、不足している値や新しい値を処理するシリアライザーを使用する必要があります。または、名前付きサブキーを提供する redis ハッシュを使用できます。どちらの方法でも、新しい値なしでレコードを読み取る場合にコードが何をすべきかをコードが知っているという唯一の要件で、フィールドを追加/削除できます。

メールで検索できるようにするには、インデックスを追加する必要があります。基本的には、ユーザー ID を値とする各メールのキー (またはリスト) です。一度すべてのキーを取得してこのインデックスにデータを入力する必要があります。その後、電子メールが変更されたときに必ず更新してください。

すべてのキーを反復処理して別の ID で保存することもできますが、それはおそらく価値があるよりも面倒です。

于 2011-01-06T03:28:12.593 に答える
0

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

"Colum" => [0] c.mcgaley@gmail.com
            [1] password
            [2] Something

同じ問題が発生したアプリを構築しています。すべてのユーザー情報のリストを作成して解決し、ユーザーの電子メールとユーザーのIDの値を持つキーを作成しました。したがって、私のデータベースは次のようになります。

"Colum" => [0] c.mcgaley@gmail.com
            [1] password
            [2] Something
"c.mcgaley@gmail.com" => "Colum"

そのため、ID または電子メールをクエリしても、必要な情報を取得できました。

ご質問に直接お答えできず申し訳ありません。これが役に立ったことを願っています。

于 2011-01-05T21:34:42.080 に答える