MongoDB面试精华:45题详解+分片、副本集与备份策略

需积分: 0 0 下载量 64 浏览量 更新于2024-08-03 收藏 13KB DOCX 举报
MongoDB 是一种流行的文档型数据库系统,以其高性能、高可用性和易于扩展而闻名。以下是关于 MongoDB 的一些关键知识点: 1. **定义与特点**: MongoDB 是一种非关系型数据库,使用 JSON 风格的文档存储数据,支持动态 schema,允许灵活的数据模型,适合处理大量半结构化数据。 2. **命名空间**: 在 MongoDB 中,集合名与数据库名组合起来形成一个命名空间,这是数据库逻辑结构的基本单位。例如,`mydatabase.mycollection`。 3. **分片**: 分片是 MongoDB 中的一种数据分布策略,通过在多台服务器上分散数据来提高性能和容量。数据被水平分割成小块(碎片),并通过分片键均匀分布在不同的分片上。Mongos 负责路由请求到正确的分片。 4. **Mongos 节点**: Mongos 是一个监控服务器,负责协调分片集群。通过 `db_adminCommand("connPoolStats")` 可以查看其连接状态和性能指标。 5. **副本集**: 副本集用于数据冗余和高可用性。由一组互相复制的 MongoDB 实例组成,其中一个为主节点,其他为从节点。主节点发生故障时,可以从辅助节点自动切换。 6. **数据复制**: MongoDB 的复制确保数据在多个节点间同步,增强数据可靠性。复制过程涉及主从节点之间的实时数据传输。 7. **模式设计**: 在创建模式时,需考虑架构设计、数据组织(如文档内嵌还是引用)、连接管理(写入时连接)以及性能优化(针对常见查询场景)。 8. **操作语法**: - 创建集合:`db.createCollection(name, options)` - 删除集合:`db.collection.drop()` 9. **Profiler**: MongoDB Profiler 是一个用于监控数据库性能的工具,通过它可以识别查询性能瓶颈,帮助优化查询策略。 10. **数据迁移与备份**: - moveChunk 操作用于在分片期间移动旧数据文件,这些文件会被暂时保留,操作完成后可安全删除。 - MongoDB 提供了 journaling 功能,用于安全备份,确保数据一致性。 11. **ObjectID 构造**: MongoDB 中的 ObjectID 是每个文档的唯一标识符,由时间戳、机器 ID、进程 ID 和递增计数等部分组成。 通过掌握以上知识点,你可以更好地理解和应对 MongoDB 相关的面试问题,无论是技术实现还是理论理解都有了扎实的基础。

com.mongodb.MongoSocketOpenException: Exception opening socket at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-4.6.1.jar:na] at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:180) ~[mongodb-driver-core-4.6.1.jar:na] at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:193) ~[mongodb-driver-core-4.6.1.jar:na] at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:157) ~[mongodb-driver-core-4.6.1.jar:na] at java.lang.Thread.run(Thread.java:750) [na:1.8.0_371] Caused by: java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[na:1.8.0_371] at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81) ~[na:1.8.0_371] at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:476) ~[na:1.8.0_371] at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:218) ~[na:1.8.0_371] at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:200) ~[na:1.8.0_371] at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:162) ~[na:1.8.0_371] at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394) ~[na:1.8.0_371] at java.net.Socket.connect(Socket.java:606) ~[na:1.8.0_371] at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:107) ~[mongodb-driver-core-4.6.1.jar:na] at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:79) ~[mongodb-driver-core-4.6.1.jar:na] at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ~[mongodb-driver-core-4.6.1.jar:na] ... 4 common frames omitted

2023-06-02 上传