1.文档数据库是Nosql数据库家族里面最像关系数据库的Nosql数据库。
2.文档是处理信息的基本单位
3.文档数据库中采用BSON,JSON等格式储存,可方便地存储树形结构数据,支持多种索引类型。
4.拥有卓越的读写性能,并具有高可用副本集合可扩展分片集群技术,先天支持大数据的存储与管理,具有高扩展性和高可伸缩性。
5.文档数据库广泛应用于大数据存储与处理场景,如:日志数据存储、订单数据存储等;以及缓存数据存储、运维监控数据存储、基于地理位置的业务推荐应用数据存储等场景。
MongoDB和CouchDB是开源NoSQL文档型数据库家族的佼佼者,以文档形式存储是它们最大的共同点,但在数据模型、接口、对象存储以及复制方法等方面有很多不同。(国内也有文档型数据库sequoiaDB,并且已经开源)
MongoDB是专为可扩展性、高性能和高可用性而设计的数据库。它可以单服务器部署扩展到大型、复杂的多数据中心架构。利用内存计算的优势,MongoDB能够提供高性能的数据读写操作。MongoDB本地复制和自动故障转移功能使应用程序具有企业级的可靠性。
CouchDB数据库名称中的“Couch”是"Cluster Of Unreliable Commodity Hardware"的首字母缩写它反映了CouchDB的目标同样是具有高度可伸缩性,提供高可用性和高可靠性,即使运行在容易出现故障的硬件上也是如此。CouchDB最初是用C+ +编写的,2008年转为用Erlang编写,使用JSON格式保存数据,支持通过RESTful API访问。
(1)灵活的文档模型。JSON及与其类似的BSON格式简单易学易用,存储最接近真实对象模型,与某些编程语言(如JavaScript)中的对象格式基本一致,对开发者友好,方便快速开发迭代;文档中包含的字段可灵活定义和扩展。
(2)支持事务。提供文档级事务管理,保障文档操作的ACID特性。
ACID,是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。
(3)高可用复制集。满足数据高可用的需求,运维简单,故障自动切换。
(4)可扩展分片集群。支持大数据分布式存储,服务能力水平可横向弹性扩展。
(5)支持高性能访问数据。存储引擎(Storage Engine)是文档型数据库的核心组件,负责管理数据如何存储在硬盘和内存上。文档数据库MongoDB支持多种数据存储引擎,有WiredTiger、 MMAPv1、Mongorocks( rocksdb)和In-Memory等,综合多种存储引擎的优势满足各种场景的性能需求。
(6)强大的索引支持。例如,地理位置索引可用于构建各种基于地理位置服务的应用,文本索引解决搜索的需求,TTL索引解决历史数据自动过期的需求。
(7)支持大文档存储需求。例如MongoDB提供了GridFS存储机制用于存储超出一定空间限制的大文档。
(8)易用的聚合并行运算。用于解决数据分析场景需求,支持语法简洁的查询操作及存储过程调用,为用户屏蔽底层复杂的分布式存储与计算。
(9)支持各种编程语言。例如Python、Java、C+ +、Scala、PHP、Ruby、C#等。
(10)成熟的管理服务和运维管理工具。例如,MongoDB包含一系列监视工具用于分析数据库操作的性能,可以很好地部署、监控、备份和规划数据库。
(11)复制及自动故障转移。例如,MongoDB数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。
在计算机术语中,故障转移(英语:failover),即当活动的服务或应用意外终止时,快速启用冗余或备用的服务器、系统、硬件或者网络接替它们工作。 故障转移(failover)与交换转移操作基本相同,只是故障转移通常是自动完成的,没有警告提醒手动完成,而交换转移需要手动进行。
对于要求高可用和高稳定性的服务器、系统或者网络,系统设计者通常会设计故障转移功能。
在服务器级别,自动故障转移通常使用一个“心跳”线连接两台服务器。只要主服务器与备用服务器间脉冲或“心跳”没有中断,备用服务器就不会启用。为了热切换和防止服务中断,也可能会有第三台服务器运行备用组件待命。当检测到主服务器“心跳”报警后,备用服务器会接管服务。有些系统有发送故障转移通知的功能。
有些系统故意设计为不能进行完全自动故障转移,而是需要管理员介入。这种“人工确认的自动故障转移”配置,当管理员确认进行故障转移后,整个过程将自动完成。
故障恢复(failback)是将系统,组件,服务恢复到故障之前的组态。使用虚拟化允许故障转移操作减少对硬件的依赖。
MongoDB等文档型数据库非常适用于树形结构数据的存储,不需要复杂费时的跨表链接就可高效访问相关数据。例如,如果采用传统的关系数据库存储电影、影评、影评的回复、回复的打分,需要满足关系模型范式要求,一般设计为多张表,想查询某部电影的前述四方面数据时需要多级关联计算。而如果采用文档型数据库,可以以每部电影为中心,采用树形文档结构把各方面信息存储在各个文档中。