面试题答案
一键面试确保多个操作原子性和一致性
- 多文档事务:
- MongoDB 4.0 及以上版本支持多文档事务。在事务中,所有操作要么全部成功提交,要么全部回滚。例如,在一个银行转账事务中,从账户A扣除金额和向账户B增加金额这两个操作会被作为一个事务处理。如果向账户B增加金额失败,那么从账户A扣除金额的操作也会回滚,保证数据的一致性。
- 事务通过使用两阶段提交(2PC)协议来实现原子性和一致性。在第一阶段(准备阶段),MongoDB会检查事务中的所有操作是否可以执行,每个参与的副本集节点会对操作进行预评估。如果所有节点都准备好,进入第二阶段(提交阶段),所有操作会被持久化,从而确保原子性和一致性。
- 隔离级别:
- MongoDB 支持可重复读(Repeatable Read)隔离级别。在一个事务中,多次读取相同的数据,会返回相同的结果,即使在事务执行期间其他事务修改了该数据。这有助于保证事务内数据的一致性。例如,在一个报表生成事务中,在事务执行过程中读取的数据不会因为其他并发事务的修改而改变,确保报表数据的准确性。
认证流程
- 客户端发起请求:
- 客户端向MongoDB服务器发送带有认证信息(如用户名、密码等)的连接请求。例如,使用MongoDB的官方驱动程序连接时,会在连接字符串中指定用户名和密码等认证参数。
- 服务器验证:
- MongoDB服务器接收到请求后,会根据配置的认证机制(如SCRAM - SHA - 1、SCRAM - SHA - 256等)对客户端提供的认证信息进行验证。服务器会查询存储用户信息的系统集合(如
admin.system.users
),核对用户名和密码等信息是否匹配。
- MongoDB服务器接收到请求后,会根据配置的认证机制(如SCRAM - SHA - 1、SCRAM - SHA - 256等)对客户端提供的认证信息进行验证。服务器会查询存储用户信息的系统集合(如
- 认证成功或失败处理:
- 如果认证成功,服务器会为客户端分配一个会话,客户端后续的操作可以在该会话下进行。如果认证失败,服务器会返回错误信息,客户端连接失败,无法执行后续的数据库操作。