2011-11-23 17 views
1

http://code.flickr.com/blog/page/4/MongoDBの疑似主キー - 悪い考えですか?

このブログ記事は、Flickrのでは開発者からのものであり、MySQLを使用してシャードデータベース環境での写真のGUIDを生成し、その簡略化されたアプローチを概説します。

私はMongoDBを埋め込みドキュメントに格納されているアイテムと同様の要件を持つデータストア用のアプリケーションに取り組んでいます。基本的には、コレクション内のドキュメントはアイテムのリストを表し、その後個々のアイテムはの中にあります。それぞれのドキュメントには、ルックアップの目的で何らかの識別子も必要です。アイテムではないリストキーは実際にはメタデータであり、独自のコレクションを持つ必要はないので、別のコレクションにアイテムを入れないでください。理想的にはそれは1つの文書でなければなりません。

私は、この問題を解決するためにブログ投稿に詳述されたアプローチを実装できると考えていました。これらのエントリのGUIDを生成し、最後に使用した値を保存するエンドポイントです。問題は、このアプローチがmongoのデータストアをシャーディングするときに問題を引き起こすかどうかはわかりません。 Mongoをいくつかのマシンに配布した経験はありません。データを保存して_idキーを適切に設定すると、アプリケーション層にこのエンドポイントをチェックさせることができますが、データセットに対するクエリにどのように影響するか分かりません。

この種のGUIDシステムを設定するのは間違いですか?私はそれが一般的にNoSQLの原則のいくつかに逆行することを認識していますが、文書が埋め込まれているので、そこには何がありますか?

+0

MongoDBで提供されている 'ObjectId'機能を単に使用してみましたか? http://www.mongodb.org/display/DOCS/Object+IDsこれらは、自分のフィールドでも、コレクション内のドキュメントのIDフィールドでも使用できます。 –

+0

@Hightechriderこれは本質的に私が不確かなものです.OptimIdが唯一のプライマリIDであり、ドキュメント内に一度しか表示されないデフォルトを中断すると、行の書き込み/読み取りをシャットアウトしてしまうことになります。私が読んだほうが、ドキュメントからは問題ではないようです... – DeaconDesperado

+0

このように使用するのは問題ありません。 –

答えて

0

私はObjectIDが行く方法だと思います。それらはGUID/UUIDよりもはるかにコンパクトに格納され、索引付けの利点を持つ大まかに増加する順序を維持します。また、この記事で説明しているように、チケットサーバーを必要とせずにクライアントサイドで生成するように設計されています。唯一の真の欠点は、ソリューションが12バイトを使用し、int64が8を使用することです(GUID/UUIDはバイナリで16、16ビットで32バイトのオーバヘッドを使用します)。もう1つの潜在的な欠点(ほとんどの場合、メリットがあると思われます)は、ObjectIdが公開識別子に使用されている場合、作成時間がObjectIdにエンコードされるため、他のユーザーが署名したあなたのサービスのために。

関連する問題