java - 在 MongoDB 中高效处理用图像保存对象数据

标签 java spring mongodb morphia jongo

这里我想使用 Java 将一个对象保存到 MongoDB。我发现Morphia、Jongo、Springs都提供了实现它的框架。

为了将图像存储到 mongoDB,我找到了 GridFS

我的问题是,

1.我有一个对象,它包含数据和图像。我必须存储并对其中的字段进行大量数学计算。如果满足某些条件,我也想搜索特定图像..??

2.如果我使用 GridFs 和数据作为 BSon 数据将图像与对象存储图像分开,那么如何将此文档与图像链接..??

3.当我将数据与对象分离时,如果该数据本身存在 16 MB 意味着我必须如何处理这个..?为此,如果我选择 GridFs 意味着它正在转换为 block ,我想逐个字段进行分析..??

4.在特定时间我可以在将java中的对象写入mongodb之前找到它的大小..??

任何人都可以建议我解决这个问题..任何链接..或者任何想法带有 MongoDB 的 Java 框架将非常有效地处理所有这些实时场景..??

有关数据结构的更多信息:

我想存储复杂的业务对象。例如,如果我想存储一个教室对象,它包含许多学生,每个学生包含许多照片。教室中的对象有自己的数据。每个学生都有自己的数据和照片列表。我必须在这里有效地查询和分析数据。这可能是类明智的,也可能是学生明智的。

最佳答案

您可以将图像的元数据保存在普通文档中,其中还包括可以在其下找到二进制数据的 GridFS 文件名。

将元数据放在 GridFS 上意味着它将成为二进制数据 block 。然后,您将无法再通过其文件名来查询它。因此,当您的图像元数据也有超过 16MB 限制的风险时,这意味着您应该重新考虑您的数据库架构并将其分成多个文档。

当您想要在类和学生级别上进行数据分析时,您应该将每个学生放入自己的文档中,然后让教室引用学生或学生引用教室(或两者)。

我假设您的学生会在应用程序的生命周期中添加越来越多的图像。 MongoDB 不喜欢随着时间的推移而增长的文档,因为不断增长的对象意味着 MongoDB 需要不断地重新分配其存储空间,这会导致写入操作的性能 killer 。在这种情况下,您还应该为每个图像提供一个单独的文档,其中引用了它们所属的学生。但如果情况并非如此(图像列表在创建时创建一次,然后很少更改),您应该将图像作为数组嵌入到学生对象中。

无论您是否嵌入或引用图像,图像文档/对象都应仅包含元数据,而二进制图像数据本身应存储在 GridFS 上并通过图像文档中的文件名进行引用。

关于java - 在 MongoDB 中高效处理用图像保存对象数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19952176/

相关文章:

java - 随机颜色游戏、数组和输入

java - 无法读取 Artifact 描述符 Spring Boot

node.js - Mongodb 无法启动 - 原因 : errno:111 Connection refused

java - 如何使用java的selenium html单元驱动程序读取带有无限滚动条的页面?

java - 如何将带有html元素的jsonArray输出到JSP中

java - Jvm JIT 和 Hotspot - 有什么区别

java - 如何在 spring junit 测试中禁用日志记录(错误除外)?

hibernate - JPA2 中分离对象的问题

mongodb - Docker 注册层 mongo 失败

node.js - Mongoose 通过 id 更新数组中的项目