2011-10-14 8 views
11

ネイティブのOracleシーケンスを使用するJPA/Hibernateアプリケーションでは、hibernate_sequenceのような単一のグローバル・シーケンスを使用するか、または表ごとに別々のシーケンスを定義する方が良いですか?どちらが良いですか:単一のグローバルシーケンス対テーブルごとのシーケンス?

1つのシーケンスは維持しやすいようですが、より長いIDを作成することでトラブルシューティングや特別なクエリを困難にする可能性があります。

+2

あなたはJava longの大きさを理解していますか?多くのアプリでは、たとえすべてのオブジェクトに1つのシーケンスを使用して100年間実行したとしても、長いIDを使い果たす恐れがあります。 –

+4

この問題に関するさらに詳しい説明はこちら(http://stackoverflow.com/questions/1536479/asking-for-opinions-one-sequence-for-all-tables) – jeff

+0

はい、私は数学を行い、 64ビット長のオーバーフローは非現実的です。 しかし、個々のシーケンスを使用するもう一つの理由があると思いました。テーブルの内容が何とかシーケンスから分離された場合、単一のテーブルから最大値を簡単に再生成できます。 – wrschneider

答えて

13

キャッシュを使用するとそれが軽減されますが、複数のセッションでネクストバルが必要な場合、シーケンスによって競合が発生する可能性があります。 1つのシーケンスがすべてのテーブルに対応している場合、すべてのテーブルのすべての挿入が同じシーケンスに対して競合します。演奏後の場合は、各テーブルのシーケンスで競合が少なくなります。

+0

良い点 - コンテンションは私がすでに考えていなかったものですが、同時に挿入することは個人的に私にとって重要な要素ではありません。他の問題 - トラブルシューティングのための低レベルの明快さと利便性、さらに多くのOracleオブジェクトを維持することは、主に優先事項のようです。 – wrschneider

+0

このスレッドに興味があるかもしれません:https://asktom.oracle.com/pls/asktom/f?p=100:11:451611870226342:::P11_QUESTION_ID:2985886242221 –

1

テーブルごとにシーケンスを使用することをお勧めします。それは私の本でちょっとしたものです。私の現在の雇用形態の基準は、テーブルごとの順序です。

2

単一シーケンスとは、2つのテーブルで一致するIDがないことを意味します。実際には、誤って間違った表を照会したときに何かを得ることができないので、私はこれが好きです。削除に特に便利です。それはちょっとしたことですが、私はそれが有用であると感じます。

関連する問題