1

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

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

我的问题是,

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

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

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

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

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

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

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

4

1 回答 1

0

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

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

当您想在课堂和学生级别上进行数据分析时,您应该将每个学生放在自己的文档中,然后让课堂参考学生或学生参考课堂(或两者兼而有之)。

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

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

于 2013-11-13T12:27:22.283 回答