【问题标题】:How should I append to small file-like objects in mongodb?我应该如何附加到 mongodb 中的类似文件的小对象?
【发布时间】:2012-06-21 20:08:14
【问题描述】:

我需要一个到 mongodb 的接口,通过它我可以将集合中的数据视为标准的 Python 类文件对象。这些将是相当小的文件(最多以千字节为单位),特别是我需要能够追加到这些所谓的文件。 (So this question is not a dupe.)

我已阅读 GridFS 文档,尤其是 it says I should not use it for small files。我能找到的唯一其他实现都是 PHP。我并不是真的在寻求帮助编写代码的任何细节,但implementing the entire file api 似乎是一项艰巨的任务。

  1. 是否有任何快捷方式或工具可以更轻松地在 python 2 中实现类文件对象?
  2. 我是否错过了有人已经这样做了?

(我为什么要这样做?因为我在最后一小时收到了一项要求,要求我们在无法透明地处理文件的多节点云环境中部署一个预先存在的应用程序,该应用程序生成 csv 文件。)

【问题讨论】:

    标签: python file mongodb


    【解决方案1】:

    对于问题 1:查看io 模块,尤其是IOBase。它以一组相当合理的方法实现了所有类似文件。

    【讨论】:

    • IOBase 非常有用,尽管它的 readline(s) 方法显然需要 read() 来输出字节,这意味着您必须手动处理字符编码(这不好玩,尤其是在 Python 中)。跨度>
    【解决方案2】:

    您可以将数据作为二进制或文本存储在 MongoDB 集合中。但是你会遇到两个问题:

    1. 您必须实现与其他代码期望实现的一样多的 Python 文件协议。

    2. 当您附加到“文件”时,文档会在 MongoDB 中增长,并且可能需要在磁盘上移动到有足够空间容纳更大文档的位置。移动文档很昂贵。

    使用 GridFS——文档不鼓励您使用 static 文件,但对于您的情况,它是完美的,因为 PyMongo 已经为您完成了为 MongoDB 数据实现 Python 文件协议的工作。要附加到 GridFS 文件,您必须阅读它,使用附加数据保存新版本,然后删除以前的版本。但这并不比移动一个增长的文档贵多少。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      • 2021-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      相关资源
      最近更新 更多