【问题标题】:Firebase structure for ebay or craigslist like siteebay 或 craigslist 之类网站的 Firebase 结构
【发布时间】:2016-02-04 20:31:20
【问题描述】:

我看过很多针对 firebase 的非规范化结构,但无法为 ebay 或 craigslist 等大型网络应用找到正确的方法。

如果您以 ebay 或 craigslist 为例。您将如何构建具有数千/数百万个项目/类别的效率结构?

这是正确的方法吗?

"users":{
    $userID: {
    ...
    }
},
"categories": {
    $categoryID (01): {
        "name": "computers"
        "subcategories": {
            $subCatID: {
            "name": "apple"
            }
        }
    },
    $categoryID (02): {
        "name": clothes
        ...
    }
},
"items": {
    $id: {
        "name": "iMac 27",
        "category": {
            $categoryID
            $subCatID
            ....
        },
        "seller": $userID,
        ...
    }  
}

我不明白的是,如果你想获得一个特定的项目,你需要先从“项目”树中下载所有项目吗?这会导致数百万个项目出现性能问题吗?

非常感谢您的帮助。 斯蒂芬

【问题讨论】:

  • 存储数百万个项目是一项非常高效的操作。阅读或查询数百万个项目不是。一切都取决于您希望如何访问数据。有关模式和注意事项的详细介绍,请参阅这篇文章:highlyscalable.wordpress.com/2012/03/01/…
  • 如果您知道要获取哪个项目,只需阅读:ref.child('items').child(itemId')
  • @Frank van Puffelen 感谢您的回答和文章。我会读的。我知道如何使用coderef.child('items').child(itemId')code 获取该项目,但我要问的是,即使您定位正确的项目,它是否必须下载所有先父树?
  • 如果您使用我展示的构造,则不会。下一次,显示代码,我将能够立即回答。

标签: firebase firebase-realtime-database angularfire nosql


【解决方案1】:

如果你知道要拿什么物品,你可以通过简单的阅读得到它:

ref.child('items').child(itemId')

这直接访问孩子,不需要数据库考虑所有项目,也不需要客户端下载所有项目。数据库只是直接从磁盘加载正确的项目,然后只将那个项目返回给客户端。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 2021-10-25
    • 1970-01-01
    相关资源
    最近更新 更多