1

我正在研究存储迄今为止我一直存储在数据库中的单个文件中的数据。我正在寻找一些建议,我应该使用哪个数据库或数据库类型。以下是要求列表:

  • 我需要能够以分层/面向对象的方式存储数据,即有像 car.chassis.color = red 这样的键,键上有任意深度。
  • 这些对象的结构不是同质的,有些对象具有其他对象没有的字段。
  • 我希望能够对键执行查询,但我不需要进行连接的能力,即不需要外键。
  • 其中一些值是大型二进制 blob(大约 10-100MB,从不大于 1GB),并且存在大量冗余,因此内置压缩会很好。
  • 寻找开源解决方案。
  • 我想从 python 中使用它。

除了最基本的 MySQL 数据库之外,我对任何东西都不熟悉,所以任何指针都将受到高度赞赏。

4

1 回答 1

1

听起来像文档数据库会满足您的需求。我会研究的两个是 MongoDB 和 CouchDB(可能也是 Couchbase)。

Couch 和 Mongo 都允许将数据存储为 JSON,这可以满足您对具有任意深度键的数据的要求。

这两个数据库还允许您插入异构文档。Mongo 特别有一个名为 $exists 的运算符来检查给定文档中是否存在字段。

我会在 Couch 上向 Mongo 点头以进行临时查询。我只是觉得更容易。

两者都不能很好地支持连接。两者都可以使用 map/reduce 功能,但否则假设您不会进行连接。

两者都支持添加文件。Mongo 使用 gridfs ( http://docs.mongodb.org/manual/applications/gridfs/ ) 而 Couch 使用附件 ( http://wiki.apache.org/couchdb/HTTP_Document_API#Attachments )。

Mongo 有一个 Python 驱动程序(http://docs.mongodb.org/ecosystem/drivers/python/),Couch通过 HTTP 工作,所以你只需要 Python 中的 curl 之类的东西。

CouchDB 最近受到了很多关注,但 Mongo 现在更有动力。

于 2013-03-26T02:54:32.150 回答