说我有文件夹,文档和评论。理解we don't want nested data,似乎有一些关于如何存储分层数据的选择:
一个。仅编码ref:
中逻辑路径的最后两步/users/$user_key
/folders/$folder_key
/folder_documents/$folder_key/$document_key
/document_comments/$document_key/$comment_key
/comment_likes/$comment_key/$user_key
B中。编码ref中的完整逻辑路径,但添加路径组件,以便客户端可以有效地仅获取它所需的内容:
/users/$user_key
/folders/info/$folder_key
/folders/documents/$folder_key/info/$document_key
/folders/documents/$folder_key/comments/$document_key/info/$comment_key
/folders/documents/$folder_key/comments/$document_key/likes/$comment_key/info/$user_key
℃。在ref中编码没有路径信息,并添加索引来获取数据子集,例如文档的所有注释。
/users/$user_key
/folders/$folder_key
/documents/$document_key
/comments/$comment_key
/likes/$comment_key/$user_key (still want 2 levels here, probably)
还有其他我没考虑过吗?
我目前正在做A,因为这就是上面链接中的建议...但我不太喜欢它,因为它需要知道父键才能获取对象。通常在客户端上我知道这一点,但是当添加服务器组件来处理通知等副作用时,事情会变得更加混乱。例如,如果某人喜欢评论并且我们想要发送通知,则服务器需要知道文档密钥以获取所喜欢的评论文本。解决方法似乎是复制数据或传递父键。
我认为B可能效果很好,但感觉有点巴洛克式。
我最近想到了C,并想知道性能的含义是什么。