我应该将哪个数据库用于具有大blob和数据冗余的非均匀对象?

时间:2013-03-25 16:15:24

标签: database database-design nosql

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

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

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

1 个答案:

答案 0 :(得分: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现在有更多的动力。