寻找将分层文档放入 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"
]
]
]
]
}
其中 Python
、Classes
、General
和 Information on Classes Text Wall
是 DocumentTable.title
的键。您也可以使用一些东西而不是标题来保持键的唯一性。 DynamoDB 最大文档大小为 400 KB,因此这足以容纳相当大的 table 内容
我一直在使用常规 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"
]
]
]
]
}
其中 Python
、Classes
、General
和 Information on Classes Text Wall
是 DocumentTable.title
的键。您也可以使用一些东西而不是标题来保持键的唯一性。 DynamoDB 最大文档大小为 400 KB,因此这足以容纳相当大的 table 内容