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

Storing media in Enterprise Application

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

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

我看到 Cloudinary 为此目的使用 Amazon S3。但我正在寻找可以部署在我们的数据中心以解决隐私问题的东西。

从您的问题描述中,我看不到任何支持或反对 NoSQL 数据库的迹象。

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

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

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

  • BLOB 主题未涉及的不同类型的事务逻辑(CAP 定理)。

因此,恐怕您的架构需要根据更广泛的范围来决定,而不仅仅是考虑您的媒体数据。你的数据结构是什么?您的查询和更新场景是什么?

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

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

如果您正在寻找数据中心的私有部署,您可以考虑 MongoDB 或 OpenStack Swift。

我看到有人使用 MongoDB gridfs (https://docs.mongodb.com/manual/core/gridfs/) 来存储 images/videos。 使用 MongoDB gridfs 的优点:

  1. 您可以使用 MongoDB 副本集故障 tolerance/high 可用性。
  2. 您可以访问大文件的一部分,而无需将整个文件加载到内存中。由于 MongoDB 将文件存储为小块 (255KB),因此可以更快地传输视频文件。
  3. 您可以使用 MongoDB 分片进行扩展。

Openstack Swift 是一个高度可用、分布式、最终一致的 object/blob 存储,可与 Amazon S3 相媲美,您可以将其部署在您的数据中心。 OpenStack Swift 也被许多公司使用,Rackspace 的 Cloud Files 运行 Swift。您也可以看看 Swift : http://docs.openstack.org/developer/swift/

S3 非常重视隐私。您对 S3 有何担忧?另外,您打算从哪个数据中心迁移出 Oracle 存储?