MongoDB面试专题33道解析
咱们好,我是 V 哥。今日给咱们共享 MongoDB的道 V 哥收拾的面试题,保藏起来,必定会对你有协助。
1. 你说的 NoSQL 数据库是什么意思?NoSQL 与 RDBMS 直接有什么差异?为什么要运用和不运用NoSQL 数据库?说一说 NoSQL 数据库的几个长处?
NoSQL("Not Only SQL")数据库是与传统联系型数据库(RDBMS)不同的数据库办理体系。NoSQL的规划初衷是为了处理结构化、半结构化和非结构化的大规划数据,供给了更灵敏的数据存储办法。它不遵从联系型数据库的“表-行-列”结构,常用的数据模型有键值、列族、文档和图等类型。
NoSQL 与 RDBMS 的差异
-
数据结构:
- RDBMS 运用表格结构,数据被安排成行和列,并且不同表之间可经过外键进行相关。
- NoSQL 供给多种数据模型,如文档、键值、列族和图等。数据可所以半结构化的或无结构的,灵敏性更高。
-
数据共同性:
- RDBMS 遵从ACID特性(原子性、共同性、阻隔性、耐久性),保证强共同性。
- NoSQL 更倾向于CAP定理中的可用性和分区忍受性,在某些体系中能够忍受弱共同性以进步功用。
-
扩展性:
- RDBMS 大多支撑纵向扩展(经过添加硬件功用)。
- NoSQL 一般支撑水平扩展(经过添加更多的一般服务器),更适宜大规划数据。
-
查询言语:
- RDBMS 运用规范SQL查询言语。
- NoSQL 一般不运用SQL,查询办法多样化,例如运用MongoDB的查询语法或Cassandra的CQL。
运用 NoSQL 的原因
-
适宜海量数据存储:NoSQL能有用处理很多数据、快速读写,适用于交际媒体、物联网等大数据场景。
-
支撑水平扩展:NoSQL数据库能够经过添加服务器来扩展,本钱较低,更适宜散布式架构。
-
灵敏的数据模型:NoSQL数据库支撑文档存储、键值存储、列族存储、图存储等多种数据模型,数据的结构灵敏度高,适宜需求快速迭代的运用场景。
-
高功用与可扩展性:关于低推迟、高并发的需求,NoSQL往往比传统联系型数据库体现更好。
不适用 NoSQL 的场景
-
强共同性要求:假如运用需求强共同性和杂乱业务处理(如银行转账),联系型数据库的ACID特色更适宜。
-
杂乱查询:关于杂乱的SQL查询(如多表相关、杂乱聚合)和结构化数据,RDBMS体现优于NoSQL。
-
数据规范化:需求高度规范化的数据办理时(防止数据冗余等),RDBMS是更好的挑选。
NoSQL 的长处
-
灵敏的数据结构:NoSQL不强制数据方法,能够依据需求存储多种不同格局的数据。
-
易于扩展:支撑散布式架构和水平扩展,更好地习惯云核算和大数据运用场景。
-
高功用:针对特定数据拜访方法优化,特别是在高读写场景中功用较好。
-
习惯快速迭代:在开发进程中,假如数据结构改动频频,NoSQL的灵敏性更能满意需求。
2. NoSQL 数据库有哪些类型?
NoSQL 数据库的类型一般依据数据模型的不同来分类,首要有以下四大类:
1. 键值存储(Key-Value Store)
- 特色:选用简略的键值对存储办法,相似于字典或哈希表。
- 长处:查询速度快,扩展性好,十分适宜简略的读写操作。
- 缺陷:仅支撑简略查询操作,数据模型简略,不适宜杂乱查询。
- 运用场景:适用于会话办理、缓存、简略的装备文件等。
- 代表数据库:Redis、Memcached、DynamoDB(亚马逊)等。
2. 文档存储(Document Store)
- 特色:运用相似 JSON 或 BSON 格局的文档结构存储数据,每条记载能够有不同的字段,数据结构灵敏。
- 长处:支撑嵌套结构,数据查询灵敏,适宜非结构化和半结构化的数据。
- 缺陷:跨文档查询支撑有限,不适宜杂乱的业务。
- 运用场景:适宜内容办理体系、日志办理、交际网络等。
- 代表数据库:MongoDB、CouchDB、RavenDB 等。
3. 列族存储(Column-Family Store)
- 特色:数据以列的办法存储,每一行能够包含不同数量的列,列数据按列族存储。可用于大规划数据散布式存储。
- 长处:能够高效地处理大规划数据,支撑水平扩展,查询特定列族数据速度快。
- 缺陷:数据结构较为杂乱,不适宜频频更新和杂乱查询。
- 运用场景:适宜时刻序列数据、物联网数据、数据剖析等。
- 代表数据库:Cassandra、HBase、ScyllaDB 等。
4. 图数据库(Graph Database)
- 特色:以图结构存储数据,包含节点、边和特色,适宜存储杂乱联系。
- 长处:十分适宜处理联系密布的数据查询,支撑快速的图遍历。
- 缺陷:数据存储杂乱,数据散布在多节点上时功用或许受影响。
- 运用场景:适宜交际网络、引荐体系、途径优化等需求杂乱联系查询的场景。
- 代表数据库:Neo4j、JanusGraph、TigerGraph 等。
其他类型(弥补)
- 时序数据库(Time-Series Database):专门用于存储时刻序列数据,比方物联网设备数据、金融市场数据。代表有 InfluxDB、TimescaleDB 等。
- 目标存储数据库(Object Store):用于存储和办理很多非结构化数据,如图片、音频、视频等。常用的有 Amazon S3、MinIO 等。
不同的 NoSQL 数据库类型适用于不同的数据结构和场景,用户可依据运用需求挑选适宜的类型。
3. MySQL 与 MongoDB 之间最根本的不同是什么?
MySQL 和 MongoDB 是两种盛行的数据库体系,但它们的规划理念和数据处理办法存在一些根本的不同:
1. 数据模型
- MySQL:联系型数据库,选用表-行-列的结构来存储数据,强制履行固定的数据方法。数据之间能够经过外键进行相关,数据结构规范化。
- MongoDB:NoSQL文档型数据库,选用JSON或BSON格局的文档存储数据,每个文档能够有不同的结构,数据结构灵敏,支撑嵌套结构。
2. 查询言语
- MySQL:运用规范的SQL言语,支撑杂乱的多表衔接和业务,适宜结构化数据查询。
- MongoDB:运用其专有的查询言语,语法相似于JavaScript的目标查询。支撑简略的查询和聚合,但在跨调集的杂乱查询上有束缚。
3. 业务支撑
- MySQL:支撑ACID业务,能保证强共同性,适宜需求强业务保证的运用场景,如金融体系。
- MongoDB:也供给业务支撑(4.0及以上版别),但业务机制在散布式环境中较新,且在操作时功用或许稍逊于MySQL。
4. 扩展性
- MySQL:传统上倾向于笔直扩展(添加硬件资源来进步功用),尽管也能够经过分片等办法完结水平扩展,但完结相对杂乱。
- MongoDB:原生支撑水平扩展,经过分片机制轻松完结大规划数据散布式存储,扩展性较好。
5. 数据共同性
- MySQL:默许选用强共同性方法,数据更牢靠,适宜对共同性要求高的体系。
- MongoDB:默许选用终究共同性方法,适宜对高可用性和分区忍受性要求高的运用,能够依据需求装备共同性等级。
6. 适用场景
- MySQL:适宜结构化数据存储,有较强的数据共同性需求和杂乱查询要求的运用场景,比方银行体系、ERP体系。
- MongoDB:适宜处理大规划、非结构化数据,数据方法改动频频的场景,比方交际媒体、实时剖析、内容办理体系等。
MySQL 更适宜结构化数据和强共同性要求的运用,而 MongoDB 则适宜灵敏多变、数据量大、需求高扩展性的大数据运用场景。
4. 你怎样比较 MongoDB、CouchDB 及 CouchBase?
MongoDB、CouchDB 和 Couchbase 都是常见的 NoSQL 数据库,尽管它们都支撑文档存储,但在架构规划、功用、可扩展性、以及运用场景上存在显着差异。
1. 数据模型与存储结构
- MongoDB:运用 BSON 格局(相似 JSON 的二进制存储)存储文档,支撑嵌套结构和丰厚的数据类型。它选用动态架构,适宜需求频频改动的数据结构。
- CouchDB:运用 JSON 格局存储文档,具有较强的结构共同性,支撑嵌套文档。CouchDB 偏重数据完好性,选用多版别操控(MVCC)来处理并发。
- Couchbase:支撑 JSON 格局存储,结合了文档数据库和缓存功用。它更重视高功用数据拜访,能够供给高效的读写速度。
2. 查询言语与接口
- MongoDB:供给自己的查询言语和丰厚的查询才能,语法相似于 JavaScript。支撑杂乱查询、聚合结构和多字段索引,还支撑 MapReduce。
- CouchDB:选用 MapReduce 作为查询引擎,规划初衷是用于简略查询,杂乱查询才能相对有限。查询需求编写 JavaScript 代码,并且聚合才能较弱。
- Couchbase:供给 N1QL 查询言语,相似于 SQL,能够进行杂乱查询,一起保存 NoSQL 的灵敏性。它支撑全文检索、聚合查询等高档功用。
3. 数据共同性与同步机制
- MongoDB:默许供给终究共同性,支撑单文档业务(4.0及以上版别支撑多文档业务)。数据的分片机制协助完结高扩展性,但会影响强共同性。
- CouchDB:着重终究共同性,规划上更重视多节点同步,适宜散布式、多设备数据同步场景。支撑多主仿制和抵触处理。
- Couchbase:供给强共同性,并且在高功用的基础上支撑ACID业务,适宜对共同性要求高的运用。Couchbase 集成了缓存层,保证数据共同性和拜访速度。
4. 扩展性与散布式支撑
- MongoDB:原生支撑水平扩展,能够经过分片来办理大规划数据。其仿制和分片机制使得扩展性更高。
- CouchDB:更适宜多地散布式场景,支撑多主仿制,具有较好的数据同步和抵触处理机制。
- Couchbase:专心于横向扩展,运用散布式架构的存储层与缓存层别离,适宜高并发、高吞吐的运用场景。
5. 功用与运用场景
- MongoDB:适宜读写密布型、需求杂乱查询的运用场景,如交际网络、实时剖析、内容办理体系等。
- CouchDB:适宜散布式、多端数据同步场景,例如移动运用、物联网等。由于其数据同步特性,适宜对网络状况和数据离线忍受度较高的场景。
- Couchbase:功用杰出,适宜高并发、低推迟的场景,如在线游戏、电子商务、实时广告引荐等需求高功用数据存取的运用。
6. 优缺陷比照
数据库 | 长处 | 缺陷 |
---|---|---|
MongoDB | 高扩展性、灵敏的查询、丰厚的社区支撑 | 高并发下功用或许受限于锁机制,对强共同性要求较高时完结较杂乱 |
CouchDB | 强壮的多地同步和多主仿制机制,易于离线拜访和数据同步 | 查询杂乱度有限,数据拜访速度相对较慢 |
Couchbase | 高功用、低推迟,结合缓存与耐久化,支撑 ACID | 资源耗费大,布置和办理相对杂乱 |
总结
- MongoDB 适宜灵敏的数据模型和读写密布型运用,拿手处理大规划非结构化数据。
- CouchDB 拿手多设备或散布式运用的离线同步,适宜需求数据同步和抵触处理的运用场景。
- Couchbase 结合了缓存和文档存储的优势,适宜高并发、低推迟需求的场景。
5. MongoDB 成为最好 NoSQL 数据库的原因是什么?
MongoDB 被认为是最好的 NoSQL 数据库之一,首要原因在于它的灵敏性、高功用以及在大数据场景中的优异体现。以下是 MongoDB 成为顶尖 NoSQL 数据库的几个要害原因:
1. 灵敏的数据模型
- 动态架构:MongoDB 选用 BSON 格局存储数据,支撑文档结构灵敏且不需求预界说方法。这种动态架构使得 MongoDB 能够随时改动数据结构,习惯需求改动频频的场景。
- 嵌套数据结构:支撑嵌套文档和数组结构,能够更自然地表明杂乱的目标和联系,削减表相关的需求。
2. 丰厚的查询功用
- 灵敏的查询言语:MongoDB 的查询言语支撑多种查询条件、投影、排序、分页等功用,能够完结丰厚的查询操作。
- 聚合结构:MongoDB 供给强壮的聚合结构,支撑杂乱的聚合操作,能高效处理数据汇总、过滤和转化使命。
- 全文检索:内置全文检索功用,能够快速完结文本查找使命,这对一些查找类运用十分有用。
3. 高功用与扩展性
- 内置分片:MongoDB 原生支撑水平扩展,数据能够分片存储在多个节点上,经过分片战略能够轻松办理海量数据,且分片机制相对简略。
- 主动负载均衡:散布式集群支撑主动负载均衡,有用分配数据与负载,防止热门节点问题。
- 多副本集:经过仿制集(Replica Set)完结高可用性和容灾,保证数据在硬件毛病时仍旧可用。
4. 广泛的场景习惯性
- 适用于多种场景:MongoDB 能处理海量数据,并适用于大多数大数据和实时运用场景,如内容办理体系(CMS)、交际网络、实时数据剖析、物联网数据等。
- 散布式架构:支撑散布式数据库架构,十分适宜现代的散布式运用场景,如云端运用和全球布置。
5. 社区支撑与广泛运用
- 开源且有活泼社区:MongoDB 是开源的,具有全球活泼的开发者社区,资源丰厚,协助开发者更快地上手和处理问题。
- 商业支撑:MongoDB, Inc. 供给商业版别 MongoDB Atlas,支撑主动化、可办理、可扩展的云数据库服务。
6. 业务与共同性支撑
- 业务支撑:从 4.0 版别开端,MongoDB 支撑多文档业务,进一步进步其在杂乱运用场景中的习惯性,特别是金融、订单处理等需求业务支撑的体系。
- 可装备的共同性等级:支撑不同等级的读取共同性,能够在功用和共同性之间灵敏挑选,使得 MongoDB 在 CAP 理论中的体现更为全面。
7. 多言语驱动支撑
- MongoDB 供给多种言语驱动,包含 Python、Java、Node.js、C#、PHP 等,简直一切干流编程言语都能够无缝运用 MongoDB,适宜多种开发需求。
总结
MongoDB 成为优异 NoSQL 数据库的原因在于其灵敏的数据模型、高扩展性、超卓的查询功用和广泛的支撑与习惯性。在多种数据模型、多言语驱动、以及主动化布置等方面的优势,使得 MongoDB 成为许多开发者和企业的首选。
6. MongoDB 32 位体系上有什么细微不同?
在 32 位体系上运用 MongoDB 会有一些束缚,首要是由于 32 位体系的内存寻址束缚。以下是 MongoDB 在 32 位体系上的首要不同和束缚:
1. 数据存储巨细束缚
- 最大存储巨细:在 32 位体系上,MongoDB 的每个数据库(包含数据和索引)的存储巨细被束缚在约 2GB。这首要是由于 32 位体系的内存寻址空间有限,MongoDB 无法充分运用更多内存来办理更大规划的数据。
- 存储引擎束缚:在 32 位体系上,MongoDB 仅支撑 MMAPv1 存储引擎,而不支撑更现代的 WiredTiger 引擎,这进一步束缚了功用和功用。
2. 功用束缚
- 内存束缚:由于 32 位体系的内存寻址空间约为 4GB,MongoDB 只能运用少于 4GB 的内存,实践可用内存一般更少,无法充分运用缓存和内存映射,或许导致数据拜访速度变慢。
- 数据读写束缚:当数据量挨近 2GB 的束缚时,MongoDB 的功用或许会明显下降,数据写入速度变慢,或许会导致服务不稳定。
3. 出产环境不引荐
- 易于到达上限:由于存储束缚和功用瓶颈,MongoDB 官方不引荐在 32 位体系上进行出产布置。32 位环境更适宜小型开发或测验环境,而非需求处理大数据量的运用。
4. 版别支撑束缚
- 新版 MongoDB 不再支撑 32 位体系:从 MongoDB 3.2 版别开端,MongoDB 中止对 32 位体系的官方支撑。较新的 MongoDB 版别只能运行在 64 位体系上,这进一步削减了 MongoDB 在 32 位体系上的运用。
总结
MongoDB 在 32 位体系上的运用遭到存储巨细、内存和功用的多重束缚,因而仅适宜小型、非出产环境运用。关于数据量较大或要求较高的运用,主张运用 64 位体系,以充分运用 MongoDB 的功用和扩展性。
7. journal 回放在条目(entry)不完好时(比方恰巧有一个半途毛病了)会遇到问题吗?
在 MongoDB 中,假如 journal
条目在写入进程中因半途毛病而不完好,MongoDB 的康复机制会处理这个状况。详细来说,MongoDB 的 journal
选用的是次序写入和预写日志(WAL, Write-Ahead Logging)技能,并且具有幂等性,因而能够有用应对条目不完好的问题。
康复机制和处理办法
-
次序写入和预写日志:MongoDB 的
journal
条目是次序写入磁盘的,这意味着它会保证在提交业务前,将操作记载到journal
文件中。这种次序性保证了即便产生毛病,康复进程能够有条有理地进行。 -
幂等性和条目查看:MongoDB 经过查看
journal
条目的完好性来防止回放不完好的条目。每个journal
条目包含一个校验和,康复进程会逐条验证,假如遇到不完好的条目或校验和不匹配的条目,就会越过该条目,防止过错回放。 -
业务等级的共同性:MongoDB 在康复时会回放最终一个完好的业务日志条目,而不包含不完好的业务条目,因而能坚持数据共同性。
典型流程
- 在体系启动时,MongoDB 会查看
journal
文件中的条目。 - 假如检测到半途毛病导致的条目不完好,MongoDB 会主动越过不完好的条目,只回放完好的条目内容。
- 经过这种机制,即便呈现毛病或电源断电,MongoDB 依然能够保证数据的安全性和共同性。
总结
因而,MongoDB 在 journal
条目不完好时不会呈现数据损坏的问题。它的康复机制能保证不完好条目被越过,然后坚持数据的共同性和牢靠性。
8. 剖析器在 MongoDB 中的效果是什么?
在 MongoDB 中,剖析器(analyzer)首要用于全文索引和全文检索。它的效果是处理和优化文本数据,使 MongoDB 能够更高效、精确地履行文本查找查询。
剖析器的中心功用
-
文本分词:将输入文本拆分红词语或词组。例如,将语句拆分红单个的词,以便进行单词等级的索引和查找。这关于多单词的匹配或要害词提取尤为重要。
-
词干化(Stemming):将单词还原为词根方法。例如,"running" 和 "ran" 会被还原为词根 "run",然后让查找包含词形改动的成果。
-
去除停用词:常见的停用词(如 "the", "is", "at" 等)会被主动移除,由于这些词一般不影响查找的中心语义。去除停用词能够削减不必要的匹配,进步查找精度。
-
字符正则化:转化不同的字符格局(例如巨细写转化)以共同处理文本数据,这样能够保证巨细写等格局不同的词语也能匹配成功。
-
言语支撑:MongoDB 支撑多种言语的剖析器,以习惯不同言语的文本处理需求。不同言语有各自的分词、词干化和停用词库,以保证剖析的精确性。
剖析器在 MongoDB 中的运用
MongoDB 中的全文查找运用 text
索引,剖析器在创立和查询 text
索引时发挥效果,详细包含以下几个场景:
- 树立全文索引:当对字段树立
text
索引时,剖析器会预处理文本数据,分词并生成索引条目。 - 履行文本查询:在履行
text
查询时,剖析器会对查询要害词进行相同的处理,以保证查找成果能够匹配到相同的词根或词组。
示例
例如,假定咱们有一篇包含文本 "Running is fun" 的文档,并为其字段树立了 text
索引。查询时,剖析器会把“running”还原为“run”,然后保证查询 “run” 时也能匹配到“running”这一词形改动。
总结
在 MongoDB 中,剖析器的效果在于优化文本处理和索引,进步文本查找的功率和精确性。经过分词、词干化、去除停用词和字符正则化,剖析器使 MongoDB 的全文检索功用愈加智能化和语义化。
9. 姓名空间(namespace)是什么?
在 MongoDB 中,姓名空间(namespace)是指数据库称号和调集称号的组合,用于仅有标识数据库中的调集或索引。姓名空间在 MongoDB 内部经过数据库名.调集名的格局来表明。例如,假如有一个名为 students
的调集在 school
数据库中,其姓名空间便是 school.students
。
姓名空间的效果
-
仅有标识调集或索引:姓名空间经过组合数据库名和调集名,保证了调集或索引在整个数据库中的仅有性,防止了不同数据库或调集之间称号的抵触。
-
内部存储办理:MongoDB 在后台经过姓名空间来办理调集和索引的数据。例如,MongoDB 会用不同的姓名空间来差异调集和其对应的索引,每个索引会有一个共同的姓名空间,以便于存储和检索。
-
差异数据与元数据:MongoDB 中的体系调集(如
system.indexes
)也经过姓名空间来差异它们的元数据内容,协助 MongoDB 更有用地办理数据和索引。
姓名空间的长度束缚
在 MongoDB 中,姓名空间的长度是有限的,一般束缚在 120 字符以内(不同版别束缚略有不同)。这首要是由于 MongoDB 要为姓名空间预留存储空间,并保证功用。
举例
假定咱们有一个 inventory
调集坐落 store
数据库中,那么:
- 调集
inventory
的姓名空间是store.inventory
。 - 假如咱们在
inventory
调集上创立一个索引item_id
,那么这个索引的姓名空间或许是store.inventory.$item_id
。
总结
姓名空间在 MongoDB 中用于仅有标识数据库中的调集和索引,保证了调集和索引称号的仅有性,有助于 MongoDB 内部有用办理和安排数据。
10. 假如用户移除目标的特色,该特色是否从存储层中删去?
是的,假如用户在 MongoDB 中移除目标的特色,并将该更改保存回数据库,那么该特色会从存储层中物理删去。也便是说,该特色及其值将不再存储在 MongoDB 中的文档中。
详细操作流程
-
移除特色:当用户在运用程序中删去 MongoDB 文档目标的某个特色(字段),比方经过
$unset
操作符或将其从目标中移除。 -
更新数据库:删去特色的更改需求经过更新操作提交到 MongoDB。例如,能够运用
$unset
更新操作清晰删去某个字段,或许经过更新整个文档目标来完结这一操作。 -
存储层的改动:一旦更新操作成功,MongoDB 将物理地从存储层中删去该字段,这意味着字段在数据文件中不再占用存储空间。
示例
假定有一个文档如下:
{ "_id": 1, "name": "Alice", "age": 25, "city": "New York" }
假如履行以下指令删去 city
字段:
db.collection.updateOne({ "_id": 1 }, { $unset: { "city": "" } })
履行该操作后,city
字段将被从存储中删去,文档变成:
{ "_id": 1, "name": "Alice", "age": 25 }
注意事项
- 非空特色的物理删去:MongoDB 中未界说的字段不会占用存储空间,因而删去后的文档会削减存储占用。
- 方法灵敏性:MongoDB 是无方法的,删去字段不会引发结构反常,因而字段删去在 MongoDB 中更为灵敏。
总结
在 MongoDB 中,删去文档中的字段特色后,假如该更改被提交到数据库,字段会从存储层物理删去,不会保存在数据存储中。
11. 能否运用日志特征进行安全备份?
运用日志特征进行安全备份是能够完结的,尤其是在涉及到业务日志(例如 MongoDB 的 journal
日志)时,这种办法关于保证数据共同性、康复才能和毛病康复至关重要。
在 MongoDB 中,日志的效果首要是保证数据的耐久性和共同性。日志特征不只用于存储操作的回放,并且有助于在产生毛病后进行数据康复。以下是怎么运用日志特征进行安全备份的一些要害点:
1. MongoDB 的日志机制(Journal)
MongoDB 运用 预写日志(Write-Ahead Logging, WAL),日志文件一般被称为 journal。在每个写操作(例如刺进、更新、删去)被耐久化到数据库之前,这些操作会首要记载到 journal 中。这种机制保证了:
- 数据共同性:即便在忽然断电或溃散的状况下,MongoDB 也能经过 journal 文件康复到最终一个共同的状况。
- 增量备份:经过运用 journal 文件,能够施行增量备份,只保存自前次备份以来的改动。这比完好备份更高效,尤其是在数据量大的状况下。
2. 怎么运用日志特征进行安全备份
- 启用耐久化日志:首要,需求保证 MongoDB 的 journal 功用已启用,这样一切数据写操作都将被记载到 journal 中。默许状况下,MongoDB 会在每个写操作后改写 journal 文件。
- 备份日志文件:在履行完好备份的一起,能够定时备份 journal 文件。经过这种办法,能够捕捉到自前次备份以来的数据改动,并保证即便备份期间产生毛病,数据也能够康复。
- 日志回放:在康复数据时,假如运用了增量备份(包含日志文件),能够回放 journal 中的日志条目,将备份康复到最终一个共同的状况。这意味着能够完结点-in-time(PIT)康复,即康复到特定时刻点的数据状况。
3. 运用 MongoDB 的 oplog
进行备份
在散布式 MongoDB 集群(特别是仿制集)中,能够运用 oplog(操作日志)来完结安全备份。oplog 是 MongoDB 仿制会集的一个环形日志,记载一切的写操作。经过备份和剖析 oplog,您能够:
- 增量备份:备份 oplog 中的改动记载,坚持与主数据库的共同性。
- 点-in-time 康复:经过从备份康复数据,并回放 oplog 日志,能够将数据康复到特定的时刻点。
4. 备份东西与日志的结合运用
MongoDB 供给了多种备份东西,如 mongodump
和 mongorestore
,以及针对散布式环境的 mongodump
增量备份功用。经过这些东西,您能够:
- 定时备份:定时进行完好备份,一起备份 journal 文件或 oplog。
- 康复机制:在康复时,运用备份的 journal 文件或 oplog 康复操作,保证数据的共同性。
5. 安全性和日志的加密
为了增强安全性,日志文件(包含 journal 和 oplog)应当加密存储,保证数据在备份和康复进程中不被走漏或篡改。MongoDB 支撑数据加密,能够经过 加密存储引擎 或 文件体系加密 维护数据。
总结
经过运用日志特征(如 journal 或 oplog),MongoDB 能够完结有用的安全备份。日志不只协助完结增量备份和康复,并且还能保证即便在毛病产生时,数据依然能够康复到共同的状况。运用这些日志特征进行备份是数据库安全战略中的要害组成部分。
12. 答应空值 null 吗?
在 MongoDB 中,答应空值(null
)是能够的,MongoDB 对字段值没有严厉的束缚,除非你显式设置某些束缚。null
是一种合法的数据类型,能够作为文档中字段的值存在。以下是关于 MongoDB 中 null
处理的一些要害点:
1. null
值的答应性
- MongoDB 答应将字段的值设置为
null
,这意味着该字段能够存储空值。 - 例如,以下文档中,
age
字段被设置为null
:{ "_id": 1, "name": "Alice", "age": null }
2. 与其他数据的差异
null
与不存在:在 MongoDB 中,字段的null
值与字段彻底不存在(没有界说)的状况是不同的。一个字段存在但其值为null
,表明字段的值清晰设置为空,而字段彻底不存在表明没有为该字段供给任何值。- 例如:
- 文档 1:
{ "_id": 1, "name": "Alice", "age": null }
——age
字段存在,值为null
。 - 文档 2:
{ "_id": 2, "name": "Bob" }
——age
字段不存在。
- 文档 1:
3. 查询 null
值
- 在查询时,能够运用
null
来查找字段值为null
的文档。例如: