我有房间可以容纳用户可以发布的子房间。我只想向用户显示不到24小时的用户帖子。
例如:
Cats
kittens
users : 10
posts :
ksjdflkjaslkdjf
userUID : 123
postCaption : "I like kittens"
postTimestamp : 203940340930
所以在这里,如果用户进入猫室,进入小猫的子房间,并想看到关于小猫的帖子,我只想返回时间戳不到24小时的帖子老。
我不确定是构建数据库的最有效方法。现在设置的方式的问题是,如果有1000万个小猫帖子,每次用户想要加载帖子时,firebase必须通过每个帖子并检查时间戳以查看它是否有效。
另一种选择可能是:
Rooms:
Cats
kittens
users : 10
posts :
post1UID : 209384938942024234 //The value here would be the timestamp
post2UID : 309238942024234
Posts :
209384938942024234
userUID: 123
postCaption : "....."
postTimestamp : 209384938942024234
我会查询只有有效时间戳的帖子,并使用帖子UID去抓帖子。
在开始之前,有关最佳方法的建议吗? 提前谢谢。
答案 0 :(得分:0)
您可以简单地查询帖子列表,仅查询过去24小时内的帖子。在you can't enforce this with security rules期间,您至少可以使代码做正确的事情。
但这非常浪费:在你的应用程序上线超过24小时之后,你就会查询你已经知道从不匹配的数据。
为了防止这种情况:在Nobase数据库(如Firebase)中,您经常会针对应用的特定用例对数据建模。因此,如果您希望用户查看过去24小时内的帖子列表,您应该为数据库建模,以获得过去24小时内的帖子列表。
您可以通过两种方式执行此操作:
保留当前结构,但添加二级索引:最后一天的帖子ID列表。一种简单的方法是将每个帖子的ID作为键,并将其时间戳保持为值:
roomId1:
post1UID: timestamp
post2UID: timestamp
与您的方法不同(至少就我在快速扫描中看到的那样)是索引只会发布最近24小时的帖子,因此您根本无需查询帖子(仅用于清理)。