0

現在、ユーザーのイニシャルに基づいてユーザー名を作成する一連のルールがあります。これは調整できません。したがって、ユーザーのイニシャルは「xxx」です。彼のユーザー名は zzxxx1 です。同じイニシャルを持つ次のユーザーは zzxxx2 などになります。Java を使用して ID (useridCreation.jar) を生成しています。この jar は、マルチスレッド アプリケーション (ITIM) によって呼び出されています。では、ユーザー名が重複しないように、最初のユーザーの作成が完了するまで zzxxx1 を予約するにはどうすればよいでしょうか。これは、ユーザー名が生成されるフィード タイプの状況です。1 秒あたり最大 4 ユーザーをプルできます。Vector を考えていましたが、マルチスレッド アプリケーションにあまり詳しくないので、どのようにアプローチすればよいかわかりません。SQLテーブルも別のオプションですが、同時書き込みオフでも問題があると思います。ロック/ロック解除するファイルはどうですか。この種の問題に対して確実な解決策を実装した人はいますか?

編集:これがクラスター環境であることを忘れていました。

4

1 に答える 1

2

この jar は、マルチスレッド アプリケーション (ITIM) によって呼び出されています。では、ユーザー名が重複しないように、最初のユーザーの作成が完了するまで zzxxx1 を予約するにはどうすればよいでしょうか。

これがクラスター構成 (つまり、複数のサーバーで実行される分散アプリケーション) の場合、名前の一意性を保証する何らかの中央サービスが必要になります。簡単な解決策の 1 つは、テーブルのユーザー名フィールドに一意の制約があるデータベースです。各サーバーは、順序付けされたクエリのようなものをLIKE実行して、最大のユーザー名番号を見つけ、次の番号を使用してエントリを作成しようとすることができます。それが取られた場合、次の番号で再試行します...

別の解決策は、一意性を保証する中央サービスを用意することです。すべてのクラスタ ノードは、synchronized1 つのスレッドまたは他のロックを使用して、一度に 1 つのスレッドだけが一意の名前を生成するようにする中央のノードに接続します。次に、永続性が必要だと思うので、おそらくデータベースが最も簡単なオプションです。

于 2013-09-05T15:22:16.920 に答える