2

我需要一个到 mongodb 的接口,通过它我可以将集合中的数据视为标准的类似 python 文件的对象。这些将是相当小的文件(最多以千字节为单位),特别是我需要能够附加到这些所谓的文件。(所以这个问题不是骗人的。

我已经阅读了 GridFS 文档,特别是它说我不应该将它用于小文件。我能找到的唯一其他实现都是 PHP。我并不是真的在寻求帮助编写代码的任何细节,但实现整个文件 api似乎是一项艰巨的任务。

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

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

4

2 回答 2

2

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

于 2012-06-21T20:10:36.950 回答
0

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

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

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

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

于 2012-06-22T16:13:18.330 回答