首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DynamoDB/Vogels的数据版本控制策略

使用DynamoDB/Vogels的数据版本控制策略
EN

Stack Overflow用户
提问于 2015-11-19 04:12:01
回答 1查看 2.1K关注 0票数 3

我正在开始一个使用DynamoDB作为数据存储的项目,以及设计得很好的沃格斯库,以抽象出Amazon的一些粗糙的边缘。

随着应用程序的发展,数据模型的属性可能会发生变化。通常会添加新属性,或者简单属性被嵌套(map)或聚合(list),有时属性类型会发生变化,或者一个属性会被完全删除。一些项目,如弗斯,为按需更新数据模型提供了一个框架。

我知道,与典型的关系系统相比,DynamoDB对现有数据模型的发展提出了不同的挑战和灵活性,所以我想知道人们是否有最佳实践来支持数据模型版本控制,特别是在使用Vogels时?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-20 01:32:47

DynamoDB和一个变化如此大的数据模型面临的最大挑战是,如果属性上有任何现有索引,而该属性现在正在更改为不同的数据类型。

假设您有一个具有散列键的现有表- userid (数字)

然后,要将userid从数字切换到字符串,DynamoDB将拒绝写入表,因为数据类型不匹配。如果更改的属性是辅助索引的一部分,它也将拒绝写入。

Vogels验证非常灵活,您可以将其配置为支持属性的多种数据类型:

代码语言:javascript
复制
var Account = vogels.define('Account', {
  hashKey : 'email',
  schema : {
    email : Joi.string().email(),
    phoneNumber : Joi.alternatives().try(Joi.string(), Joi.number())
  }
});

在这里,phoneNumber可以是字符串,也可以是数字。但是,如果在phoneNumber上有索引,则如果数据类型与索引配置不匹配,DynamoDB本身将拒绝该项。

对于不断发展的数据,要遵循的最佳实践是永远不要尝试重命名或更改现有属性的数据类型。相反,将数据写入新属性。在您的应用程序中,在读取数据时,检查新属性是否存在,然后检查它是否从旧属性中读取,并将其转换为新属性。不管您使用什么数据存储,这将允许您执行零停机时间部署,并允许您轻松回滚。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33795131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档