3

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

因此数据将采用 Python -> 类 -> 常规 -> “类文本墙上的信息”之类的格式

有时会有多个子目录。

未来的计划将是能够添加新的子文件夹,将数据移动到不同的文件夹,“竖起大拇指”,以及最终拥有对彼此数据的读取访问权限的多帐户。

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

我也在考虑如何对分区进行排序,我怀疑这个辅助程序会增长到多个集群,但我知道使用 NoSQL 你必须提前规划布局。

如果 NoSQL 非常适合这种类型的数据,请告诉我。这主要用于练习和练习 AWS 系统。

4

1 回答 1

1

DynamoDb 是一个键值数据库,带有添加二级索引的选项。最好存储不需要全扫描或聚合查询的文档。如果您将分层文档应用程序设计为一次只显示一个文档,那么 DynamoDB 将是一个不错的选择。您可以将文档的结构如下:

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

在哪里:

  • parent_document- 父文档的“标题”,在您的示例中,对于标题为“类”的文档,“Python”可能为空
  • content- 带有注释、竖起大拇指等的文本或非结构化文档,但您不打算对其执行条件查询,否则您需要全局二级索引。但是由于您不会有很多文档,因此对表格进行全面扫描不会花费很长时间。

您还可以为用户的分层文档创建另一个包含目录的表格,您可以使用它来更轻松地浏览文档,但是在这种情况下,您需要注意此表格的一致性。

例子:

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

其中PythonClasses和是GeneralInformation on Classes Text WallDocumentTable.title。您还可以使用某些东西而不是标题来保持键的唯一性。DynamoDB 最大文档大小为 400 KB,因此对于非常大的目录来说这已经足够了

于 2020-01-15T16:26:25.993 回答