如果您决定在Firestore中对数据进行非规范化/复制以优化读取,那么通常使用哪种模式(如果有)来跟踪重复的数据,以便可以正确地更新它们以避免数据不一致?
例如,如果我具有Pinterest板之类的功能user,平台上的任何功能都可以将我的功能固定post到自己的功能上board,那么您将如何跟踪许多位置的重复数据?
对于为数据可以存在的每个唯一位置创建一个类似关系的表,该表用于重建需要更新的路径。
例如,创建一个users_posts_boards集合,首先是集合userIDs与子集postIDs终于有另一个子集boardIDs用boardOwnerID。然后,您可以使用它们来为post(例如/users/[boardOwnerID]/boards/[boardID]/posts/[postID])重建重复数据的路径吗?
另外,如果posts可以额外共享,以groups和lists你会继续做users_posts_groups,并users_posts_lists集合和子集,以同样的方式跟踪复制的数据?
另外,您会否拥有posts_denormalization_tracker唯一的集合,postIDs其中包含post已复制到的位置的子集合?
{
postID: 'someID',
locations: ( <---- collection
"path/to/post/location1",
"path/to/post/location2",
...
)
}
Run Code Online (Sandbox Code Playgroud)
这意味着你将基本上需要有所有写入公司的FireStore通过云的功能实现,可以保持这个数据的轨道出于安全原因....除非公司的FireStore安全规则是足够强大,以允许添加操作的/posts_denormalization_tracker/[postID]/locations子集,而不允许读取或更新子集合或父postIDs集合。
我基本上是在寻找一种跟踪严重的非规范化数据的合理方法。
编辑:哦,是的,另一个很好的例子是将post作者的profile信息嵌入每个文档中post。想象一下,在整个平台上共享时,地狱试图保持所有最新状态,然后对其进行user更新profile。