mongodb - 这是将图像直接存储在 MongoDB 而不是服务器端文件夹的优点

标签 mongodb

我想在数据库(在我的例子中是 MongoDB)之外存储图像(或任何二进制数据——pdf、电影等)并将它们放在公共(public)服务器文件夹中至少可以更快(没有编码、解码和周围的东西那)。

但由于在 MondoDB 中有这样的选项,我想知道使用它的优势,以及在推荐该方法时的用例。

最佳答案

  1. 复制:设置高可用性副本集非常容易。因此,即使一台机器出现故障,文件仍然可用。虽然对于一个简单的文件系统也可以通过各种方式实现这一点,但这样做的开销可能会消除性能优势(如果有的话:MongoDB 有非常复杂的内部缓存正在进行)。此外,与 MongoDB 相比,设置 DRBD 并确保一致性和可用性需要更多的知识和管理工作。此外,您还需要让您的数据库具有高可用性。
  2. 可扩展性:当您的文件超过单个节点的存储容量时,它会变得非常复杂和/或成本高昂。虽然理论上您可以垂直缩放,但在某个特定点上,您获得的 yield 会减少,而水平缩放更有意义。但是,使用文件系统方法,您必须管理哪个文件位于哪个节点、如何以及何时进行平衡等等。分片环境中的 MongoDB 的 GridFS 会自动为你做这件事——更重要的是——透明的。您既不必重新发明轮子,也不必维护它。
  3. 按元数据查询:虽然理论上您可以通过使用数据库和文件系统链接的方法来做到这一点,但 GridFS 提供了插入任意元数据并通过它进行查询的方法。同样,这可以节省您重新发明轮子的时间。一个有趣的例子是,使用 GridFS 查找重复项非常容易:GridFS 中的每个文件都会自动计算哈希和。通过相当简单的聚合,您可以找到受骗者,然后相应地处理它们。

关于mongodb - 这是将图像直接存储在 MongoDB 而不是服务器端文件夹的优点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37252705/

相关文章:

javascript - meteor :仅返回集合内嵌套数组中的单个对象

node.js - 使用 Redis 缓存 mongoose 对象

javascript - Mongoose:确保数组永远不会超过一定数量的项目

mongodb - 使用 Rust Mongo 驱动程序原型(prototype)时,如何将 chrono::DateTime 字段序列化为 ISODate?

node.js - MongoDB/Mongoose 有很多关系

mongodb - 无法到达设置 mongo 配置服务器的任何节点

mongodb - mongodb shell 没有启动,data/db 不存在

node.js - 使用 NodeJs 向 Mongo 数据库多次插入相同的记录

node.js - 什么是最佳实践 "joining"mongoose/mongodb 中没有填充的一堆值

mongodb - 庞大的 Mongo 数据集。我需要多少 RAM 以及如何避免因支付托管费用而被毁掉?