私はJava EE WebアプリケーションとSQL Serverデータベースを持っています。 後でデータベースをクラスタリングするつもりです。私自身のデータベースの自動インクリメント - 重複するキーを避ける
は今、私は2つのテーブルがあります: - ユーザー - 場所
をしかし、私は、SQL Serverの自動IDを使用する必要はありません。 クラスタのため自分のIDを生成したい。私は新しいテーブルParameter
を作成しました。パラメータテーブルには、2つのカラム、TableName
とLastId
があります。私のパラメータテーブルに最後のIDが格納されます。新しいユーザーを追加すると、私のメソッドaddUserは次のようになります。
- パラメータテーブルの最後のIDを問い合せ、+1します。
- 新しいユーザーを追加
- 最後のIDを+1に更新してください。
これは機能しています。しかし、それはWebアプリケーションなので、同時にどのように約1000人ですか?たぶんそれらのうちのいくつかは同じ最後のIDを取得します。これをどうすれば解決できますか?私は同期して試しましたが、うまくいきません。
あなたはどう思いますか?はい、私は自動増分を避けなければなりません。
私は、ユーザーが待たなければならないことを知っています。
本当に唯一の方法は、自動インクリメントを同期または使用することです。 – 3kings
キーの代わりにGUIDを使用できますか? DBは必ずしもキーのソースである必要はありません。参照整合性に関してGUIDは常に便利であるとは限らないことに注意してください。整数に比べてかなり大きなキーを持ち歩いています。 – stdunbar