2012-01-24 4 views
2

私はgridFSを勉強していますが、いくつか質問があります。MongoDB gridFS - ファイル名の長さ、インデックス、パフォーマンス

1)gridFSは、生成された_idによってファイルを自動的に索引付けします。しかし、ほとんどの場合、ファイル名でファイルを取得するので、自分で「ファイル名」のインデックスを作成する必要がありますか?

2)gridFSにはファイル名だけのフォルダはありませんが、ファイル名にスラッシュ '/images/avatars/35.jpg'を使用してフォルダを模倣することはできますか?

3) "filename"でインデックスを作成している場合、短いファイル名を使用する方がパフォーマンス面で優れていますか?私は - 例えば、"/images/avatar_4f1d36b58e42ba3836ed178e_t.jpg"のように、24個の記号+接尾辞であるユーザーの_idを使用すると、そのような長いフィールドでインデックスを作成しないとシステムが遅くなるのですか? _idの代わりに短いユーザーのログインを使用するほうが早いでしょうか?

答えて

2

1)ファイル名がインデックスに登録されていないと非常に驚いています。これはAPI全体で使用されており、インデックスされていると仮定しています。

2)はい、可能ですが、暗黙的にディレクトリの概念はありません。リストファイル/ディレクトリはもう少し複雑です。言い換えれば、それは単なるラベルです。

3)インデックスはハッシュまたは固定長の文字列を使用するため、長いキーは長いものと同じように簡単にインデックスできます。

+0

ありがとうございます。 – oyatek

2

1)仕様では、ファイル名のインデックスを作成する必要はありません。ドライバのコードをチェックしたり、自分でインデックスを作成したりすることをお勧めします。考慮すべき点の1つは、ファイル名がユニークである必要はないということです。あなたはデザインを再考し、代わりに_idを照会するかもしれません。

2)はい。

3)mongodbのb-treeインデックスは、ハッシュを使用しません。文字列が大きいほど索引のスペースが多くなり、RAMが増えますが、パフォーマンスが低下するとは思われません。 mongodbの良い経験則は、あなたのインデックス(およびあなたの "作業セット")がRAMに収まるということです。ファイル名の代わりに_idで照会するようにアプリケーションを修正することができれば、この索引のスペースについて心配する必要はありません。

+0

ありがとうございました!私はすでにファイル名がgridFSで一意ではなく、それでも私を混乱させることがわかっています。ユーザーのアバターを上書きしたい場合は、まず前のバージョンを検索して削除する必要があります。それ以外の場合は、DBで2つのアバターを取得します。時にはそれは便利かもしれません。 – oyatek

+0

また、「インデックスエントリには最大サイズ(値の合計)の制限があります。現在は約800バイトです。このサイズより大きな値(インデックス用語のキーサイズ)を持つドキュメントは索引付けできません。 " - http://www.mongodb.org/display/DOCS/Indexes#Indexes-AdditionalNotesonIndexes – oyatek

+0

うん。彼らはすぐにその時点で800バイトの制限を修正しようとしています。私はしばらく前、私自身、サブ文書のインデックスを作成しようとしました。あなたのファイル名のシナリオでは800バイトに近づかないようにしてください。そうすれば、そのフィールドのインデックスでOKです。 –

0

GridFSのデフォルトインデックスは_id(明らかに)で、複合インデックスはfilenameuploadDateです。

関連する問題