1

メイン データベースとして redis に依存する node.js アプリケーションを作成しており、ユーザー情報はこのデータベースに格納されています。

現在、ユーザー データ (電子メール、パスワード、作成日など) を という名前のハッシュで保持していuser:(incremental uid)ます。email:(email)そして、値を持つキー(same incremental uid)

誰かがログインすると、アプリは電子メールに一致するキーを検索してemail:(email)を返し、(incremental uid)でユーザー データにアクセスしますuser:(incremental uid)

これはうまく機能しますが、ユーザー数が数百万に達すると (可能性はありますが、多少遠い問題です)、データベースのサイズが劇的に増加し、いくつかの問題が発生し始めます。

次のようなハッシュバケットにソートするために使用できる整数に電子メールをハッシュする方法を考えています(疑似コード):

hash(thisguy@somedomain.com) returns 1234  
1234 % 3 or something returns 1
store { thisguy@somedomain.com : (his incremental uid) } in hash emailbucket:1

次に、この uid で email を検索する必要がある場合thisguy@somedomain.comは、同様の手順を使用します。

hash(thisguy@somedomain.com) returns 1234  
1234 % 3 or something returns 1
lookup thisguy@somedomain.com in hash emailbucket:1 returns his (incremental uid)

だから、リスト形式の私の質問:

  1. これは実用的ですか / より良い方法はありますか?
  2. 電子メールを数桁にハッシュするにはどうすればよいですか?
  3. これらのハッシュをバケットに整理する最良の方法は何ですか?
4

2 に答える 2

0
  1. 多分そこまで問題にならない。Redis には整数型がないため、数バイトしか節約できません (カウンターが次の桁にロールオーバーするたびに節約されます)。ナプキン計算を行うと、100 万人のユーザーの場合、実際のストレージの差は ~50 mbs になります。1 GB あたり 1 ドル未満の範囲のハード ドライブでは、実装に時間をかける価値はありません。
  2. 思考実験として、現在のユーザー カウンターであるキーを維持し、新しいユーザーを追加するたびGETに維持することができます。INCR
于 2013-12-03T20:46:48.670 に答える