在企业应用程序中存储媒体

时间:2016-05-08 14:58:59

标签: oracle mongodb amazon-s3 couchbase cloudinary

目前,我们使用Oracle在应用程序中存储图像。但我们希望在应用程序中看到很多图像/视频。我们希望远离oracle,以便能够轻松进行分片并实现高吞吐量。有什么建议吗?

有没有人为此尝试使用Couchbase / MongoDB等NoSQL数据库?它们是否为此目的进行了优化。

我看到Cloudinary使用Amazon S3实现此目的。但我正在寻找可以在我们的数据中心部署以保护隐私的内容。

4 个答案:

答案 0 :(得分:2)

从您的问题描述中,我无法看到任何表示赞成或反对NoSQL数据库。

在数据库中使用图片,声音或视频等媒体意味着只有一个大的未解释的二进制对象。未解释意味着:数据库可以存储和传递二进制文件,但不能对其属性进行分析,将其作为查询的基础等(为哪些数据库制作)。

关系数据库和非关系数据库都为这种BLOB提供数据类型。它们不同的特征是,例如,

  • 表格与树状结构化数据结构 - 不适用于BLOB,因为它将是一个属性,无论它有多大,

  • BLOB主题未解决的各种交易逻辑(CAP定理)。

因此,我担心您的架构需要在更广泛的范围内决定,而不仅仅是考虑您的媒体数据。您的数据结构是哪些?您的查询和更新方案是哪个?

答案 1 :(得分:2)

我看到人们对Couchbase所做的是将所有关于图像的元数据存储在Couchbase中的JSON文档中,但托管图像本身是针对文件优化的。你可以获得两个世界的好处。在你提到的这种用例中,根据我的经验,NoSQL数据库将比关系数据库好得多。

管理非常大的关系数据库和NoSQL数据库中的blob,IMO在大多数情况下都是一个糟糕的想法,无论数据库类型如何。所以我wrote up this blog post就是出现这样的情况。

答案 2 :(得分:0)

当您在数据中心寻找私有部署时,您可以考虑使用MongoDB或OpenStack Swift。

我见过有人使用MongoDB gridfs(https://docs.mongodb.com/manual/core/gridfs/)存储图像/视频。 使用MongoDB gridfs的优点:

  1. 您可以将MongoDB副本集用于容错/高可用性。
  2. 您可以访问大文件的一部分,而无需将整个文件加载到内存中。由于MongoDB将文件存储为小块(255KB),因此可以更快地流式传输视频文件。
  3. 您可以使用MongoDB分片进行缩放。
  4. Openstack Swift是一个高度可用,分布式,最终一致的对象/ blob存储,可与您在数据中心部署的Amazon S3相媲美。 许多公司也在使用OpenStack Swift,Rackspace的Cloud Files运行Swift。你也可以看看Swift: http://docs.openstack.org/developer/swift/

答案 3 :(得分:0)

S3对隐私的承诺非常强烈。您对S3有何疑虑?另外,您打算从哪个数据中心转移Oracle存储?