Java 在何处存储相互引用的对象列表?
我正在用Java做web开发,后台是MongoDB。我有两个数据库对象,它们需要有彼此的列表。前- 客户对象包含-Java 在何处存储相互引用的对象列表?,java,mongodb,gwt,Java,Mongodb,Gwt,我正在用Java做web开发,后台是MongoDB。我有两个数据库对象,它们需要有彼此的列表。前- 客户对象包含-列表 MediaService对象包含-列表 1) 我是否应该删除其中一个列表,以便相同的信息不会存储在两个位置?e、 g.删除媒体服务器的客户列表。当我拉客户时,遍历所有媒体服务器,以确定客户被分配到哪些媒体服务器 2) 在MongoDB中有更好的地方存储这种类型的信息吗 谢谢 我建议您对一种列表使用,对另一种列表使用常规引用。或者,如果客户端和服务器记录的存在被“钩住”到其他引用
列表
MediaService对象包含-列表
1) 我是否应该删除其中一个列表,以便相同的信息不会存储在两个位置?e、 g.删除媒体服务器的客户列表。当我拉客户时,遍历所有媒体服务器,以确定客户被分配到哪些媒体服务器
2) 在MongoDB中有更好的地方存储这种类型的信息吗
谢谢 我建议您对一种列表使用,对另一种列表使用常规引用。或者,如果客户端和服务器记录的存在被“钩住”到其他引用对象上,那么这两种列表可能都应该包含软引用 弱引用也可能值得考虑。如果内存使用是一个问题。看看吧
PS-我的建议与您的对象源自MongoDB或任何其他类型的数据库这一事实无关。在MongoDB中,在多个位置复制数据更为正常。如果您的列表不经常更改,那么存储这两个列表并没有什么真正的缺点——硬盘空间现在不像标准化盛行时那样昂贵 Mongo(以及任何应用程序开发)要始终牢记的一点是,找出您的访问模式是什么,并基于频繁模式创建模式。如果您定期阅读这些列表,但不经常更新它们,那么将这两个列表都放在数据库中就可以了 但是,如果您经常更改这两个列表,您可能会发现自己每次都在两个地方更新数据
但是,您还应该记住,如果您正在存储ID列表,那么当您想要获取此ID的完整对象/文档时,需要往返到服务器。因此,如果对于每个客户(例如),您总是需要所有
MediaServer
的所有信息,那么您需要为该客户列表中的每个MediaServer
ID进行网络旅行。您不能将引用存储为ID列表,并在需要时检索真实对象吗?这样,就不存在重复项,而且很容易检索引用。@Nicolamorel是的,我应该提到列表只是id(MongoDB中的dbRefs)。复制不是对象复制,而是关系复制-即客户和mediaserver之间的关系在两个列表中。