3

根据业务需求,我需要提供在 GridFS 上复制某些文件内容的可能性。当然,它可以在特定领域的层上完成。但在这种情况下,我可以看到一些开销:

  • 从 mongo-server 获取流
  • 在业务层分配内存
  • 放回 mongo-server

明显的解决方案是编写 mongo 端 JavaScript,它将在单个服务器的范围内执行复制。所以我的问题:

  • 在 JavaScript 上管理 GridFS 的 API 的描述在哪里?
  • 如果我的 GridFS 被分片,会有什么问题吗?
  • 如果我的 GridFS 被复制,是否有任何问题?

先感谢您

4

3 回答 3

3

您永远不需要在单个服务器中复制 GridFS 文件,因为 GridFS 文件是不可变的:您可以创建、读取或删除它们,但不能修改它们。所以没有理由复制。

从一台服务器复制到另一台服务器应该通过驱动程序完成;没有内置支持直接从 MongoDB 服务器复制到另一个服务器。

于 2012-06-27T21:54:36.573 回答
0

“普通” js 驱动程序不支持 GridFS。

你可以在 Node.js 中做到这一点。文档在这里:

http://mongodb.github.com/node-mongodb-native/markdown-docs/gridfs.html

对于副本集,可以在此处找到 Node.js 的文档:

http://mongodb.github.com/node-mongodb-native/markdown-docs/replicaset.html

对于某些文件的简单一次性复制,您可以在命令行上使用 mongofiles(使用临时文件 :( ) :

http://www.mongodb.org/display/DOCS/GridFS+Tools

mongofiles --host HOST get currentfilename
mongofiles --host HOST put -l currentfilename newfilename
rm currentfilename

然而,我不知道 mongofiles 与分片和副本的工作情况如何,但我希望它能够工作。

于 2012-06-27T20:21:02.547 回答
0
gridfs_session = gridfs.GridFS(mongo.session)
out_file = gridfs_session.get(file_id)
new_copy = gridfs_session.put(out_file, content_type=out_file.content_type)
于 2013-03-15T11:26:22.063 回答