1.1 技巧1:速度和完整性的折中
在多个文档中使用的数据既可以采用内嵌(反范式化)的方式,也可以采用引用(范式化)的方式。两种策略并没有优劣之分,各自都有优缺点,关键是要选择适合自己的应用场景的方案。
要是不能容忍哪怕一丁点不一致,则应该选用范式化的设计。
但要是做了范式化,应用则必须在每次确认水果时做额外一次查找。若是应用无法承担这样的负载,又不太强调一直性,则应该反范式化。
这里需要的是两相权衡,因为极高的性能和瞬间一致性不可兼得。所以必须要想清楚哪个才是应用最需要的特性。
1.1.1 示例:网上购物车
假设现在要为购物车设计一下数据结构。MongoDB中要存放应用的订单,但订单中该涵盖哪些信息呢?
范式化的设计
商品:{
"_id":productId,
"name":name,
"price":price,
"desc":description
}
订单:
{
"_id":orderId,
"user":userInfo,
"items":[
productId1,
productId2,
productId3
]
}
待续....