これは一般的な設計上の問題です。ユーザーが値を入力してタブアウトしたときに、ユーザー名フィールドの一意性を検証したいと思います。Ajax検証を実行し、サーバーから応答を取得します。これはすべて非常に標準的です。さて、巨大なユーザーデータベースがある場合はどうなりますか?この状況に対処する方法は?1億5000万のユーザー名の中にユーザー名「foozbarz」が存在するかどうかを知りたいですか?
- データベースクエリは問題外です[編集]-ユーザー名データベースを1回読み取り、キャッシュ/ハッシュにデータを入力して検索を高速化します(EmilVikströmのポイントを明確にするため)
- インメモリデータベースはどちらも役に立ちません
- すべてのユーザー名を保存するために、メモリ内のハッシュ(またはcache / memcache)を保持します-ユーザー名は簡単にハッシュでき、ルックアップは非常に高速になります。ただし、これにはいくつかの問題があります。ハッシュのサイズ-ハッシュサイズを減らすことができるように最適化できますか?b。ハッシュ/キャッシュの更新頻度(検証中にユーザーが追加される可能性があります)
- いくつかの基準に基づいてユーザー名テーブルをシャーディングします(例:テーブルusername_1のABなど)-この提案をありがとうpiotrek
または、他のより良いアプローチはありますか?