我正在研究gridFS,我有几个问题。
1)gridFS通过生成的_id自动索引文件。但是大部分时间我都是按文件名获取文件,所以我应该自己创建'filename'的索引吗?
2)gridFS没有文件夹,只有文件名,但我可以使用带有斜杠'/images/avatars/35.jpg'的文件名来模仿文件夹,对吗?
3)如果我在“文件名”上建立索引 - 使用短文件名在性能方面是否更好?我的意思是 - 如果我使用用户的_id,它是24个符号长+后缀,例如"/images/avatar_4f1d36b58e42ba3836ed178e_t.jpg"
,那么在这么长的字段上索引会不会减慢我的系统速度?使用短用户登录而不是_id会更好(更快)吗?
答案 0 :(得分:2)
1)如果文件名没有编入索引,我会感到非常惊讶。它在整个API中使用,我假设它已编入索引。
2)是的,你可以,但没有隐含目录的真实概念。列出文件/目录有点复杂。换句话说,它只是一个标签。
3)索引使用哈希值或固定长度字符串,因此长键与长键一样容易索引。
答案 1 :(得分:2)
1)规范不要求对文件名进行索引。您可能需要检查驱动程序中的代码,或者只是自己制作索引。您应该考虑的一件事是文件名不必是唯一的。您可能会重新考虑您的设计,并在_id上查询。
2)是的。
3)mongodb中的b树索引不使用哈希值。一个更大的字符串将在索引中占用更多空间,从而占用更多内存,但我认为性能不会受到太大影响(除非您计算使用更多RAM作为性能影响)。 mongodb的一个好的经验法则是你的索引(以及你的“工作集”)应该适合RAM。如果您可以重新编写应用程序以查询_id而不是文件名,则不必担心此索引的空间。
答案 2 :(得分:0)
GridFS在_id
上有一个默认索引(显然),在filename
和uploadDate
上有一个复合索引。