NoSQL数据结构

时间:2015-07-19 11:44:24

标签: amazon-dynamodb nosql

从关系数据库背景来看,我发现有时候找到构建我的NoSQL数据库的正确方法是一个挑战(是的,我意识到这个声明听起来很愚蠢)。我使用DynamoDB。

如果我有3个实体 - 用户,报告和建筑物,并且许多用户可以在建筑物上提交许多报告,那么以下结构是否可以接受?

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

或者我是否需要第四张表来跟踪用户提交的报告?我关注的是性能,吞吐量和存储空间。

1 个答案:

答案 0 :(得分:1)

使用DynamoDB时,global secondary indexes提供了从表中查询数据的替代方法。

根据您在此处描述的表格,结构可能有效:

用户表

  • 哈希键:userId

构建表

  • 哈希键:buildingId

报告表

  • 哈希键:reportId
  • ReportUser GSI
    • 哈希键:userId
  • BuildingUser GSI
    • 哈希键:buildingId

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

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

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