Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在何处存储相互引用的对象列表?_Java_Mongodb_Gwt - Fatal编程技术网

Java 在何处存储相互引用的对象列表?

Java 在何处存储相互引用的对象列表?,java,mongodb,gwt,Java,Mongodb,Gwt,我正在用Java做web开发,后台是MongoDB。我有两个数据库对象,它们需要有彼此的列表。前- 客户对象包含-列表 MediaService对象包含-列表 1) 我是否应该删除其中一个列表,以便相同的信息不会存储在两个位置?e、 g.删除媒体服务器的客户列表。当我拉客户时,遍历所有媒体服务器,以确定客户被分配到哪些媒体服务器 2) 在MongoDB中有更好的地方存储这种类型的信息吗 谢谢 我建议您对一种列表使用,对另一种列表使用常规引用。或者,如果客户端和服务器记录的存在被“钩住”到其他引用

我正在用Java做web开发,后台是MongoDB。我有两个数据库对象,它们需要有彼此的列表。前-

客户对象包含-
列表

MediaService对象包含-
列表

1) 我是否应该删除其中一个列表,以便相同的信息不会存储在两个位置?e、 g.删除媒体服务器的客户列表。当我拉客户时,遍历所有媒体服务器,以确定客户被分配到哪些媒体服务器

2) 在MongoDB中有更好的地方存储这种类型的信息吗


谢谢

我建议您对一种列表使用,对另一种列表使用常规引用。或者,如果客户端和服务器记录的存在被“钩住”到其他引用对象上,那么这两种列表可能都应该包含软引用

弱引用也可能值得考虑。如果内存使用是一个问题。看看吧


PS-我的建议与您的对象源自MongoDB或任何其他类型的数据库这一事实无关。

在MongoDB中,在多个位置复制数据更为正常。如果您的列表不经常更改,那么存储这两个列表并没有什么真正的缺点——硬盘空间现在不像标准化盛行时那样昂贵

Mongo(以及任何应用程序开发)要始终牢记的一点是,找出您的访问模式是什么,并基于频繁模式创建模式。如果您定期阅读这些列表,但不经常更新它们,那么将这两个列表都放在数据库中就可以了

但是,如果您经常更改这两个列表,您可能会发现自己每次都在两个地方更新数据


但是,您还应该记住,如果您正在存储ID列表,那么当您想要获取此ID的完整对象/文档时,需要往返到服务器。因此,如果对于每个客户(例如),您总是需要所有
MediaServer
的所有信息,那么您需要为该客户列表中的每个
MediaServer
ID进行网络旅行。

您不能将引用存储为ID列表,并在需要时检索真实对象吗?这样,就不存在重复项,而且很容易检索引用。@Nicolamorel是的,我应该提到列表只是id(MongoDB中的dbRefs)。复制不是对象复制,而是关系复制-即客户和mediaserver之间的关系在两个列表中。