1

Node.jsとGeddyを使用して簡単なアプリを作成するためのチュートリアルに従っています。新しいエントリごとに、エントリIDを設定し、geddy.string.uuid(10)他のチェックを実行していないようです。私の懸念は、新しいエントリを作成するときに、前のエントリと同じIDが生成される可能性があり、チュートリアルの保存スクリプトは、IDがすでに存在する場合にエントリを上書き/更新することです。

これが発生する可能性がある場合、これはまれな発生になることは承知していますが、可能であれば、これを偶然に任せる責任はないと思います。PHPでは、それが一意であることを確認するために何らかのチェックを実行することを知っています。チュートリアルであるため、Geddyがすでにこれを実行しているかどうかを知りたいだけですが、心配する必要はありませんか?

ありがとうございました。

4

1 に答える 1

2

UUIDが2回発生する可能性は実際にはありません。

技術的には、340,282,366,920,938,463,463,374,607,431,768,211,456(16の32乗)の確率で重複が発生する可能性があります。Geddyのuuid関数(他のほとんどの関数と同様)は、32桁の16進数(128ビット)のランダムビットを使用します。http://en.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicatesを参照してください。基本的に、重複することはありません。

ちなみに、ここで10uuidを渡しているのは興味深いことですgeddy.string.uuid(10)getty string.jsの最新バージョンでは、uuidは引数を取らないため、10は無視されます。

148   this.uuid = function () {
149     var chars = _UUID_CHARS, uuid = [], rnd=0, r;
150     for (var i = 0; i < 36; i++) {
151       if (i==8 || i==13 ||  i==18 || i==23) {
152         uuid[i] = '-';
153       } else {
154         if (rnd <= 0x02) rnd = 0x2000000 + (Math.random()*0x1000000)|0;
155         r = rnd & 0xf;
156         rnd = rnd >> 4;
157         uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
158       }
159     }
160     return uuid.join('');
161   };

geddyのバージョンの10が16進数の数を10に制限している場合、衝突の可能性は1,099,511,627,776(1兆)に1つだけです。重複するIDを見つけることを総当たり攻撃する可能性はありますが、それでも可能性はほとんどありません。

于 2012-05-08T23:25:56.073 に答える