MongoDB gridFS - 文件名长度,索引,性能

时间:2012-01-24 06:40:20

标签: performance mongodb indexing gridfs

我正在研究gridFS,我有几个问题。

1)gridFS通过生成的_id自动索引文件。但是大部分时间我都是按文件名获取文件,所以我应该自己创建'filename'的索引吗?

2)gridFS没有文件夹,只有文件名,但我可以使用带有斜杠'/images/avatars/35.jpg'的文件名来模仿文件夹,对吗?

3)如果我在“文件名”上建立索引 - 使用短文件名在性能方面是否更好?我的意思是 - 如果我使用用户的_id,它是24个符号长+后缀,例如"/images/avatar_4f1d36b58e42ba3836ed178e_t.jpg",那么在这么长的字段上索引会不会减慢我的系统速度?使用短用户登录而不是_id会更好(更快)吗?

3 个答案:

答案 0 :(得分:2)

1)如果文件名没有编入索引,我会感到非常惊讶。它在整个API中使用,我假设它已编入索引。

2)是的,你可以,但没有隐含目录的真实概念。列出文件/目录有点复杂。换句话说,它只是一个标签。

3)索引使用哈希值或固定长度字符串,因此长键与长键一样容易索引。

答案 1 :(得分:2)

1)规范不要求对文件名进行索引。您可能需要检查驱动程序中的代码,或者只是自己制作索引。您应该考虑的一件事是文件名不必是唯一的。您可能会重新考虑您的设计,并在_id上查询。

2)是的。

3)mongodb中的b树索引不使用哈希值。一个更大的字符串将在索引中占用更多空间,从而占用更多内存,但我认为性能不会受到太大影响(除非您计算使用更多RAM作为性能影响)。 mongodb的一个好的经验法则是你的索引(以及你的“工作集”)应该适合RAM。如果您可以重新编写应用程序以查询_id而不是文件名,则不必担心此索引的空间。

答案 2 :(得分:0)

GridFS在_id上有一个默认索引(显然),在filenameuploadDate上有一个复合索引。