【问题标题】:NoSQL Structuring of DataNoSQL 数据结构
【发布时间】:2015-07-19 11:44:24
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: amazon-dynamodb nosql


    【解决方案1】:

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

    根据您在此处描述的表格,这是一个可行的结构:

    用户表

    • 哈希键:userId

    构建表

    • 哈希键:buildingId

    报告表

    • 哈希键:reportId
    • 报告用户 GSI
      • 哈希键:userId
    • 建筑用户 GSI
      • 哈希键:buildingId

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      相关资源
      最近更新 更多