四.mongodb问答
四.mongodb
4.1 mongodb的优势有哪些
-
高性能:MongoDB是一种面向文档的数据库,能够快速处理大量数据。
-
可扩展性:MongoDB支持水平扩展
-
强大的查询功能
-
高可用性和可靠性:MongoDB具有内置的复制和故障转移功能\
-
分布式计算
-
低成本
-
易于与前端应用集成:使用JSON作为其原生数据格式
缺点
-
不支持事务操作
-
占用空间较大:为了避免硬盘碎片和提高数据访问效率,会预分配较大的硬盘空间。JSON格式在存储数据时也会占用一定的额外空间。
4.2 什么是mongodb中的document
它是基本的数据单元,类似于关系型数据库中的行
4.3 什么场景下会使用mongodb
MongoDB 是一种面向文档(再次强调)的数据库,特别适用于以下场景:
1. 频繁的数据写入和更新
MongoDB 的文档模型和灵活的模式允许快速写入和更新数据,而不会产生性能问题。
2. 大量非结构化数据
MongoDB 可以存储和处理大量非结构化数据,例如 JSON 文档。
3. 水平扩展
MongoDB 可以通过分片在多个服务器上水平扩展,以处理海量数据。
4. 高并发性
MongoDB 针对高并发环境进行了优化,可以在具有大量同时连接和查询的应用程序中提供良好的性能。
5.实时数据分析
MongoDB 的聚合框架和索引允许进行快速的实时数据分析。
7. 移动和 Web 应用程序
MongoDB 轻量级、易于部署。
4.4 mongodb中的分片是什么意思
分片是将数据拆分,散到不同的机器上,不需要功能强大的大型计算机就可以储存更多的数据,处理更多的负载。有时也叫分区
4.5 什么时候需要分片:
a.机器的磁盘不够用了
b.单个mongod已经不能满足些数据的性能需要了
c.想将大量数据放在内存中提高性能
4.6 如何将数据分布在不同的chunk上
分片键的选择、chunks的自动创建与管理,以及MongoDB的均衡器(Balancer)对chunks的自动调整。
4.7 mongodb支持哪些类型的索引
- 单键索引(Single Field Index)
- 复合索引(Compound Index)
- 多键索引(Multikey Index)
- 地理空间索引(Geospatial Index)
- 文本索引(Text Index)
- 哈希索引(Hashed Index)
- TTL索引(Time-To-Live Index)
- 部分索引(Partial Index)
- 唯一索引(Unique Index)
4.8 副本集有哪些角色,是做什么的
主节点(Primary)
- 功能:数据操作的主要连接点,负责处理所有的写操作(如插入、更新、删除等)和部分的读操作。它是副本集中唯一可以直接接收写操作的节点。
从节点(Secondary)
- 功能:从节点主要负责复制主节点的数据,保持与主节点数据的一致性。处理读操作,以实现读写分离,从而减轻主节点的压力。
仲裁者(Arbiter)
- 功能:仲裁者不存储任何数据副本,仅参与选举过程并提供投票。帮助确保副本集在发生节点故障时能够选举出新的主节点。
4.9 副本集的主节点选举原则
触发条件
- 主节点故障
- 网络不可达主节点在10秒内未响应其他节点的心跳信息,即认为网络不可达,从而选举启动。
- 人工干预
选举规则
- 票数决定:每个健康的副本集成员都会参与投票,票数最高的节点成为新的主节点。
- 大多数原则:为了成为主节点,一个节点必须获得“大多数”成员的支持。这意味着如果有N个副本集成员(包括仲裁者,但仲裁者不存储数据且主要参与投票),则至少需要N/2+1个成员的投票支持。例如,在包含3个成员的副本集中(其中1个是主节点,1个是从节点,1个是仲裁者),至少需要2个成员的投票支持才能选举出新的主节点。
- 优先级:在选举过程中,具有较高优先级的节点更有可能被选为主节点。优先级的值可以设置为0到1000之间的任何整数,默认值为1。通过设置节点的优先级,管理员可以根据节点的性能和重要性来调整选举的权重。
- 数据一致性:如果两个候选节点的票数相同,则数据最新的节点将获胜。MongoDB使用操作日志(oplog)来记录操作的顺序和细节,并通过比较候选节点的oplog来确定哪个节点具有最新的数据。
防止脑裂
脑裂是指在网络分区的情况下,集群的不同部分各自选出不同的主节点,导致数据不一致和冲突。MongoDB的选举机制通过确保大多数节点的参与来防止脑裂现象的发生。只有当大多数节点达成一致时,才能选举出新的主节点,从而保证了集群的一致性和稳定性。
选举过程
选举过程大致如下:
- 一旦触发选举条件(如主节点故障),副本集成员之间会相互发送选举请求和响应。
- 每个成员根据自己的配置(如优先级)和状态(如健康状态、数据一致性等)来决定投票给哪个候选节点。
- 一旦某个节点获得了大多数选票,它将被确认为新的主节点,并开始处理客户端请求。