结合基于关系和文档的“数据库”

时间:2009-07-18 19:35:49

标签: amazon-s3 couchdb blob cloud relational

我正在开发一个关于媒体存档,搜索,上传,分发以及处理BLOB的系统。

我目前正在尝试找出如何处理BLOB的最佳方法。对于具有大量内存和大磁盘的高端服务器,我的资源有限,但我可以访问大量中等性能的现成计算机并将它们连接到Internet。

因此,我决定将BLOB存储在一个中央关系数据库中,因为在最坏的情况下,我会在一台平均机器上拥有一个非常繁重的数据库实例。不是一种选择。

将BLOB直接存储在文件系统上并将其路径存储在数据库中也有点难看,并且必须手动管理分发,自己跟踪不同的副本。我甚至都不想接近这一点。

我查看了CouchDB,我非常喜欢他们的基于点对点的设计。这将允许我在互联网上运行分布式机器集群,意味着:

  • 低成本硬件
  • 开箱即用的冗余和故障转移分发
  • 轻量级REST接口

因此,如果我做对了,可以这样总结一下:像API一样的云和自我管理,分布式,复制系统

系统的其余部分执行普通Web应用程序所做的正常操作:处理会话,安全性,用户,搜索等。对于这部分,我仍然想要使用关系数据模型。 (CouchDB声称​​不是关系数据库的替代品。)

所以我会拥有所有标准数据,包括关系数据库中的BLOB的元数据,但是CouchDB中的BLOB本身。

你觉得这种方法有问题吗?我错过了重要的事吗?你能想到更好的解决方案吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

您可以尝试亚马逊的关系数据库SimpleDB和S3与SimpleJPA一起使用。 SimpleJPA是SimpleDB之上的JPA实现。 SimpleJPA使用SimpleDB作为关系结构,S3使用S3来存储BLOB。

答案 1 :(得分:2)

看一下MongoDB,它支持以高效的格式存储二进制数据并且速度非常快

答案 2 :(得分:0)

没问题。我做了一个与那个非常相似的设计。您可能还想看看HBase作为CouchDB的替代方案以及自适应对象模型架构模式,作为管理数据和元数据的一种方式。