gpt4 book ai didi

java - NoSQL MongoDB 与 Cassandra

转载 作者:行者123 更新时间:2023-11-29 03:20:49 26 4
gpt4 key购买 nike

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

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

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

我已将 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 文件夹中。请注意文件的大小:

enter image description here

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

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

谢谢你的建议

最佳答案

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

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

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

关于java - NoSQL MongoDB 与 Cassandra,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23713038/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com