私は現在、登録システムプロトタイプを開発中です。これは非常に単純化されており、本質的にMongoDBに書き込まれる.NETフォームです。私がこだわっている何データベースエントリの効率的なユニークなキー生成
は、各ユーザーの一意のID /キーを生成するための効率的な方法です。これらのIDは人間にやさしいものでなければならないため、7文字の英数字の文字列のようなものでなければなりません。 A1B2C3X。
私は今のところだけ、ランダムな文字列を生成する簡単な関数を使用して、(あなたがユニークであるものを見つける刚性繰り返し、そうでない場合は)それが一意であるかどうかを確認するためにデータベースをチェック見てきたソリューションを提供しています。もちろん、これは、データベースエントリの数が増えるにつれ、ますます計算機的に高価になります。
私の考えは、固有のIDセットを事前に計算し、別のデータベースにそれを格納することです。次に、ユーザーデータベースに新しいエントリを追加する必要があるとき、IDデータベースからIDを(一定の時間内に)「ポップ」して、それを検索する必要なくユーザーデータベースに存在しないことを知ることができます。
誰かが前にこのようなことをしているに違いないと確信しています。より良い方法がありますか?なぜ私はこれでこれほど苦労しているのか分かりません。あなたのご意見は非常に高く評価されています。
MongoDBドライバが提供するObjectIdは、あなたのユースケースではあまりにも人間的ではありませんか? –
私は@EkinKocが提案したことを提案しようとしていました(もしあなたが40文字で大丈夫なら、それは行く方法です)。しかし、正確に7文字が必要な場合は、あなたが概要を示す方法は、値をポップするために別のdbキーストアを持つよりも、コストがかからず、簡単で、エラーが起こりにくいはずです。ランダムな7文字の英数字列に衝突する可能性はほとんどありません。あなたが最適化すべきではないまれなケースです。 (とにかくユーザーの作成はまれですが、dbの一意性チェックは比較的まれなプロセスのために十分高速です)。 –
@BenLee:スケールで衝突の確率が変化します:) –