介绍
我有一个与社交媒体类似的FireStore数据库,包括三个集合:用户,事件和事件更新。我的目标是创建一个由我和我的朋友创建的事件更新的动态。因此,我需要通过扩展我的数据库建立友谊关系连接。但我遇到了三个问题,希望这里的某个人可以指导我解决这些问题。
问题/疑问1:
我将用户名和用户图像添加到了EventUpdate模型中,以便更轻松地查询。我听说denormalise是在NoSQL数据库中要去走的路线。但如果用户更新了他的用户图像,则我必须更新该用户创建的所有事件更新。这听起来像是你不想做的事情。但是否有更好的方法来解决这个问题?
问题/疑问2:
如何创建一个针对执行以下查询进行优化的数据结构:按日期获取由我和我的朋友发布的事件更新。
问题/疑问3:
如何存储点赞?我可以在一个eventUpdate中保留一个计数器。但当我denormalise eventUpdates时(请参见EDIT下面的当前解决方案),这将成为一个问题。
数据结构示例。
{
"users": {
"1": { "name": "Jack", "imageUrl": "http://lorempixel.nl" }
},
"events": {
"A": {
"name": "BeerFestival",
"date": "2018/09/05",
"creatorId": "1"
}
},
"eventUpdates": {
"1": {
"timestamp": "13243543",
"creatorId: "1",
"creatorName": "Jack",
"creatorImageUrl": "http://lorempixel.nl",
"eventId": "A",
"message": "Lorem ipsum"
}
}
}
编辑
好的,在进行了一些试验和错误之后,我最终采用了以下结构。这种结构似乎是有效的,但我的问题在于,由于每个订阅源中都有副本(1000个关注者意味着1000个副本),因此我需要进行大量的写操作来更新单个事件更新。而且看起来我需要经常这样做。
例如,我想为每个事件更新添加一个"喜欢"按钮。这会触发对所有EventUpdate副本的更新。对我来说,Firebase似乎不适合我的项目,我正在考虑用SQL数据库替换它,或者这里有谁可以提供更好的解决方案?
{
"users": {
"user1": { "name": "Jack",
"imageUrl": "http://lorempixel.nl",
"followers": ["user1"]
}
},
"feeds": {
"user1": {
"eventUpdates": {
"1": {
"timestamp": "13243543",
"creatorId: "1",
"eventId": "A",
"message": "Lorem ipsum"
}
},
"following": {
"user1": {
"name": "Jack",
"imageUrl": "http://lorempixel.nl",
"followers": ["user1"]
}
}
},
"events": {
"A": {
"name": "BeerFestival",
"date": "2018/09/05",
"creatorId": "1"
}
}
}