2017-02-23 64 views
1

我一直在尝试在Amazon Dynamo DB中为我的Android应用程序创建Schema。我对NoSQL数据库的经验非常少。Amazon Dynamo Table Schema

我已经创建了一个基于调查的Android应用程序,现在我有一些表存储在Amazon Dynamo DB中。

这些表是Employees表,Survey表,Question表和Response表。

Employees表存储所有员工的信息,调查表包含调查的名称和已接受调查的员工。

我的问题是与问题表和响应表。这些问题是动态的,基于正在参与调查的员工。

答案表中的答案取决于调查中问题的数量。

我想知道什么应该是我的@DynamoDBHashKey,@DynamoDBIndexHashKey,@DynamoDBIndexRangeKey在问题和响应表中,以便我可以将问题映射到响应以及两个表中应该是什么@DynamoDBAttribute。

用例可以是:公司的员工向公司的所有其他员工发布了12个问题。

Image was taken earlier, later on I added survey table as well

回答

1

DynamoDB擅长一些事情和坏别人。它在保持低读/写延迟的同时大规模地扩展和扩展,但是引入了最终的一致性,并且迫使您提前做出重大的模式决策,比如表中应该包含什么内容以及数据如何分区以及应该如何分区成为指标。它要求你通过分区键将你的表分成几部分来采用它的水平缩放模型。

从你说的这个问题的方式来看,很明显你在关系数据库中更加舒适。 DynamoDB是而不是是开始学习NoSQL架构(更少)设计的好地方 - 如果它是我的第一个NoSQL数据库,尤其是试图建模一个域,例如您所描述的那个域,我会发现它相当无情。它根本不是一个很好的领域建模环境的完全停止 - 其全部关于水平缩放和性能。

如果您在关系数据库中更舒适,则使用关系数据库。如果您想尝试NoSQL,那么在将您的域建模为可持续实体时,有必要采用不同的思维模式。例如,您可能在父记录的模式中包含密切相关的子对象 - 在您的示例中,您可能会将问题作为调查的子项包含在一起,并将它们存储在一条记录中,而不像关系建模中那样将它们放在单独的表中。