MongoDB是什么?
MongoDB是一个面向文档的关系型数据库,它的数据模型类似JSON格式。与SQL数据库相比,它不支持联合和事务,但是支持二级索引,支持文档级的原子写操,完全一致性的读操作。
此外还可支持主从复制,自动恢复和横向扩容。
MongoDB使用BSON,这是一种类似JSON的二进制对象格式。
MongoDB有表(table)吗?
MongoDB没有表,它的数据保存在collections里面,相当于SQL数据库的表。一个collection包含一个或多个文档,每个文档相当于SQL数据库表的一个记录。每个文档有一个或多个字段,对应于SQL数据库记录的一个列。
collection和SQL数据库表的主要区别是:同一个collection内的各个文档都可以有不同的字段,就是说用户可以对每个文档定义不同的字段,而不要求每个文档都有相同的字段。
MongoDB有模式(schemas)吗?
MongoDB采用动态模式。用户可以不定义结构就建立一个collection,就是说collection里的文档的字段和类型都无需定义。
MongoDB可以用于哪些应用?
MongoDB是基于通用目的设计的,可以用于很多场合,例如内容管理系统,移动应用,游戏,电子商务,数据分析,归档和日志等。
MongoDB不可用于需要SQL,联合和事务的应用。
MongoDB支持事务吗?
MongoDB不支持要求ACID的事务。
MongoDB提供了一些基本的事务能力,单个文档内支持原子操作。
MongoDB需要大内存吗?
不是必须的,MongoDB可以运行在小内存机器内。
MongoDB自动把服务器的所有资源作为cache,但是这是动态使用的,如果其它进程需要申请内存,MongoDB会释放cache使用的内存。
从技术实现上来说,MongoDB内存由操作系统的虚拟内存系统管理,这意味着MongoDB尽可能多的使用可用的内存,但是必要时会被交换到硬盘,内存越多就性能越高。
应该如何配置cache大小?
MongoDB的cache不可配置。MongoDB使用内存映射文件自动使用系统的所有可用内存。
MongoDB需要独立的caching层吗?
不需要。MongoDB的文档在数据库中的存储形式和在应用中的表现形式是一样的,因此不需要额外的caching层,这和SQL数据库有本质的不同,后者需要一个独立的caching层。
MongoDB处理caching吗?
是的。MongoDB把最近访问的数据都缓存到内存中。如果你为查询建立了索引,那么索引就被缓存到内存中。
MongoDB没有实现查询cache,而是从索引或数据文件中直接进行查询。
写入操作是立即写入磁盘还是延迟写入?
写入是在100毫秒内物理写入到日志,写入日之后数据就是持久的,即使重启也能恢复。
但是MongoDB把数据写入文件是延迟的,但是最多不超过1分钟。这不会影响持久性,因为日志足以保证数据可恢复。本行为可配置,具体参见syncdelay.