本文已收录至Github仓库,涵盖计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star。Github地址: github.com/Tyson0314/Ja...MongoDB是由C++语言编写的基于分布式文件存储的开源数据库系统。在高负载情况下,添加更多节点可保证服务器性能,旨在提供可扩展的高性能数据存储解决方案。MongoDB以文档形式存储数据,数据结构由键值(key=>value)对组成,类似于JSON对象。字段值可包含其他文档、数组及文档数组。(1)MongoDB操作简单易用。(2)可在MongoDB记录中设置任何属性的索引,实现快速排序。(3)支持本地或网络数据镜像,增强扩展性。(4)负载增加时,数据可分布到计算机网络中的其他节点,实现分片。(5)支持丰富的查询表达式,查询指令使用JSON形式,可轻松查询内嵌对象及数组。(6)使用update()命令可替换完整文档或指定数据字段。(7)Map/reduce主要用于批量处理和聚合操作。(8)Map和Reduce函数使用JavaScript编写,可通过db.runCommand或mapreduce命令执行MapReduce操作。(9)GridFS是MongoDB中用于存储大量小文件的内置功能。(10)MongoDB允许在服务端执行脚本,支持JavaScript编写函数,直接在服务端执行或存储在服务端下次调用。非关系型数据库是对不同于传统关系型数据库的统称。其特点是不使用SQL作为查询语言,数据存储不需要特定表格模式,适用于大数据和Web Apps等。MySQL与MongoDB的主要差别包括数据表示、查询、关系、事务、schema设计、标准化、速度和性能。MongoDB成为最好NoSQL数据库的原因包括:数据结构灵活、易于扩展、支持丰富的查询表达式、内置Map/reduce功能、支持数据镜像等。当journal回放在条目不完整时,会导致问题。分析器在MongoDB中可显示每个操作的性能特点,帮助找到比预期慢的查询,确定是否需要添加索引。命名空间是MongoDB存储BSON对象在丛集(collection)中的表示,数据库名和丛集名字以句点连接。对于对象成员,MongoDB允许空值null,但用户不能将空值添加到数据库丛集,因为空值不是对象,但可添加空对象{}。更新操作不会立即fsync到磁盘,默认是延迟执行,可能在两三秒后到达磁盘。MongoDB没有使用传统锁或复杂的事务,旨在轻量、快速、高性能,类似于MySQL MySAM的自动提交模式。从备份数据库声明主数据库宕机到选出一个备份数据库作为新的主数据库将花费10到30秒时间,期间主数据库上的操作将失败。在备份集群中,当前负责处理所有写入操作的主要节点/成员称为primary。Secondary从primary复制相应操作,通过跟踪复制oplog做到。建议以非集群分片方式开始MongoDB环境,除非一台服务器不足以存放初始数据集,从非集群分片升级到集群分片无缝。分片是将数据水平切分到不同物理节点,复制是将数据同步到多个服务器,提高数据可用性。在MongoDB中,插入文档需要使用insert()或save()方法。数据库分析工具(Database Profiler)会收集数据库命令执行的相关信息,包括增删改查命令及配置和管理命令。MongoDB默认不支持主键和外键关系,需要硬编码实现。MongoDB支持多种数据类型,如String、Integer、Double、Boolean、Object、Object ID、Arrays、Min/Max Keys、Datetime、Code、Regular Expression等。ObjectID由时间戳、客户端ID、客户进程ID和三个字节的增量计数器组成。索引用于高效执行查询,索引是一种特殊的数据结构,将一小块数据集保存为容易遍历的形式。使用update()和save()方法可更新MongoDB中的数据。使用remove()方法可清除集合中的文档。sort()方法用于对文档进行排序。聚合操作能处理数据记录并返回计算结果,相当于SQL中的count(*)组合group by。在MongoDB中,由一组MongoDB实例组成的包含主节点和多个次节点的集合称为副本集。