本文为NoSQL数据模型设计系列的一部分。
此模式使用版本号记录文档结构的变动,方便应用程序针对不同版本的文档进行不同操作。
增加schema_version字段在文档中,并在第一次修改结构时,给其赋值2。以后每次结构变动,同时增加这个字段。应用程序读取schema_version字段,根据它的值做相应的操作。
例如下面的user文档初始版本为
// users collection
{
"_id": "<ObjectId>",
"galactic_id": 123,
"name": "Anakin Skywalker",
"phone": "503-555-0000",
}
增加更多字段,同时引入schema_version字段
// users collection
{
"_id": "<ObjectId>",
"galactic_id": 123,
"name": "Darth Vader",
"contact_method": {
"work": "503-555-0210",
"home": "503-555-0220",
"twitter": "@realdarthvader",
"skype": "AlwaysWithYou"
},
"schema_version": "2"
}
应用程序判断schema_version是否存在,如果不存在,通过phone字段获取电话。否则,则通过contract_method.work和contract_method.home获取电话。
此模式可用于下列场景
- 系统不允许停机
- 更新文档结构需要耗费大量时间
- 不强制更新到最新结构
完整内容请查看NoSQL数据模型设计系列
网友评论