2012-05-08 4 views
1

Node.jsとGeddyを使って簡単なアプリケーションを作成するチュートリアルに従っています。新しいエントリごとにエントリIDをgeddy.string.uuid(10)に設定し、他のチェックを実行していないようです。私の懸念は、新しいエントリを作成するときに以前のエントリと同じIDを生成する可能性があることです。このIDがすでに存在する場合、チュートリアルの保存スクリプトはエントリを上書き/更新します。Node.js with Geddy:geddy.string.uuid(x)は文字列が一意であることを確認しますか?

私はこれが起こる可能性がある場合、まれな出来事であることは知っていますが、可能であれば、これを偶然に残す責任はないと感じています。 PHPで知っているのは、それが一意であることを確認するためのチェックをしていて、Geddyが私のためにこれをやっていたかどうかを知りたいのは、チュートリアルが心配していないようです。

ありがとうございます。

答えて

2

uuidが2回発生する可能性はほとんどありません。

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

ここで10 uuidを渡しているのは面白いことです:geddy.string.uuid(10)latest version of 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が10に進桁数を制限している場合は、その後、あなただけの衝突の1 1,099,511,627,776中(1000000000000)チャンスがあります。それは重大な重複IDを見つけることを余儀なくされるかもしれませんが、それはまだ起こりにくいです。

+0

ありがとうございます。私はパッケージマネージャを使ってgeddyをインストールしたので、それは最新のものだと仮定しましたが、変数は出力を見ると長さを制御します。 – gokujou

+0

パッケージを推測すると、ここでもvarが使用されます(https://github.com/mde/geddy/blob/master/lib/utils/string.js)。 – gokujou

+0

Cool。知っておいてよかった。いずれにせよ、あなたは重複からかなり安全だと思います。 :-) –

関連する問題