MongoDB最佳实践畅谈-计费系统
作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs
MongoDB的最佳实践,在以下情况,你应该使用MongoDB。
1)高写负载的场景
MongoDB默认更适合高写入而不是事务安全。如果你需要为每个客户端载入巨量的、低价值的数据,那么MongoDB很适合。假如你需要载入上百万的交易记录,那么这需要额外的安全措施,MongoDB不适合。
2)在不可靠的环境需要高可用场景
设置复制集(服务器做主从集群)很容易,速度也很快。此外,从某个节点(或数据中心)做故障恢复是实时的、安全的、自动的。
3)数据增长巨大,能把数据分片的场景
数据库做伸缩是很困难的(单个MySQL表在数据量达到5GB~10GB时,它的性能会显著下降)。如果你需要对数据库进行分区和分片,MongoDB内建了这些机制,完成这些工作很简单。
4)数据是基于位置的场景
MongoDB内建了支持空间的功能,因此从指定的位置查找相关的数据是非常快速和准确的。
5)数据集很大(从1GB起步)以及数据的模式是不稳定的场景
在一些关系数据库中要增加新的列字段,数据库会锁定整个表,或者或让主数据库服务器的负载和性能下降。通常,当数据表的尺寸超过1GB后,这种情况性能下降的更厉害。而MongoDB是无模式的,增加新的字段,对已有的行(称为文档)无影响。其次是当应用程序改变后,MongoDB不需要DBA来修改数据模式。
6)无DBA的场景
如果你的公司没有专职的DBA,你也不需要对数据做联合或标准化,那么你可以考虑MongoDB。MongoDB在持久化方面做到很好,类数据可以被序列化成JSON数据,并加以存储。
注意:请遵循MongoDB的最佳实践,以避免一些陷阱。
真实案例:计费
国外的奥弗•科恩发布了一个号称下一代的开源计费解决方案,此方案利用MongoDB作为其后端存储。此计费系统已经运行于以色列发展最快的移动运营商的产品环境,每个月能处理超过500M的呼叫数据记录CDR。奥弗•科恩介绍了它是怎样利用MongoDB的优势的:
1)无模式的设计
无模式设计可以快速添加新呼叫数据记录类型到系统中。它让BillRun保持数据存储的通用性。
2)可伸缩
BillRun的产品网站目前已经在单个数据表中管理了几个TB的数据,w/o可通过添加新字段进行限制。
3)快速的复制集
复制集能够满足易于构建多数据中心DRP和高可用HA解决方案的规则。
4)分片
分片使的线性扩容很清晰可控,不至于出现超出预算的情况。
5)每秒插入的呼叫数据记录CDR的数量超过2,000次,MongoDB的架构非常适合高写入场景。你还可以保证带findAndModify(通常比较慢)和两阶段提交的事务的处理。
6)开发者可以面向查询,使得能够写出优雅的查询。
7)基于位置
基于位置可用于分析用户的使用情况,以此决定在何处继续建设蜂窝基础设施。
最后,MongoDB是一个伟大的数据库,你必须把它使用在合适的场景才能保证你获得市场竞争的优势。