使用MongoDB中的图像高效处理保存对象数据

时间:2013-11-13 11:11:01

标签: java spring mongodb morphia jongo

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

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

我的问题是,

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

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

3。虽然我将数据与对象分离,但如果数据本身存在16 MB意味着我必须如何处理这个...?对于这一点,如果我去GridFs意味着它转换成块我想逐个字段分析.. ??

4。在特定时间我可以在java中找到对象的大小,然后将其写入mongodb .. ??

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

当您想要在课堂和学生层面进行数据分析时,您应该将每个学生放在自己的文档中,然后让教室参考学生或学生参考教室(或两者)。

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

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