2011-04-25 10 views
6

MOngoDBによって生成されるobjectIdの使い方を改善する方法。私はエキスパートユーザーではありませんが、オブジェクトIDが長すぎてメインIDとして使用するとURLが醜いため、私は自分のオブジェクト(userid、postid)などのIDを別に作成しました。インデックス作成などに役立ちますので、私は_idを損なわないようにしています。より良いURLストラテジを知りたいので、もっと親切で簡単にキーを覚えることができます。私はキーが日付などの組み合わせであることを読んだので、この目的のためにコレクションの中でその部品のどれかをユニークに使うことができます。Mongodb:コレクション内の短い主キーとしてのオブジェクトID

おかげで、
BSR/

答えて

3

あなたは既存のIDを(は、既存のデータがセットから言う)がある場合、それはあなたが持っているものと_idを上書きすることは完全にOKです。

... keeo _idそのままそれがデフォルトで_idフィールドインデックスなど

MongoDBのインデックスを助けるよう。 _idフィールドに整数を入れ始めると、他のすべてのものと同じようにインデックスされます。

したがって、ほとんどのRDBMは「自動インクリメント」IDを提供します。これは小さなデータセットには適していますが、スケーラビリティの点では非常に劣ります。一度に20台のサーバーにデータを挿入しようとしている場合、どのように「自動インクリメント」をそのまま維持しますか?

通常の答えは、そうではないということです。代わりに、それらのIDのGUIDのようなものを使用することになります。 MongoDBの場合は、既にObjectIdが提供されています。 1だからここでの問題は、IDを「覚えやすい」はないということですキー

を覚えてフレンドリーかつ簡単に、よりURLとしてモンゴのObjectIDを使用できるように、私は任意のより良い戦略に疑問を抱いた

実際には「高度にスケーラブルなデータベース」と絡み合います。 10億の文書があるとき、IDは本当に「覚えやすい」わけではありません。

ここではトレードオフを行う必要があります。本当に大きなテーブルがある場合は、ObjectIdを使用することをお勧めします。テーブルが比較的小さく、頻繁に更新されない場合(「ルックアップ」テーブルのように)、独自の自動インクリメントを構築することができます。

あなたの選択は本当にあなた次第です。

0

あなたは_id 自分を上書きすることができます。自動生成されたオブジェクトIDを使用する義務はありません。自分の必要に応じてアプリ内の_idをオーバーライドする際の問題は何ですか?

+0

http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-SequenceNumbers – bsr

+0

伝統的なデータベースでは、主キーの単調増加シーケンス番号が使用されることがよくあります。 MongoDBでは、代わりにオブジェクトIDを使用することをお勧めします。オブジェクトIDは、シャーディングおよび配布とより相乗的です。 – bsr

+0

私はそれがいくつかの利点を奪うと思うし、また、インデックスとソートのためかもしれません – bsr

関連する問題