发布于 2015-11-20 01:32:47
DynamoDB和一个变化如此大的数据模型面临的最大挑战是,如果属性上有任何现有索引,而该属性现在正在更改为不同的数据类型。
假设您有一个具有散列键的现有表- userid (数字)
然后,要将userid从数字切换到字符串,DynamoDB将拒绝写入表,因为数据类型不匹配。如果更改的属性是辅助索引的一部分,它也将拒绝写入。
Vogels验证非常灵活,您可以将其配置为支持属性的多种数据类型:
var Account = vogels.define('Account', {
hashKey : 'email',
schema : {
email : Joi.string().email(),
phoneNumber : Joi.alternatives().try(Joi.string(), Joi.number())
}
});在这里,phoneNumber可以是字符串,也可以是数字。但是,如果在phoneNumber上有索引,则如果数据类型与索引配置不匹配,DynamoDB本身将拒绝该项。
对于不断发展的数据,要遵循的最佳实践是永远不要尝试重命名或更改现有属性的数据类型。相反,将数据写入新属性。在您的应用程序中,在读取数据时,检查新属性是否存在,然后检查它是否从旧属性中读取,并将其转换为新属性。不管您使用什么数据存储,这将允许您执行零停机时间部署,并允许您轻松回滚。
https://stackoverflow.com/questions/33795131
复制相似问题