寻找将分层文档放入 DynamoDB 的最佳方法

Finding the best way to put a tiered document into DynamoDB

我一直在使用常规 SQL 数据库,现在想使用 AWS 服务开始一个新项目。我希望后端数据存储是 DynamoDB,我想要存储的是一个分层文档,就像我学到的所有编程技巧的说明手册,可以通过 React 前端提取和调用。

所以数据的格式类似于 Python -> 类 -> 常规 -> "Information on Classes Text Wall"

有时会有多个子目录。

未来的计划是能够添加新的子文件夹,将数据移动到不同的文件夹,"thumbs up",以及最终的多帐户对彼此数据的读取权限。

我知道如何在 SQL 数据库中执行此操作,但以前从未使用过 NoSQL,我认为这将是一个很好的起点。

我也在考虑如何对分区进行排序,我怀疑这个辅助程序是否会增长到一个以上的集群,但我知道如果没有SQL,你必须提前计划你的布局。

如果否SQL 非常适合这种类型的数据,请告诉我。这主要是为了练习和练习 AWS 系统。

DynamoDb 是一个 key-value 数据库,带有添加二级索引的选项。存储不需要全扫描或聚合查询的文档很好。如果您将分层文档应用程序设计为一次只显示一个文档,那么 DynamoDB 将是一个不错的选择。你可以把文件放在这样的结构中:

DocumentTable:
{
 "title": "Python",
 "parent_document": "root"
 "child_documents": ["Classes", "Built In", ...]
 "content": "text"
}

其中:

  • parent_document - parent 文档的 "title",对于标题为 "Classes"[=32 的文档示例中的 "Python" 可能为空=]
  • content - 带有注释、竖起大拇指等的文本或非结构化文档,但您不打算对其执行条件查询,否则您需要全局二级索引。但是由于您不会有很多文档,因此 table 的完整扫描不会花费很长时间。

您还可以有另一个 table,包含用户分层文档的 table 内容,您可以使用它更轻松地浏览文档,但在这种情况下,您需要注意table.

的一致性

示例:

ContentsTable:
{
    "user": -- primary key for this table in case you have many users
    "root": [
        "Python":[
            "Classes": [
                "General": [
                    "Information on Classes Text Wall"
                ]
            ]
        ]
    ]
}

其中 PythonClassesGeneralInformation on Classes Text WallDocumentTable.title 的键。您也可以使用一些东西而不是标题来保持键的唯一性。 DynamoDB 最大文档大小为 400 KB,因此这足以容纳相当大的 table 内容