范式与反范式
范式化能够提供数据写入速度。反范式化能够提高数据读取速度。因此,在做设计应用时,需要在范式与反范式之间做权衡。
由于mongodb不支持join链接查询,因此mongodb中实现范式化是通过使用引用字段。多发送一次请求。
mongodb中的反范式化通过内嵌文档。
内嵌文档和引用文档的比较
更适合内嵌 | 更适合引用 |
---|---|
子文档较小 | 子文档较大 |
数据不会定期改变 | 数据经常改变 |
文档数据小幅增加 | 文档数据大幅增加 |
快速读取 | 快速写入 |
优化mongodb的数据操作
优化文档增长
当更新文档时,要预估是否更新会导致文档体积过大。如果增长程度是可预知的,可以为文档分配足够的空间(为文档分配一个大的超长内容,当插入成功后,再移除),避免文档进行移动。文档移动是非常慢的,MongoDb必须把原先所占的文档释放掉,然后将文档写入另一个空间。
删除旧数据
可以使用TTL集合
一致性管理
mongodb服务器为每一个链接维护一个请求队列。客户端每次发来的新请求都会加入到队列末尾。入队之后,这个链接上的队列会依次被处理。一个链接拥有一个一致性的试图。可以总是读取到这个链接写入的新数据。