6

現在、C#Guid.NewGuid()ランダムっぽいGUIDジェネレーターから、この投稿で提案されているシーケンシャルGUIDアルゴリズムに切り替える過程にあります。これはMSSQLServerでうまく機能しているように見えますが、raw(16)フィールドにGUIDを格納するOracleデータベースへの影響についてはよくわかりません。このアルゴリズムがOracleおよびMSSQLServerのシーケンシャルGUIDの作成に適しているかどうか、または別のバリアントを使用する必要があるかどうかについて、誰かが洞察を持っていますか。

ありがとう!

4

2 に答える 2

2

Using raw(16) seems to be a reasonable data type for GUIDs. The maximum size for the raw datatype is 2000 bytes and is supported in Oracle 9i, 10g and 11.

There is also a sql function for generating GUIDs, it's called SYS_GUID. see documentation here-> http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/functions153.htm

You may be interested in this article -> http://feuerthoughts.blogspot.com/2006/02/watch-out-for-sequential-oracle-guids.html

于 2010-04-07T11:51:19.373 に答える
1

インデックス ブロックがもう 1 つのエントリに対して「いっぱい」になると、分割されます。

Oracle には 2 つのパスがあり、1 つは「順次」スタイル値用に最適化され、もう 1 つは「ランダム」型値用に最適化されています。新しいエントリがインデックスの一番右端にある場合、90 対 10 の分割が得られます。中間であれば、50-50 になります。インデックス内で「新しい」値をクラスター化する場合は、連続値が役立ちます。それらを分散させたい場合 (たとえば、「ホット」ブロックでの競合を避けるため)、ランダムな値が便利です。

この手法が Oracle に「適している」かどうかは、解決しようとしている問題によって異なります。

于 2010-04-08T00:30:03.873 に答える