gpt4 book ai didi

Firebase Firestore 评论树架构

转载 作者:行者123 更新时间:2023-12-04 02:16:27 27 4
gpt4 key购买 nike

我正在尝试将 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:

对于后代:我最终决定,任何 Firebase 解决方案都无可救药地令人费解,并且只使用 DGraph 来处理数据,而 Firebase 位于前面进行 Auth。

最佳答案

如果有很多人互相评论,您的 child 的方法可能会非常困惑。更好的方法是每个评论的以下结构:

// single comment

postUid // <- random generated by firebase
{
postedBy: userUid
postedTime: timestamp
postIsChildOfUid: postUid // <- reference to an other post (optional if the comment didn't respond to another comment(top-level comment))
}

这甚至根本不需要嵌套:)。您现在可以使用这种方法轻松生成评论树,但这必须是客户端。但这应该很容易!

关于Firebase Firestore 评论树架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49846728/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com