2012-06-27 57 views
2

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

  • 取流
  • 在业务层
  • 阅读
  • 地方回到蒙戈服务器分配内存

明显的解决方案是编写将在单个服务器绑定中执行复制的mongo-side JavaScript。 所以我的问题:

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

预先感谢您

回答

0

的 '正常' 的JS驱动程序不支持GridFS的。

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

对于副本集的文档可以在这里找到适合的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如何与分片和复制品一起工作,但我期望它能够正常工作。

+0

你没有得到问题 - 我不需要JS驱动程序。驱动程序适用于消费者(称为Java或C++)。但是在mongo端有层可以让程序员放置脚本来管理数据库。很好的示例mapReduce例程 - 它们在mongo端执行。所以我正在寻找可以帮助我避免驱动开销的API(请参阅我的预先要求)。这就是为什么Node.JS根本就不是答案。 – Dewfy

2

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

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

+0

不幸的是我需要复制。根据业务规则,每个文件都与1:1关联,并与另一个集合中的某个条目关联。从收藏中删除记录必须删除文件。从这个需求增长我关于复制的问题。 – Dewfy

+0

这可以在不使用引用计数进行复制的情况下完成。 –

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)