web-dev-qa-db-ja.com

NEWSEQUENTIALIDは、データベース内で多くのテーブルに対して一意ですか?

NEWSEQUENTIALIDはデータベース内で一意ですか? NEWSEQUENTIALIDを使用してデータベース内の多くのテーブルを計画し、同時に挿入して、異なるテーブルにあるかどうかに関係なく、すべてのGUIDが一意になるようにします。

通常のNEWID()はデータベースの一意性を保証します。重複が発生する可能性は、小惑星/雷に打たれる可能性ですが、断片化の問題を軽減するものではありません。

この記事ではMacアドレスについて説明しますが、上記のデータベース固有の質問を指定します。 https://stackoverflow.com/questions/28404964/is-uniqueidentifier-unique-across-databases

1
user162241

Microsoft Docs によると、値はコンピューターごとに一意であり、問​​題のコンピューターにネットワークカードがある限り、複数のコンピューター上でも一意です(生成アルゴリズムは、ネットワークカードから取得したいくつかの値を使用すると想定されます) GUIDを生成する)

NEWSEQUENTIALIDを使用して生成された各GUIDは、そのコンピューター上で一意です。NEWSEQUENTIALIDを使用して生成されたGUIDは、ソースコンピューターにネットワークカードがある場合にのみ、複数のコンピューター間で一意です。

これ以外にも、その一意性に関するいくつかの注意点があるようです。

UuidCreateSequential関数には、ハードウェアの依存関係があります。 SQL Serverでは、データベース(含まれているデータベースなど)を他のコンピューターに移動すると、順次値のクラスターが発生する可能性があります。 Always OnとSQL Databaseを使用する場合、データベースが別のコンピューターにフェールオーバーすると、連続する値のクラスターが発生する可能性があります。

idCreateSequential のページでは、ネットワークカードが存在する場合、関数がコンピューター間で一意であることが保証されていることもわかります。

イーサネット/トークンリングアドレスを持つコンピューターは、グローバルに一意であることが保証されているUUIDを生成します。

3
George.Palacios

Microsoftのドキュメント によると、.

NEWSEQUENTIALID

GUIDこれは、任意の値よりも大きいGUID Windowsの起動以降、指定されたコンピューター上でこの関数によって以前に生成されました。Windowsの再起動後、GUIDはより低い範囲から再開できますが、それでもグローバルに一意です

主にランダムなGUIDに関連する断片化の問題が原因で、組み込みのランダム性に依存していない場合は、NEWSEQUENTIALIDよりもNEWID()を使用することをお勧めします。主キーでNEWID()を使用する際のいくつかの落とし穴について、Kimberly Trippによる 素晴らしい記事 があります。

ドキュメントに記載されているように、NEWSEQUENTIALIDが一意性を保証しない場合があります。

UuidCreateSequential関数には、ハードウェアの依存関係があります。 SQL Serverでは、データベース(含まれているデータベースなど)を他のコンピューターに移動すると、順次値のクラスターが発生する可能性があります。 Always OnとSQL Databaseを使用する場合、データベースが別のコンピューターにフェールオーバーすると、連続する値のクラスターが発生する可能性があります。

ただし、質問のフレージングから判断すると、これは単一のデータベースサーバーに含まれるようです。

NEWSEQUENTIALIDを予測できることにも注意する必要があります(ここでは適用されません)。そのため、GUIDのプライバシーが懸念される場合、これも問題になる可能性があります。

4
Zane