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

原文 标签 java spring mongodb morphia jongo

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

要将图像存储到mongoDB,我发现了GridFS

我的问题是

1.我有一个对象,它既包含数据又包含图像。我必须存储并且必须对其中的字段进行很多数学计算。我还想搜索某些特定条件的图像。

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

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

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

有人可以建议我克服这个问题吗?任何链接。或任何想法,哪一个带有MongoDB的java框架都将非常有效地处理所有这种实时情况。

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

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

最佳答案

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

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

当您要在教室和学生两级进行数据分析时,应将每个学生放在一个单独的文档中,然后让教室参考学生或学生参考教室(或两者)。

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

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

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

相关文章:

java - 不能通过单个连接执行多个准备语句(数据源)

java - 如何仅将特定数据库用于托管操作

javascript - 如何将数据从 CSV 文件导入服务器端的 Meteor 集合

java - 方法重载和重载

java - JSF 中表单、数据表等的最佳实践

java - 从grails BuildConfig中排除Maven依赖项

java - Sitemesh和Freemarker与Jersey资源

java - 如何使用Spring/JPA/Hibernate在Java(Web)应用程序中填充初始数据

node.js - 如何从使用gridFS存储的mongodb中读取mp3文件?

mongodb - 为什么Mongoose无法在MongoDB Atlas中创建索引?