我最近读了很多关于nosql数据库的文章。我得到的经验法则是根据我们的视图构建数据(当然,取决于用例)。
现在,假设我们有一个社交应用,用户有个人资料,但他也创建了帖子,我们必须将它们存储在数据库中。
所以,我看到一些开发人员选择这样做:
Posts
-----UserID
-----------PostID
-----------------username: John
-----------------profileImage: https://...
-----------------posted_photo: https://...
这完全符合视图的结构。我们将进入帖子和我们的用户ID,我们可以获得我们的视图所需的所有数据。现在我的问题是,当用户发布了100K帖子并且他决定改变他的个人资料照片时会发生什么。到目前为止,他所有的帖子都包含了他的旧照片,所以现在,我们必须编写一种方法,循环播放100K的帖子(或者一般的所有帖子)并更新他的照片。在2个小时内,他决定“不,我不喜欢这张照片,我会改回来”,我们还要再做100K查询。
那(非规范化数据)怎么样?当然,它更容易,它平坦,但我们必须做出大量的查询来更改单张个人资料照片。真正处理这个问题的方法是什么?
答案 0 :(得分:3)
我已经完成了将用户的数据存储在一个地方并将userID设置为post属性。
posts:
userID:
postID:
userID: 'user1',
attachedImageURL: 'http:..',
message: 'hey',
reblogID: 'post4',
type: 'audio|poll|quote'
users:
user1:
name: 'john',
profileImage: 'http..'
它需要向Firebase再查询一次以检索用户的个人资料数据,但这是解决此问题的好方法。这实际上取决于您希望如何使用这些数据。