5

Google Cloud Spanner recommendsは、主キーの単調増加整数を使用しています。これは、ホットスポットを作成するように、トップレベルのテーブルには理にかなっています。しかし、インターリーブされたテーブルはどうですか?彼らはとにかく同じノードに格納されます。それらはソートされた順序で保持されるので、UUIDやその他のランダムIDを使用すると、特にソートされた順序で取得される場合には、最適ではないようです。Google Cloud Spannerの自動インクリメント

最大IDを読み取り、新しい行のmaxId + 1を正しいソリューションに保存していますか?

答えて

3

インターリーブされた子テーブルの行には、親テーブルのキーが前置されているため、親キーが非順次的である限り非順次キーと考えることができます。このような状況では、一般的に大丈夫ですが、このキー範囲全体が1つのスパンサーバーによって提供されるため、注意してください。このような状況で単一のSpanサーバーをホットスポットすることに懸念がある場合は、テーブルをインターリーブしないことが最善の方法です。

キーが実際に単調に増加しているか、キーが減少していることに注意してください。

+0

答えをありがとう。インタリーブされたテーブルで増加する数値を使用するベストプラクティスは何ですか?それは簡単ですか: max = read( "SELECT MAX(SubId)FROM SubTable WHERE ParentId = ..."); 書き込み( "サブタブ(SubId、...)の値を挿入する(" +(max + 1)+ "、...)") ? –

+1

一般に、必要に応じて順次IDのための列を持つUUIDを避けて使用することは、まだ良い考えです。トランザクションの中でそれを行うことを確認するなど最新の(そして最大)値が削除された場合どうなるか、再利用できるかどうかなど、多くの危険が潜んでいます。おそらく、別のテーブルを使用してカウンターを保管し、適切な取引があることを確認する方がよいでしょう。 –

関連する問題