2

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

1)gridFS通过生成的_id自动索引文件。但大多数时候我都是按文件名获取文件,所以我应该自己在“文件名”上创建索引吗?

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

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

4

3 回答 3

2

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

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

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

于 2012-01-24T06:45:53.267 回答
2

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

2) 是的。

3)mongodb中的b-tree索引不使用哈希。较大的字符串将在索引中占用更多空间,从而占用更多 RAM,但我认为性能不会受到太大影响(除非您将使用更多 RAM 视为性能受到影响)。mongodb 的一个好的经验法则是您的索引(和您的“工作集”)应该适合 RAM。如果您可以修改您的应用程序以查询 _id 而不是文件名,您就不必担心该索引的空间。

于 2012-01-24T17:06:59.730 回答
0

GridFS 在_id(显然)上有一个默认索引,在 and 上有一个复合filename索引uploadDate

于 2013-02-23T10:10:41.270 回答