【问题标题】:server side Mongodb GridFS file copying服务器端 Mongodb GridFS 文件复制
【发布时间】:2012-06-29 02:01:26
【问题描述】:

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

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

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

  • 在 JavaScript 上管理 GridFS 的 API 说明在哪里?
  • 如果我的 GridFS 被分片,会有什么问题吗?
  • 如果我的 GridFS 被复制,会有什么问题吗?

提前谢谢你

【问题讨论】:

    标签: mongodb serverside-javascript gridfs


    【解决方案1】:

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

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

    【讨论】:

    • 不幸的是我需要复印。根据业务规则,每个文件都以 1:1 的方式与另一个集合中的某些条目相关联。从集合中删除记录必须导致删除文件。从这个需求增长我的关于复制的问题。
    【解决方案2】:

    “普通”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 与分片和副本的工作情况如何,但我希望它能够工作。

    【讨论】:

    • 你没有得到问题 - 我不需要 JS 驱动程序。驱动程序在消费者端工作(比如 Java 或 C++)。但是mongo端有一层是程序员可以放置脚本来管理数据库。很好的示例 mapReduce 例程 - 它们在 mongo 端执行。所以我正在寻找可以帮助我避免驱动程序开销的 API(请参阅我的先决条件)。这就是为什么 Node.JS 根本不是答案。
    【解决方案3】:
    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)
    

    【讨论】:

      猜你喜欢
      • 2019-11-11
      • 2016-07-19
      • 2014-02-26
      • 2018-05-15
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 2015-07-18
      相关资源
      最近更新 更多