如果我有一个包含一百万个项目的主列表,另一个包含一百万个用户的列表,并且每个用户都有一个包含 50 个项目的自定义排序子集,那么建模的直接方法是:
items
[itemID] : { name : 'aaa', description : 'bbb', ... }
...
users
[userID1] : {
name : 'john',
token : 'xyz',
sortedItems : {
itemID1 : xx,
itemID2 : xx,
...
}
}
每个用户都会以任何需要的顺序获得他们自己的 sortedItems 集合。这样做的问题是您必须对每个项目有多个请求才能获取完整的项目数据。处理排序列表的更新后,您需要查询主列表以获取项目数据。没什么大不了的,但这是推荐的吗?
另一种策略是在主列表和子列表中复制项目数据(或删除主列表)。这样,当您需要时,所有数据就在那里。明显的问题是同步。如果项目的属性发生变化会发生什么?您必须遍历每个用户的 sortedItems 列表并更新每个实例——这是导致严重数据不一致的原因。
想法?