JPA またはデータベース レベルで、データベース テーブルの主キーに MAX 値を設定できますか? もしそれが不可能なら、私は考えていました
- 0 ~ 9999999999 の間でランダムに作成します
key
(9999999999 が私の MAX です) - 新しく作成されたデータベースで SELECT を実行します
key
。戻りオブジェクトがnull
の場合は INSERT、そうでない場合は手順 1 に戻ります。
上記の場合、2つの質問があります。この環境は同時性が高いことに注意してください。
Q1: SELECT を使用したチェックのオーバーヘッドは重要ですか? 私が本当に言いたいのは、通常は DB に一意の PK を作成させるので、このプロセスは正常なのですか?
Q2: Q1 でパフォーマンスが大幅に低下しない場合、同時発生の問題が発生する可能性はありますか? たとえば、Id1 を持つ P1 がテーブルをチェックした場合、Id1 はそこになく、挿入する準備ができており、P2 は P1 ができる前に Id1 を挿入します。そのため、P1 が Id1 を挿入すると失敗します。ここでプロセスを失敗させたくありません。ループに戻り、新しい ID を見つけて、プロセスを繰り返します。それ、どうやったら出来るの?
私の環境はSQLとMYSQL dbです。Eclipselink実装でJPAを使用しています
注:このように実装するという私の決定に疑問を呈する人もいますが、答えはTravisJ
以下の提案とまったく同じです。私は非常に高い同時実行環境を持っています。プロセスが開始したら、別のプロセスへのリクエストを作成し、そのプロセスに 10 文字の一意の ID を渡す必要があります。現在の環境が高いため、PK のゼロではない独自の機能を活用したいと考えています。リクエストには多くの情報が含まれているためRequest
、リクエスト ID を PK としてテーブルを作成します。すべての DB が PK にインデックスを付けているため、PK のクエリが高速であることはわかっています。より良い方法があれば、私に知らせてください。