我正在尝试在项目中实现一个Reddit/HackerNews风格的评论树,并尝试使用Firestore作为数据库解决方案。然而,通过阅读文档,我对正确的设计并不确定。在SQL数据库中,我会使用数字键,例如:
0
1.0
1.1
1.1.1
0.0
要表示我的树形结构。但是像那样的数字键似乎是Firebase反模式。另一种方式是在JSON中使用实际树来表示文章,例如:
{
uid: 'A0000',
content: 'foo',
children: [
{uid:..., content:..., children: []}]
}
据说在Firestore中,深度树是不好的。我理解深度树之所以不好是因为您必须获取整个树,但在我的情况下,我不确定这是否是个问题。一个客户端获取帖子将获取根内容节点和前20个或更多的子树。这可能会导致一次相当大的数据获取,但并不是非常疯狂。
有人知道实现这种结构的好方法吗?
额外信息:此结构在客户端处理后应如何呈现。
{
uid: 0,
title: 'Check out this cat!',
body: 'It\'s pretty cute! This **text** is [markdown](link), so it can have ' +
'links and *stuff*. Yay!',
poster: {
uid: 0,
name: 'VivaLaPanda',
aviUrl: 'badlink',
},
posted: '2018-03-28',
children: [{
uid: 0,
body: 'This is a comment, it\'s angry!',
poster: {
uid: 0,
name: 'VivaLaPanda',
aviUrl: 'badlink',
},
posted: '2018-03-20',
children: [{
uid: 0,
body: 'This is a comment, it\'s neutral!',
poster: {
uid: 0,
name: 'Steve',
aviUrl: 'badlink',
},
posted: '2018-03-20',
children: [{
uid: 0,
body: 'This is a comment, it\'s neutral!',
poster: {
uid: 0,
name: 'Craig',
aviUrl: 'badlink',
},
posted: '2018-04-10',
children: []
}, ]
}, ]
},
{
uid: 0,
body: 'This is a comment, it\'s happy!',
poster: {
uid: 0,
name: 'Craig',
aviUrl: 'badlink',
},
posted: '2018-03-28',
children: []
},
]
};
编辑:
虽然我已经将这个问题标记为已回答,因为确实有一个答案,但我仍然非常希望看到更加优雅/高效的解决方案。
编辑2:
供后人参考:最终我决定使用DGraph来处理数据,并且在身份验证方面使用Firebase。任何Firebase解决方案都过于复杂了。