【问题标题】:Firebase: How should I structure my database? Like Offerup and LetgoFirebase:我应该如何构建我的数据库?像 Offerup 和 Letgo
【发布时间】:2018-08-02 23:57:01
【问题描述】:

我目前正在构建一个 iOS 应用程序,该应用程序基本上允许用户发布他们想要出售的商品,然后其他用户可以根据位置搜索要购买的商品。我应该如何构建我的数据库?

我目前想到的结构如下:

users {
    userID: {
        profileImage:
        username:
    }
    .
    .
    .
}


posts: {
    userID: {
        postID: {
            description:
            imageUrl:
            creationDate:
            price:
            location:
        }
        .
        .
        .
        .
    }
    .
    .
    .
    .
}

希望我的要求是有道理的。换句话说,像 OfferUp 或 Letgo 这样的应用程序将如何构建他们的数据库?谢谢!!!

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database nosql


    【解决方案1】:

    很难说 - 这取决于您的应用程序的其余部分将如何工作,但 IMO 而不是在 userID 下嵌套 postID 您最好将 userID 添加到 post 对象。

    posts: {
        postID: {
            description:
            imageUrl:
            creationDate:
            price:
            location:
            userID:
        }
    }
    

    原因;

    • 将允许您在所有项目上运行搜索,您不需要搜索每个用户 - 然后是每个项目。无法深度搜索记录。

    • 您的数据库规则可以保持posts 可供所有人读取,但只有editable/writeable 其中auth.uid = userID

    • 仍然可以通过userID通过这种方式嵌套。

    【讨论】:

    • 好的。根据位置显示项目的最佳方式是什么?考虑到物品可能来自美国的任何地方。 Letgo 和 Offerup 等应用如何处理?
    • 我不知道 Letgo 和 Offerup 是什么,但是您可以在 postID 中存储州、邮编或城市,并允许用户通过州搜索并查看其州的所有项目。
    • 还有邮编或城市数据库,可让您找到附近的区域,您可以搜索附近的所有区域以查找该项目。
    • 正如我在上面问过的 Alexandre,如果我有 100,000 多个帖子,我将如何有效地搜索某个邮政编码内的帖子?这是 GeoFire 的用途吗?
    【解决方案2】:

    我唯一要更改的是,如果您希望能够显示不同商品的列表,您应该将列表所需的信息提取到另一个根级集合。您应该在该部分中添加更少的细节,因为谷歌表示它将允许更快地下载数据,同时使用更少的数据。 (来源:https://firebase.google.com/docs/firestore/manage-data/structure-data

    所以,是这样的:

    {
        users: {
            userID: {
                profileImage:
                username:
            }
            .
            .
            .
        }
    
    
        posts: {
            zipCode: {
                postID: {
                    userID: 
                    description:
                    imageUrl:
                    creationDate:
                    price:
                    location:
                }
                .
                .
                .
                .
            }
            .
            .
            .
            .
        }
    
        listOfPosts: {
            zipCode: {
                postID: { //Only put essential information for your list of posts here
                    imageURL:
                    price:
                    location:
                }
            }
        }
    }
    

    【讨论】:

    • 嗯。好吧有道理。地点呢?我会有另一个根级别的位置集合吗??
    • 没有。如果您想根据它们的位置显示您的项目,只需将位置数据添加到 listOfPosts 中的每个帖子(就像我刚刚做的那样)。拥有 listOfPosts 的想法是下载更轻量的 JSON,并使您的应用程序更快。例如,在显示项目列表时无需下载您的描述(仅当用户选择其中一项时才需要它们的描述)。在我上面发布的链接中可能会更清楚。
    • 我知道要下载更轻量级的 JSON,但是如果我有 100,000 多个帖子并且我想搜索特定邮政编码中的帖子,我该怎么做?遍历所有记录不是一个缓慢的操作吗?
    • 如果您希望您的用户按邮政编码搜索,您可以按邮政编码对帖子进行分组,然后获得他们的 ID 列表。您不会有大量按邮政编码的帖子。
    猜你喜欢
    • 1970-01-01
    • 2021-06-05
    • 2021-02-21
    • 2011-10-13
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    相关资源
    最近更新 更多