1.mongodb是基于文档的(BSON,类似json的键值对来存储),不是基于表格,易于水平扩展,将内部相关的数据放在一起能提高数据库的操作性能。如果你想新建一个新的文档类型,不用事先告诉数据库关于这些数据的结构,直接存到数据库中即可。易存储对象类型的数据。
2.与关系数据库的重大区别:可扩展的表结构,也就是说collection(表)中document(一行记录)所拥有的字段是可以变化的。
3.支持的查询语言非常强大,其语法有点类似面向对象的的查询语言。mongodb没有join语句。
传统关系数据库中join操作可能会产生笛卡尔积的虚拟表消耗较多系统资源,而mongodb的文档对象集合是任意结构,我们可以设计交货号的数据模型尽量避开这样的需求。
4.支持云计算特点:
原生的可扩展架构,通过启用分片和水平扩展,提供云存储所需的技术;
它的自动管理“副本集”,以保持数据的可用性和完整性;
聚集操作尤其是mapreduce可以在分片集群上进行操作,可为大数据分析做准备。
5.目前大多数nosql数据库不支持事务。原因:
大多数NoSQL系统都要能够跨多台不同的机器扩展,数据库中的数据分布在不同的机器上。一个事务中的写入操作可能会访问多个分区(在多台机器上)的数据,这就是“分布式事务”。
在分布式事务中确保原子性需要参与事务的机器相互协作。每一台机器都必须确定,事务在其它机器上能够成功提交。而且,需要有一个协议,确保事务写入操作涉及的机器在写入数据状态稳定之前都不会出现故障。
这个协作过程不仅会消耗大量的资源,而且会增加数据库请求延迟。更大的问题是,在协作过程完成之前,其它操作无法读取该事务写入的数据。并发事务延迟会导致其它与出现延迟的事务在时间上存在重叠的事务延迟,最终导致系统“阻塞(cloggage)”。
分布式事务所需的分布式协作会严重影响数据库系统的性能,包括事务吞吐量和事务延迟。因此,大多数NoSQ系统都选择了不支持事务
来自 <http://blog.csdn.net/kezhong_wxl/article/details/77000947>
复制集和分片是mongodb最具特色的功能:
①复制集实现了数据库的备份、自动故障转移。
至少包括primary节点、secondary节点、arbiter节点(仲裁节点)三个节点,primary节点负责数据的读写,secondary节备份primary节点的数据。当primary节点故障时,arbiter会从secondary节点中选择一个节点当primary节点。
②分片集群,实现分布式存储与高效的读写分离。
复制集中的每个成员是一个mongodb实例,但是分片上部署时,每一个片就是一个复制集。
一个分片不是就在一个机器上。部署的总体原则要去使每个片(复制集)中的primary节点,secondary节点和arbiter节点分开以及和配置服务器分开,当其中任意一个机器宕机的时候,集群都能正常运行。