【问题标题】:Best Firestore data model for file tree data文件树数据的最佳 Firestore 数据模型
【发布时间】:2020-05-11 17:01:21
【问题描述】:

我目前正在构建一个应用程序,该应用程序需要使用与文件树类似的结构来存储数据。它看起来像这样:

{
  "type": "folder",
  "name": "folder A",
  "private": false,
  "updatedAt": 1231243,
  "items": [
     {
      "type": "folder",
      "name": "subfolder A",
      "private": false,
      "updatedAt": 1231243,
      "items": [
         {
           "type": "file",
           "name": "file1"
         }
       ] 
     },
     {
       "type": "file",
       "name": "file2"
     }
   ]
}

据我所知,目前有 3 种实现方式。

  1. 只需将所有数据转储到 1 个文档中
  2. 为每个项目数组创建一个子集合
  3. 创建平面文件夹结构并保存父文件夹 ID 以供查找

我正在寻找一种以尽可能少的查询获取所有这些数据的方法,理想的用例是只有根文件夹 ID 并获取所有子文件夹和项目。但我不确定这是否可能。

另外,我打算以后订阅数据,所以文件树会实时更新。

请给我一个关于数据模型应该是什么样子的建议

更新 1 为了更清楚地说明我需要的查询:

  1. 我只需要获取本示例中最顶层的文件夹(文件夹 A)及其下的项目
  2. 我不需要直接获取嵌套项 示例:在不访问文件夹 A 的情况下获取子文件夹 A / 文件 2

【问题讨论】:

  • 您应该首先准确定义您的查询将是什么。在不知道如何查询数据的情况下,您可能会对如何构建数据做出错误的决定。像 Firestore 这样的 NoSQL 数据库不一定像 SQL 那样具有最灵活的查询功能,因此提前了解您想要完成的任务很重要。
  • 嗨,@DougStevenson 感谢您的提示!我已经根据我的查询需求更新了帖子

标签: database firebase google-cloud-firestore nosql data-modeling


【解决方案1】:

如果您只需要通过某个唯一 ID 获取整个结构,只需将其全部放在一个文档中,然后使用已知 ID get() 即可。每个文档有 1MB limit

如果您需要访问列表中的项目,情况会变得更加复杂(如果不阅读整个文档,这实际上是不可能的),因此对于这种情况,这实际上是个坏主意。

如果您打算频繁更新此文档的元素,您还需要重新考虑这一点,因为limit 每秒写入 1 次(持续)。否则你会想要拆分它。

【讨论】:

    猜你喜欢
    • 2019-10-28
    • 2015-08-29
    • 1970-01-01
    • 2018-09-09
    • 2012-02-11
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多