将图像直接存储在MongoDB而不是serveride文件夹

时间:2016-05-16 11:20:40

标签: mongodb

我认为在DB之外存储图像(或任何二进制数据 - pdf,电影等)(在我的情况下是MongoDB)并将它们放在公共服务器文件夹中至少可以更快(没有编码,解码和周围的事情)那)。

但是由于MondoDB中有这样的选项,我想知道在推荐这种方法时使用它和用例的好处。

2 个答案:

答案 0 :(得分:5)

  1. 复制:设置高可用性副本集非常容易。因此,即使一台机器发生故障,文件仍然可用。虽然这可以通过各种方式实现简单的文件系统,但这可能会消除性能优势(如果有的话:MongoDB有相当复杂的内部缓存)。此外,设置DRBD并确保一致性和可用性需要比MongoDB更多的知识和管理工作。此外,您还需要提供高级数据库。
  2. 可伸缩性:当您的文件超过单个节点的存储容量时,它会变得非常复杂和/或成本高昂。虽然从理论上讲你可以垂直缩放,但是有一个点可以让你获得降压并且水平缩放更有意义。但是,使用文件系统方法,您必须管理哪个文件位于哪个节点,如何以及何时进行平衡以及诸如此类。 MongoDB在分片环境中的GridFS可以自动执行此操作,而且 - 更重要的是 - 透明地执行此操作。你既不需要重新发明轮子也不必保持它。
  3. 按元数据查询:理论上,您可以通过数据库方法和文件系统链接来实现这一点,而GridFS则提供了插入任意元数据和查询的方法。再次,这可以节省您重新发明轮子。一个有趣的例子是使用GridFS很容易找到重复项:在GridFS中为每个文件自动计算哈希值。通过相当简单的聚合,您可以找到欺骗,然后相应地处理它们。

答案 1 :(得分:1)

当你有大量的二进制数据而你想利用分片时,可以使用gridfs将二进制数据存储在mongo db中。但从性能的角度来看,显然当你指出将图像存储在文件系统中是一种更好的方法。