2016-12-18 43 views
2

我想将AWS DynamoDB用作数据收集应用程序的数据存储区,其中数据架构可能随时间而变化。DynamoDB动态模式

例如,最初一个项目可以表示人的属性,例如, {姓名年龄}。但是,稍后可以修改模式以包含{名称,年龄,性别}。

每个模式修改都将被跟踪和版本控制,旧数据不需要被迁移 - 但它可能仍然需要与新数据一起查询。

将每个数据模式更改存储在其自己的表中是否可接受?是否有直接的机制来查询跨表格的聚合数据?

回答

3

DynamoDB表的模式本质上是动态的。唯一需要事先设置的是关键名称和类型。您也可以随时添加全局索引(使用不同分区键的索引)。但是,本地索引具有相同分区键但排序键不同的那些索引,它们将添加到表创建表中。由于这种动态模式,您可以添加新的字段,或者随时停止添加它们。

您需要设计表格以了解如何查询它们。查询是相当有限的,你可以过滤,但这不是一个快速/廉价的操作。快速查询依赖于现有索引。查询可以从单个表中获取。联合/联盟不可用。

表扫描没有任何标准,只有过滤器可用。使用过滤器,数据从磁盘中获取,但可以从返回的集合中删除。在成本和时间上都是昂贵的操作。传递键的查询速度更快,因为它们从单个分区获取数据。所以你可能想要设计一个分区(例如userId)和排序键(item id)的密钥。 DynamoDB上通常具有复合键。

此外,避免表内的热点也很重要。也就是说,数据需要在分区键内公平分配。

参考:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/BestPractices.html

+0

由于缺少表工会的,你认为它会是适当的有一个复合键一个表来存储所有数据?这可以随着时间的推移进一步划分(例如,每月新表或其他分组)。 – J3Y

+0

可以使用单个表格,只要确保避免热点,即数据在键内的分布是公平的。 –

+0

每月的数据表是每月数据的常见做法,因为不需要合并报表的这些数据,例如,因为需要12个查询才能重建一年。 –