NoSQL数据结构



来自关系数据库背景,我发现有时找到构建NoSQL数据库的正确方法是一个挑战(是的,我意识到这句话听起来很傻)。我使用DynamoDB。

如果我有3个实体-一个用户,一个报告和一个建筑物,许多用户可以提交许多关于建筑物的报告,下面的结构可以接受吗?

User - index on userId
Building - index on buildingId
Report - index on reportId, userId and buildingId

还是需要第四个表来跟踪用户提交的报告?我关心的是性能、吞吐量和存储空间。

当使用DynamoDB时,全局二级索引提供了从表中查询数据的替代方法。

根据你所描述的表格,这里有一个可以工作的结构:

用户表

  • 哈希键:userId
<

建筑表/strong>

  • 哈希键:buildingId
<

报告表/strong>

  • Hash Key: reporttid
  • ReportUser GSI
    • 哈希键:userId
  • BuildingUser GSI
    • 哈希键:buildingId

上述设计的关键是Report表上的全局二级索引。与主表上的散列键(和可选范围键)不同,GSI上的散列键(和可选范围键)不必是唯一的。这意味着您可以查询特定userId提交的所有报告,也可以查询特定buildingId提交的所有报告。

在现实生活中,这些gsi可能希望包含一个Range键(例如date),以便在查询记录时对它们进行排序。

关于GSI要记住的另一件事是,您需要选择哪些属性是投影的,能够被检索的,因为GSI实际上是数据的物理副本。这也意味着GSI总是异步更新,因此读取总是最终一致的。

相关内容

  • 没有找到相关文章

最新更新