関数に関するMeteorのドキュメントによると、Mongo.Collection.insert()
insert は、渡したオブジェクトの一意の ID を生成し、それをデータベースに挿入して、ID を返します。
非同期でも動作します。
コールバックを提供した場合でも、insert はすぐに ID を返します。
生成された _id がグローバルに一意であるという保証はありますか? Meteor の Minimongo は、クライアント側でそのような _id をどのように生成しますか?
関数に関するMeteorのドキュメントによると、Mongo.Collection.insert()
insert は、渡したオブジェクトの一意の ID を生成し、それをデータベースに挿入して、ID を返します。
非同期でも動作します。
コールバックを提供した場合でも、insert はすぐに ID を返します。
生成された _id がグローバルに一意であるという保証はありますか? Meteor の Minimongo は、クライアント側でそのような _id をどのように生成しますか?
Meteor はオープン ソースであるため、これがどのように行われるかを正確に確認できます。
README から:
random パッケージは、乱数を生成するためのいくつかの関数を提供します。可能であれば、暗号的に強力な疑似乱数ジェネレーターを使用しますが、暗号的に強力なランダム性が利用できない場合 (古いブラウザーまたは暗号的に強力なジェネレーターをシードするのに十分なエントロピーを持たないサーバー) には、より弱い乱数ジェネレーターにフォールバックします。
Random.id([n])
- "Jjwjg6gouWLXhMGKW" など、全世界で一意である可能性が高い一意の識別子を返します。オプションの引数 n は、識別子の長さを文字数で指定し、デフォルトは 17 です。
簡単な答えは、Meteor が暗号化 (別名@Kyllによる数学) を使用して、あらゆる場所のすべての mongo データベース内のすべてのオブジェクトでグローバルに一意である必要があるランダム ID を生成することです。「運」の部分は、2 つのオブジェクトが同じ ID になる可能性がわずかにあることです。現在、_id
キーはmongoで一意にインデックス付けされているため、重複がある場合、挿入は失敗します。Meteor には、その可能性に対処するためのエラー処理があると思われます。