我们有一个应用程序,它将数据存储在Firebase(数据库)上,稍后再查询。
存储数据的正确格式是什么。
示例数据将完成。他们将具有以下数据:
UserId
完成时间
GameData
等等...
随后,查询将按UserId查找所有已完成的游戏。我们希望确保以最佳方式收集数据,以便稍后查询,而不是稍后进行重构。
答案 0 :(得分:0)
首先,请确保您有充分的理由在Firestore上使用Firebase。一旦确定要坚持使用Firebase Realtime Database,请查看以下文档摘录。因此,您实际上可能有2个单独的父节点,其中1个用于userId,另一个用于游戏。每个游戏节点的子代都是一个特定的游戏,它具有游戏用户的子代树(通过userId)。
Flatten data structures 如果将数据拆分为单独的路径,也称为 非规范化,可以在单独的调用中进行有效下载, 根据需要。考虑一下这种扁平化的结构:
{ // Chats contains only meta info about each conversation // stored under the chats's unique ID "chats": { "one": { "title": "Historical Tech Pioneers", "lastMessage": "ghopper: Relay malfunction found. Cause: moth.", "timestamp": 1459361875666 }, "two": { ... }, "three": { ... } }, // Conversation members are easily accessible // and stored by chat conversation ID "members": { // we'll talk about indices like this below "one": { "ghopper": true, "alovelace": true, "eclarke": true }, "two": { ... }, "three": { ... } }, // Messages are separate from data we may want to iterate quickly // but still easily paginated and queried, and organized by chat // conversation ID "messages": { "one": { "m1": { "name": "eclarke", "message": "The relay seems to be malfunctioning.", "timestamp": 1459361875337 }, "m2": { ... }, "m3": { ... } }, "two": { ... }, "three": { ... } } }