mongoDB应用程序设计

一. 范式与反范式

范式化:将不同数据放在不同集合,不同集合之间可以直接引用数据。避免数据存在于多个集合当中。

由于mongoDB不支持不同集合直接引用数据,类似关系型数据库中的join操作,mongoDB不支持。我们在设计的时候,要慎重考虑用范式还是非范式,参考原则见下图:


也就是,如果数据修改不频繁,比较小,读取频繁适合非范式设计。


二. 优化数据操作

2.1优化文档增长

mongoDB每一条文档都是紧凑的,中间没有间隙,如果一个文档修改增长了,就需要挪动位置了,这样非常影响性能。mongo识别到这种操作之后,会给后续的新增文档预留一定的空间,这个空间就是填充因子。如果文档的确会被大概率的增长,建议插入一个多余字段,来抢占空间,参考如下博客:http://www.cnblogs.com/smileberry/p/4171035.html


2.2 删除旧数据

有些数据过几个月没用了,常见删除旧数据的方式是:

使用固定集合  使用TTL集合,定期删除数据


三. 数据库和集合设计

1. 具有相近模式的文档放在一个集合里面,由于mongo不支持集合join,需要经常join的数据,放到一个集合里

2. 数据库最大的问题是锁机制,具体锁机制可参考如下博客:http://blog.csdn.net/liwenshui322/article/details/77630475

我们通常需要将访问量相近的数据放到一个库里面,比如用户,用户参与的活动,用户日志这3种属于不同访问量的数据,可以放到3个不同的数据库里面。


四.不适合mongoDB的场景

       1. mongoDB不支持事务,如果需要支持事务,建议采用别的存储

       2. 从多个维度对不同数据类型的数据进行连接,这是关系数据库擅长的事情




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值