在哪里存储彼此引用的对象列表?

时间:2013-06-01 21:44:59

标签: java mongodb gwt

我正在使用MongoDB在后端进行Java开发。我有两个需要彼此列表的数据库对象。前 -

Customer对象包含 - List<MediaServer>

MediaService对象包含 - List<Customer>

1)我应该删除其中一个列表,以便相同的信息不会存储在两个地方吗?例如删除媒体服务器的客户列表。当我拉客户时,遍历所有媒体服务器以确定客户分配给哪些媒体服务器。

2)有没有更好的地方在MongoDB中存储这种信息?

谢谢!

2 个答案:

答案 0 :(得分:1)

在MongoDB中,将数据复制到多个位置更为正常。如果你的列表没有经常更改,那么存储两个列表并没有真正的缺点 - 硬盘空间现在并不像正常化时那样昂贵。

Mongo(以及任何应用程序开发)始终牢记的事情是弄清楚您的访问模式是什么,并根据频繁模式创建模式。如果您经常阅读这些列表但没有更新它们,那么在数据库中同时使用这两个列表就可以了。

但是,如果您经常更改这两个列表,您可能会发现每次都会在两个位置更新数据。

但是,您还应该记住,如果您要存储ID列表,那么当您想要获取此ID的完整对象/文档时,它将需要往返服务器。因此,如果对于每个客户(例如),您始终需要有关所有MediaServers的所有信息,则需要通过网络访问列表中的每个MediaServer ID。顾客。

答案 1 :(得分:0)

我建议您将 Soft References 用于一种列表,并为另一种列表使用常规参考。或者,如果客户端和服务器记录的存在被“挂钩”到其他引用对象上,则两种列表都应该包含软引用。

弱引用也可能值得考虑。如果内存使用是一个问题。请参阅What is the difference between a soft reference and a weak reference in Java?

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