1

関数に関するMeteorのドキュメントによると、Mongo.Collection.insert()

insert は、渡したオブジェクトの一意の ID を生成し、それをデータベースに挿入して、ID を返します。

非同期でも動作します。

コールバックを提供した場合でも、insert はすぐに ID を返します。

生成された _id がグローバルに一意であるという保証はありますか? Meteor の Minimongo は、クライアント側でそのような _id をどのように生成しますか?

4

1 に答える 1

3

Meteor はオープン ソースであるため、これがどのように行われるかを正確に確認できます。

README から:

random パッケージは、乱数を生成するためのいくつかの関数を提供します。可能であれば、暗号的に強力な疑似乱数ジェネレーターを使用しますが、暗号的に強力なランダム性が利用できない場合 (古いブラウザーまたは暗号的に強力なジェネレーターをシードするのに十分なエントロピーを持たないサーバー) には、より弱い乱数ジェネレーターにフォールバックします。

Random.id([n])- "Jjwjg6gouWLXhMGKW" など、全世界で一意である可能性が高い一意の識別子を返します。オプションの引数 n は、識別子の長さを文字数で指定し、デフォルトは 17 です。

簡単な答えは、Meteor が暗号化 (別名@Kyllによる数学) を使用して、あらゆる場所のすべての mongo データベース内のすべてのオブジェクトでグローバルに一意である必要があるランダム ID を生成することです。「運」の部分は、2 つのオブジェクトが同じ ID になる可能性がわずかにあることです。現在、_idキーはmongoで一意にインデックス付けされているため、重複がある場合、挿入は失敗します。Meteor には、その可能性に対処するためのエラー処理があると思われます。

于 2015-10-25T16:54:09.343 に答える