GridFS和克隆到另一台服务器

时间:2014-04-07 16:57:39

标签: mongodb gridfs

我有一个本地MongoDB数据库,我开始将一些文件放入GridFS用于缓存目的。我想知道的是:

我可以在另一台服务器上使用db.cloneCollection()来克隆我的fs。*集合吗?如果我这样做,该服务器上的GridFS系统是否正常工作?基本上我必须从另一台具有GridFS文件的机器“拉”数据,我不能直接将它们添加到生产盒中。

编辑:我能够访问目标服务器并使用mongo shell中的以下命令将GridFS系统从我们网络上的另一个mongo系统中拉出来。

use DBName
db.cloneCollection("otherserver:someport","fs.files")
db.cloneCollection("otherserver:someport","fs.chunks")

供将来参考。

1 个答案:

答案 0 :(得分:1)

简短的回答当然是你可以,它只是一个集合,根本就没什么特别的。较长的形式解释了GridFS实际上是什么。

这是手册页上的第一句话:

  

GridFS是用于存储和检索超过BSON文档大小限制为16MB的文件的规范。

GridFS不是“MongoDB”所做的事情,在服务器内部它基本上只是两个集合,一个用于参考信息,一个用于分解内容的“块”,因此没有单个文档超过16MB限制。但最重要的是“规范”这个词。

所以服务器本身根本没有魔力。存储引用数据和块的实现都是在“驱动程序”级别完成的,实际上您可以命名要使用的集合,而不是仅接受默认值。因此,在读取和写入数据时,通过拉动参考文档中包含的“块”或在将数据发送到服务器时创建新的“块”来完成工作的“驱动程序”。

另一个常见的误解是GridFS是在向MongoDB发送内容时处理“文件”的唯一方法。同样在第一句中,它实际上存在的方式是存储超过BSON文档16MB限制的内容。

只要总文档不超过16MB限制,MongoDB就可以直接在文档中存储二进制数据。因此,在大多数用例(网站上使用的小图像文件)中,数据可以更好地存储在普通文档中,从而避免了需要使用多个集合进行读写的开销。

所以没有内部服务器“魔术”。这些只是普通的集合,您可以查询,聚合,mapReduce甚至复制或克隆。