这里我想使用Java将一个对象保存到MongoDB。我发现Morphia,Jongo,Springs正在提供实现它的框架。
要将图像存储到mongoDB,我找到了GridFS
我的问题是,
1。我有一个对象,它包含数据和图像。我必须存储并且必须对其中的字段进行大量的数学计算。如果某些条件满足,我想搜索特定的图像。??
2。如果我使用GridFs和数据作为BSon数据将图像与对象存储图像分开,那么如何将该文档与图像链接起来.. ??
3。虽然我将数据与对象分离,但如果数据本身存在16 MB意味着我必须如何处理这个...?对于这一点,如果我去GridFs意味着它转换成块我想逐个字段分析.. ??
4。在特定时间我可以在java中找到对象的大小,然后将其写入mongodb .. ??
任何人都可以建议我来解决这个问题..任何想法......或者任何想法,使用MongoDB的java框架将非常有效地处理所有这些实时场景.. ??
有关数据结构的更多信息:
我想存储复杂的业务对象。例如,如果我想存储一个教室对象,它包含许多学生,每个学生包含许多照片。在课堂对象中有自己的数据。每个学生都有自己的数据和照片列表。我必须在这里有效地查询和分析数据。它可能是课堂明智或学生明智。
答案 0 :(得分:0)
您可以将图像的元数据保存在普通文档中,该文档还包含可以在其中找到二进制数据的GridFS文件名。
将元数据放在GridFS上意味着它将变成二进制数据。然后,您再也无法通过其文件名查询execpt了。因此,当您的图像元数据也存在超过16MB限制的风险时,这意味着您应该重新考虑数据库模式并将其分成多个文档。
当您想要在课堂和学生层面进行数据分析时,您应该将每个学生放在自己的文档中,然后让教室参考学生或学生参考教室(或两者)。
我假设您的学生将在应用程序的生命周期中添加越来越多的图像。 MongoDB不喜欢随时间增长的文档,因为增长的对象意味着MongoDB需要不断重新分配其存储空间,这是写操作的性能杀手。在这种情况下,您还应该为每个图像提供一个单独的文档,该文档引用他们所属的学生。但是当情况不是这样时(图像列表在创建时创建一次,然后很少更改),您应该将图像作为数组嵌入到学生对象中。
无论您是嵌入还是引用图像,图像文档/对象应仅包含元数据,而二进制图像数据本身应存储在GridFS上,并由图像文档中的文件名引用。