六 应用程序设计
范式化与反范式化
所谓范式化$normalization$:把数据分散到多个不同的集合(表),不同集合(表)之间可以相互引用数据。但是这块被引用的数据只存在于一个集合之中,需要修改时只需要改一个文档就好。适合数据经常变动的情况,如果数据不经常变化,就没必要用范式化。
MongoDB并不存在join工具。
反范式化$denormalization$:每个集合都有一个文档副本。
基数
一个集合中包含的对其他集合的引用数量叫做基数。
模式迁移
有时候需求变动,需要加入新的字段或者删除旧有字段。为了避免兼容性问题,可以在每个文档中加入version字段。
当字段版本有变动的时候,也可以选择做个马杀鸡数据迁移。但是要注意MongoDB的多文档更新updateMany
不是原子性的,一旦执行过程中发生崩溃,就有可能出现一些文档更新成功,一些文档尚未更新的情况。
不适合MongoDB的场景
- 不支持事务