【发布时间】:2011-08-30 05:42:11
【问题描述】:
当您使用像 SimpleDB 这样的 Nosql 存储时,如何管理主要的架构更改?
我知道我仍在考虑 SQL 术语,但在使用 SimpleDB 几周后,我需要对正在运行的数据库进行更改。我想将其中一个对象类更改为具有唯一 ID,而不是企业名称,并且由于它被另一个对象引用,我还需要更新这些对象中的引用值。
使用 SQL 数据库,您可以在客户端软件部署过程中运行一组 sql 语句。显然,这不适用于像 SimpleDB 这样的东西
- 没有等效的 SQL 更新语句。
- 由于 SimpleDB 的分布式特性,无法知道您对数据库所做的更改何时“过滤”到运行客户端软件的所有节点。
我想到的一些解决方案是
每个域都有一个版本号。客户端软件知道它应该使用哪个版本的域。编写一些代码,将数据从一个域版本复制到另一个域版本,随时进行所需的更改。然后,您可以安装新的客户端软件,然后访问新的域版本。除非您可以在更新过程中“冻结”所有写访问权限,否则这种方法将不起作用。
每个项目都有一个版本属性,用于指示存储时使用的格式。客户端在将对象加载到内存时使用此属性。对象在写回 SimpleDB 时可以转换为最新格式。这样做的问题是,在以新格式进行任何写入之前,需要将新软件部署到所有服务器,否则运行旧软件的客户端将不知道如何读取新格式。
这一切都相当复杂,我想知道我是否遗漏了什么?
谢谢
理查德
【问题讨论】:
标签: nosql amazon-simpledb