エレガントに解決する方法がわからない問題があります。
背景情報
ウィジェットのテーブルがあります。各ウィジェットには、1 から 999 までの範囲の数字から ID が割り当てられます。1 ~ 999 の値は、データベースの「config」というテーブルに「lower_range」および「upper_range」として保存されています。ユーザーが Web アプリを使用して新しいウィジェットを作成するように要求した場合、次のことを実行できる必要があります。
- lua の math.random 関数または sqlite の乱数ジェネレーターを使用して、1 から 999 までの乱数を生成します (これまでのところ、私のテストでは、lua の math.random は常に同じ値を返します...しかし、それは別の問題です)。
- select ステートメントを実行して、この番号が割り当てられたウィジェットが既に存在するかどうかを確認します...
- そうでない場合は、新しいウィジェットを作成します。
- それ以外の場合は、現在使用されていない番号を取得するまでプロセスを繰り返します。
問題
上記のロジックで見られる問題は 2 つあります。
- 一意の値が見つかるまで検索を続ける必要があるため、アルゴリズムには時間がかかる可能性があります。
- 同じ値を生成する新しいウィジェット番号の同時要求を防ぐにはどうすればよいですか?
任意の提案をいただければ幸いです。ありがとう