本文已收录到Github仓库,内容包括计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模型、架构、校招社招分享等核心知识点,欢迎star~Github地址:https://github.com/Tyson0314/Java-learning什么是mongodb?MongoDB是用C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,增加更多的节点可以保证服务器的性能。MongoDB旨在为WEB应用程序提供可扩展、高性能的数据存储解决方案。MongoDB将数据存储为文档,数据结构由键值对(key=>value)组成。MongoDB文档类似于JSON对象。字段值可以包含其他文档、数组和文档数组。mongodb有什么特点?(1)MongoDB是一个面向文档存储的数据库,比较简单易操作。(2)可以在MongoDB记录中设置任意属性的索引(eg:FirstName="Sameer",Address="8GandhiRoad"),以实现更快的排序。(3)可以在本地或通过网络创建数据镜像,这使得MongoDB更具可扩展性。(4)如果负载增加(需要更多的存储空间和更强的处理能力),可以将其分布在计算机网络中的其他节点上。这称为碎片化。(5)Mongo支持丰富的查询表达式。查询命令使用JSON形式的标记,可以方便地查询文档中嵌入的对象和数组。(6)MongoDb可以使用update()命令来替换完成的文档(数据)或者一些指定的数据字段。(7)Mongodb中的Map/reduce主要用于数据的批处理和聚合。(8)映射和减少。Map函数调用emit(key,value)遍历集合中的所有记录,将key和value传递给Reduce函数进行处理。(9)Map函数和Reduce函数用Javascript编写,可以通过db.runCommand或mapreduce命令执行MapReduce操作。(10)GridFS是MongoDB的一个内置特性,可以用来存储大量的小文件。(11)MongoDB允许脚本在服务器端执行。您可以用Javascript编写函数并直接在服务器端执行它。也可以将函数的定义保存在服务器端,下次直接调用。什么是非关系型数据库非关系型数据库是区别于传统关系型数据库的数据库的总称。非关系型数据库的一个显着特点是不使用SQL作为查询语言,数据存储不需要特定的表模式。由于其简单的设计和非常好的性能,它被用于大数据和WebApps等面试网站。为什么要使用MongoDB?架构简单,没有复杂的连接深度查询能力,MongoDB支持动态查询。易于调试且易于扩展无需将应用程序对象转换/映射到数据库对象使用内部存储器作为存储工作区,以实现更快的数据访问。在哪些场景下使用MongoDB大数据内容管理系统移动应用数据管理MySQL和MongoDB最基本的区别是什么?MySQL和MongoDB都是免费的开源数据库。MySQL和MongoDB之间存在许多根本差异,包括数据表示、查询、关系、事务、模式设计和定义、规范化、速度和性能。通过比较MySQL和MongoDB,我们实际上是在比较关系数据库和非关系数据库,即数据存储结构不同。是什么让MongoDB成为最好的NoSQL数据库?以下特性使MongoDB成为最好的NoSQL数据库:面向文件的高性能高可用性易扩展丰富的查询语言一个失败在中间)会遇到问题吗?每个journal(group)的写操作都是一致的,除非是完整的否则在恢复时不会回放。分析器在MongoDB中的作用是什么?MongoDB包含一个数据库分析器,可以显示数据库中每个操作的性能特征。使用此分析器,您可以找到比预期慢的查询(或写入);例如,使用此信息,您可以确定是否需要添加索引。什么是名称空间?MongoDB将BSON对象存储在集合中。数据库名和集群名用句号联系在一起,称为命名空间(namespace)。是否允许为空?对于对象成员,是的。但是,用户不能向数据库集合中添加空值,因为空值不是对象。但是用户可以添加空对象{}。更新操作立即同步到磁盘?不,磁盘写操作默认是延迟的。写操作可能会在两三秒后到达磁盘(默认情况下在60秒内)。例如,如果数据库在一秒钟内接收到一千个递增对象的操作,则磁盘只会刷新一次。(请注意,虽然fsync选项在命令行和通过getLastError_old可用)您如何执行事务/锁定?MongoDB不使用传统的锁或带有回滚的复杂事务,因为它被设计成轻量级、快速和可扩展的预期高性能。可以类比MySQLMySAM的自动提交模式。通过简化对事务的支持来提高性能,尤其是在可能跨越多个服务器的系统中。启用备份故障回复需要多长时间?从备份宣布主服务器宕机到备份被选为新的主服务器需要10到30秒。在此期间,对主数据库的操作将失败-包括写入和强一致性读取。但是,您仍然可以在辅助数据库上执行最终一致的查询(在slaveOk模式下),即使在此期间也是如此。什么是大师或小学?它是当前备份集群(副本集)中的主节点/成员,负责处理所有写操作。在备份集群中,当发生故障转移事件时,一个额外的成员成为主要成员。什么是次要或奴隶?Secondary从当前primary复制相应的操作。它通过跟踪复制的oplog(local.oplog.rs)来做到这一点。您应该使用集群分片还是非集群分片来启动MongoDB环境?为了开发方便,我们建议启动非集群分片(unsharded)的MongoDB环境,除非一台服务器不足以存储你的初始数据集。从非集群分片升级到集群分片是无缝的,因此当您的数据集不是很大时,无需考虑集群分片。分片和复制如何工作?每个分片都是分区数据的逻辑集合。分片可以由单个服务器或集群组成,我们建议为每个分片使用一个集群。什么时候数据会扩展到多个分片?MongoDB分片基于范围。所以集合中的所有对象都存储在一个块中。只有当有多个区块时,才会有多个分片取数据的选项。现在,每个默认块大小为64Mb,因此您至少需要64Mb才能实现迁移。如果在分片关闭或缓慢时发出查询会怎样?如果分片关闭,查询将返回错误,除非查询设置了“部分”选项。如果分片响应缓慢,Mon??goDB将等待它响应。在正在迁移的块上更新文档时会发生什么?更新立即发生在旧块上,然后在所有权转移之前将更改复制到新分片。MongoDB在A:{B,C}上建了一个索引,查询A:{B,C}和A:{C,B}都会用到这个索引吗?不,索引只会在A:{B,C}上使用。如果在分片停止或变慢时启动查询会怎样?如果分片停止,查询将返回错误,除非为查询设置了“部分”选项。如果分片响应缓慢,Mon??goDB将等待它响应。MongoDB是否支持存储过程?如果支持,如何使用?MongoDB支持存储过程,使用javascript编写,存储在db.system.js表中。如何理解MongoDB中的GridFS机制,MongoDB为什么要使用GridFS来存储文件?GridFS是一种用于在MongoDB中存储大文件的文件规范。使用GridFS可以将大文件拆分成多个小文件进行存储,这样我们就可以有效的保存大文件,解决BSON对象限制的问题。mongodb的数据结构数据库中存储的对象设计是bson,一个类似于json的二进制文件,由键值对组成。MongoDB面向文档存储的优势有哪些:将数据以JSON格式保存在文档中。任何属性都可以被索引。复制和高可扩展性。自动分片。丰富的查询功能。快速即时更新。来自MongoDB的专业支持。什么是集合集合是一组MongoDB文档。它相当于关系数据库(RDBMS)中表的概念。集合在一个单独的数据库中。集合中的多个文档可以有许多不同的字段。通常,集合中的文档都服务于相同或相关的目的。什么是文档文档由一组键值组成。文档是动态的,这意味着同一集合中的文档不需要具有相同的字段和结构。关系数据库中表中的每条记录相当于MongoDB中的一个文档。什么是“mongod”mongod是处理MongoDB系统的主要进程。它处理数据请求,管理数据存储,并执行后台管理操作。当我们运行mongod命令时,这意味着MongoDB进程正在启动并在后台运行。传递数据库存储路径的“mongod”参数是什么,默认是“/data/db”端口号,默认是“27017”什么是“mongo”是一个命令行工具,用来连接特定的mongod实例。当我们运行不带参数的mongo命令时,它会使用默认的端口号和localhost来连接MongoDB,该命令可以切换数据库。MongoDB使用use+数据库名的方式创建数据库。use将创建一个新数据库,如果存在则返回该数据库。MongoDB中的命名空间是什么意思?MongoDB有预分配空间的机制,每个预分配的文件都用0填充。每新分配一个数据文件,它的大小是前一个数据文件大小的两倍,每个数据文件的最大大小是2G。MongoDB的每个集合和索引都对应一个命名空间。这些命名空间的元数据集中在16M的*.ns文件中,每个名字平均占用628字节左右,是整个数据库命名空间的上限。为24000。如果每个集合都有一个索引(比如默认的_id索引),那么最多可以创建12000个集合。使用更多索引,可以创建更少的集合。同时,如果集合数量过多,一些操作也会变慢。如果你想创建更多的集合,MongoDB也支持。只需要在启动时加上“--nssize”参数,就可以让数据库对应的命名空间文件变大,保存更多的名字。这个命名空间文件(.ns文件)最大可达2G。每个名称空间对应的范围不一定是连续的。与数据文件的增长类似,每个namespace对应的extentsize随着分配次数的增加而不断增长。目的是平衡命名空间浪费的空间,保持命名空间数据的连续性。需要注意的一个命名空间$freelist,这个命名空间用来记录不再使用的extents(删除的Collection或index)。每当namespace需要分配新的extent时,它会首先检查$freelist,看是否有合适的extent可供使用,如果有,就回收空闲磁盘空间。如何在MongoDB中创建新数据库MongoDB使用use+数据库名来创建数据库。use将创建一个新数据库,如果存在则返回该数据库。MongoDB中的分片是什么意思?分片是将数据水平划分到不同的物理节点。当应用数据越来越大时,数据量也会越来越大。当数据量增长时,单台机器可能无法存储数据或具有可接受的读写吞吐量。可以利用分片技术来增加更多的机器来应对数据量的增加和读写操作的要求。什么是复制?复制是将数据同步到多个服务器以通过在多个服务器上存储多个数据副本来提高数据可用性的过程。复制可以保证数据安全、容灾、不停机维护(如备份、重建索引、压缩)、分布式读取数据。如何在MongoDB的集合中插入文档要将数据插入MongoDB集合中,需要使用insert()或save()方法。>db.collectionName.insert({"key":"value"})>db.collectionName.save({"key":"value"})MongoDB中为什么要使用profiler数据库分析工具(DatabaseProfiler)收集有关信息针对正在运行的mongod实例执行数据库命令。包括增删改查命令,以及配置和管理命令。探查器会将所有收集到的数据写入system.profile集合,这是管理员数据库中的一个上限集合。默认情况下禁用探查器,您可以为每个数据库或每个实例启用它。MongoDB是否支持主键和外键关系?默认情况下,MongoDB不支持主键和外键关系。使用Mongodb自带的API需要硬编码实现外键关联,不够直观,难度大。MongoDB支持哪些数据类型String、Integer、Double、Boolean、Object、ObjectID、Arrays、Min/MaxKeys、Datetime、Code、RegularExpression等。86.“ObjectID”由哪些部分组成?有四部分:时间戳,ClientID,clientprocessID,三字节递增计数器_id是一个12字节长的十六进制数,保证了每个文档的唯一性。插入文档时,需要提供_id。如果您不提供它,那么MongoDB将为每个文档提供一个唯一的id。_id的前4个字节表示当前时间戳,接下来的3个字节表示机器ID号,接下来的2个字节表示MongoDB服务器进程ID,最后3个字节表示增量值。MongoDb索引索引用于高效地执行查询。如果没有索引,MongoDB将扫描并查询整个集合中的所有文档。这种扫描效率低下,需要处理大量数据。索引是一种特殊的数据结构,它以易于遍历的形式保存一小块数据集。索引可以存储特定字段或字段集的值,并按照索引指定的方式对字段值进行排序。如何添加索引使用db.collection.createIndex()在集合中创建索引>db.collectionName.createIndex({columnName:1})如何在MongoDB中更新数据update()和save()方法可以用于更新.update()方法更新现有文档中的值,而save()方法用传递给该方法的文档替换现有文档。如何删除文档MongoDB使用remove()方法从集合中清除文档。它有2个可选参数:删除条件:(可选)删除文档的条件。justOne:(可选)如果设置为true或1,则只会删除一个文档。>db.collectionName.remove({key:value})在MongoDB中如何排序MongoDB中的文档排序是通过sort()方法实现的。sort()方法可以传递一些参数指定要排序的字段,用1和-1指定排序方式,其中1表示升序,-1表示降序。面试site>db.connectionName.find({key:value}).sort({columnName:1})什么是聚合聚合操作可以处理数据记录并返回计算结果。聚合操作组合来自多个文档的值,对数据组执行各种操作,并返回单个结果。相当于SQL中的count(*)组合groupby。对于MongoDB中的聚合操作,应该使用aggregate()方法。>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)MongoDB中的副本集是什么?在MongoDB中,副本集由一组MongoDB实例组成,包括一个主节点和多个从节点。MongoDB客户端所有数据写入主节点(Primary),从节点从主节点同步写入数据,保持所有副本集存储相同数据,提高数据可用性。最后给大家分享一个Github仓库,里面有大斌编译的300多本经典计算机书籍PDF,包括C语言、C++、Java、Python、前端、数据库、操作系统、计算机网络、数据结构还有算法,机器学习,编程生活等等,可以star一下,下次找书的时候可以直接在上面搜索,仓库持续更新中~Github地址:https://github.com/Tyson0314/java-books
