我的数据库中有以下结构:
MessagesInvolvingUserID:
- [UserID01]:
- [MessageID01]: [TimeStamp01]
- [MessageID02]: [TimeStamp02]
...
- [UserID02]:
- [MessageID03]: [TimeStamp03]
- [MessageID04]: [TimeStamp04]
...
我想知道如何有效地构建表示每个UserID的最新messageID(基于时间戳值)的字典?
我认为"蛮力"方法可行:
但这似乎非常低效,因为这涉及下载和做客户端工作。有什么建议可以采用更优雅的方法吗?
答案 0 :(得分:1)
为什么不在具有时间戳值的每条消息下创建时间戳键,然后查询按时间戳排序的消息?您使用什么语言来查询数据库中的项目?你尝试过类似的东西吗?
ref.child(“MessagesInvolvingUserID”).child(userID).child("MessageID01").queryOrderedByChild("timestamp").observeEventType(.ChildAdded, withBlock: { snapshot in ...
答案 1 :(得分:0)
如果您想要一个显示每个用户的最新时间戳的列表,您应该存储一个列表,显示数据库中每个用户的最新时间戳。
LatestTimstampForUserID:
- [UserID01]: [TimeStamp02]
- [UserID02]: [TimeStamp04]
...
现在,您可以非常有效地从数据库中读取此数据并显示列表。
成本是,在为用户发布新消息时,您需要更新数据库中的多个位置。这在使用NoSQL数据库时非常常见,例如Firebase实时数据库。