我在后端使用 MongoDB 在 Java 中进行 Web 开发。我有两个需要彼此列出的数据库对象。前任-
Customer 对象包含 -List<MediaServer>
MediaService 对象包含 -List<Customer>
1) 我应该删除其中一个列表,以便相同的信息不会存储在两个地方吗?例如,删除媒体服务器的客户列表。当我拉客户时,遍历所有媒体服务器以确定客户被分配到哪些媒体服务器。
2) 有没有更好的地方在 MongoDB 中存储这种风格的信息?
谢谢!
在 MongoDB 中,将数据复制到多个位置更为正常。如果您的列表不经常更改,那么存储这两个列表并没有真正的缺点 - 如今硬盘空间并不昂贵,就像标准化风靡一时一样。
使用 Mongo(以及任何应用程序开发)始终牢记的事情是弄清楚您的访问模式是什么,并根据频繁的模式创建您的模式。如果您定期阅读这些列表,但不经常更新它们,那么将两个列表都放在数据库中就可以了。
但是,如果您经常更改这两个列表,您可能会发现自己每次都在两个位置更新数据。
但是,您还应该记住,如果您正在存储 ID 列表,当您想要获取此 ID 的完整对象/文档时,将需要往返服务器。因此,如果对于每个客户(例如),您总是需要关于 all 的所有信息MediaServers
,那么您将需要通过网络为该客户列表中的每个MediaServer
ID 进行一次旅行。
我建议您对一种列表使用软引用,对另一种使用常规引用。或者,如果客户端和服务器记录的存在被“挂钩”到其他引用对象上,那么这两种列表都应该包含软引用。
弱引用也可能值得考虑。如果内存使用是一个问题。请参阅Java 中的软引用和弱引用有什么区别?关于那个。
PS - 我的建议与您的对象源自 MongoDB 或任何其他类型的数据库这一事实无关。