1

IDフィールドではなく、「外部キー」(userID)でコレクションをシャーディングしたいと思います。userIDとidの組み合わせが一意である必要があるだけです。しかし、それがmongodbで問題ないかどうかはわかりません。

警告_idフィールドでシャーディングしていないシャーディングされたコレクションでは、_idフィールドの一意性を確認する必要があります。_idが常に一意であることを確認する最良の方法は、ObjectIdまたは別のユニバーサル一意識別子(UUID)を使用することです。

これは、http://docs.mongodb.org/manual/tutorial/enforce-unique-keys-for-sharded-collections/#enforce-unique-keys-for-sharded-collectionsから取得されます。

_idが一意であることを確認する必要がありますか?または、常にuserIDと_idの両方でクエリを実行すれば十分ですか?

4

1 に答える 1

5

手動で置き換える場合を除き、自動生成された_idはUUIDであり、ドキュメントによると、「4バイトのタイムスタンプ(エポックからの秒数)、3バイトのマシンID、2バイトのプロセスID、および3バイトカウンタ」。

ご覧のとおり、一意のマシンIDはUUIDの一部です。これにより、シャード内の2台のマシンが独立して同じUUIDを作成することはありません(同じマシンIDを持っている場合を除きます。その可能性は1:16777215であり、発生した場合は簡単に確認できます)。理論的にUUIDが重複する可能性がある唯一の状況は、1つのプロセスが1秒間に2 ^ 24(1600万を超える)を超えるUUIDを作成する場合です。

tl; dr:重複するUUIDについて心配する必要はありません。ドキュメントに記載されているように、「割り当てられたときに一意になる可能性がかなり高くなるように設計されています」。

于 2012-11-11T18:58:52.100 に答える