【问题标题】:NoSQL MongoDB vs CassandraNoSQL MongoDB 与 Cassandra
【发布时间】:2016-08-14 10:21:06
【问题描述】:

我正在开发一个云平台,我想存储文档和视频文件。

第一个概念是将 MongoDB 用于简单文档和大型视频文件 cassandra。但是我已经读过,如果文件大于 64 MB,我会遇到 cassandra 的问题。

另一方面,mongoDB 有允许文件大于 100MB 的 GridFS。

我已将 mongoDB 与 Java 连接起来。开始时数据库为 80MB,当我将 GridFS 的 1.80GB 视频文件插入 MongoDB 时,我希望数据库能够捕获 1.9GB 磁盘空间,但它捕获了 6GB .... 文件大小的 3 倍。

这是我使用的代码:

MongoClient mongo = new MongoClient("localhost", 27017);
DB db = mongo.getDB("testdb");
DBCollection table = db.getCollection("user");

String newFileName = "Video";

File videoFile = new File("e:\\Magnificent.mp4");
GridFS gfsText = new GridFS(db, "video");
GridFSInputFile gfsFile = gfsText.createFile(videoFile);
gfsFile.setFilename(newFileName);
gfsFile.save();

另外,在运行应用程序并将文件保存到 mongodb 后,以下文件将创建到 DB 文件夹中。请注意文件的大小:

第一个问题是为什么它会占用这么多磁盘空间??

第二个问题:有没有机会使用 cassandra 来存储 500MB-1GB 的视频文件???

感谢您的建议

【问题讨论】:

标签: java mongodb cassandra mongodb-java


【解决方案1】:

广告 1: 这是因为文件被分成块,创建了 2 个集合,一个用于二进制部分(一个块),一个用于元数据。您可以在 MongoDB 文档 about GridFSabout how the storage is actually maintained 上阅读更多内容。

广告 2: 是的,有一种方法可以在 Cassandra 中存储超过 64MB 的文件。您可以轻松地构建一种机制来将文件拆分为块并将它们保存为单独的条目。这将以与 MongoDB GridFS 实现完全相同的方式工作。而且您不会是第一个 - DataStax,一家声称“落后于”Cassandra 的公司,已经在他们的商业堆栈中实现了这一点,称为 Enterprise。您可以阅读有关Cassandra File System Design here 和一些documentation here 的信息。 总体而言,如果您决定构建自己的解决方案,它应该相当简单直接 - 您只需拆分文件并将内容放入多个记录中即可。

另一方面,哲学问题是“为什么”。为什么要使用数据库系统来存储这么大的文件?有很多更好的方法来处理这个问题,包括类似于 Amazon S3 或任何其他实施的分布式和复制文件/存储系统,这将使您的生活在许多层面上变得如此轻松。考虑一下,作为 BLOB 的良好替代品......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2013-07-29
    • 2016-09-06
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    相关资源
    最近更新 更多