[每周一更]-(第125期):模拟面试|NoSQL面试思路解析

news/2024/12/5 9:49:31/

在这里插入图片描述

文章目录

    • 39|Elasticsearch 高可用:怎么保证 Elasticsearch 的高可用?
      • 1. Elasticsearch 的节点有什么角色?一个节点可以扮演多个角色吗?
      • 2. 在实践中,怎么合理安排不同节点扮演的角色?
      • 3. 什么是候选主节点和投票节点?投票节点可以被选为主节点吗?为什么要引入投票节点?
      • 4. 可以说一下你们公司的 Elasticsearch 是如何部署的吗?性能如何?
      • 5. 你用 Elasticsearch 解决过什么问题?为什么用 Elasticsearch?可以用别的框架吗?
      • 6. Elasticsearch 为什么引入分片?为了解决什么问题?
      • 7. 当一个写入请求发送到 Elasticsearch 之后,发生了什么?
      • 8. Elasticsearch 是实时的吗?
      • 9. Elasticsearch 的 Translog 是拿来干什么的?它可以保证数据一定不丢失吗?
      • 10. 什么是 Commit Point?用来干什么?
      • 11. Elasticsearch 在合并段的时候,会影响到已有的查询吗?一个查询怎么知道应该用合并前的段,还是应该用合并后的段?
      • 12. 如果我的写入数据流量很大,怎么保证我的 Elasticsearch 不会崩溃?
      • 13. 你知道什么是协调节点吗?它的作用是什么?怎么保证协调节点高可用?
    • 40|Elasticsearch查询:怎么优化 Elasticsearch 的查询性能?
      • 1. 你的业务写入和查询的性能如何?Elasticsearch 的性能瓶颈是多少?
      • 2. 如何设计 Elasticsearch 的索引?
      • 3. 你有没有优化过 Elasticsearch 的查询性能?怎么优化?为什么可以这么优化?
      • 4. 为什么 Elasticsearch 的分页查询也那么慢?可以怎么优化?
        • 优化方法:
      • 5. 你有没有优化过 Elasticsearch 的 JVM?怎么优化的?
      • 6. 如果 Elasticsearch 经常出现 Full GC,怎么排查和优化?
      • 7. 怎么为 Elasticsearch 选择适合垃圾回收算法?
      • 8. swap 对 Elasticsearch 有什么影响?应该怎么调整?
      • 9. 为什么 Elasticsearch 容易出现文件描述符耗尽的问题?可以怎么优化?
        • 优化措施:
    • 41|MongoDB:MongoDB 是怎么做到高可用的?
      • 1. 你们公司的 MongoDB 是如何部署的?可用性有多高?
      • 2. 你用 MongoDB 解决过什么问题?你为什么要用 MongoDB?用 MySQL 行不行?
      • 3. 和关系型数据库比起来,MongoDB 有哪些优势?
      • 4. MongoDB 是如何分片的?
      • 5. MongoDB 的块是什么?
      • 6. 什么情况下会触发块迁移?怎么迁移?
      • 7. MongoDB 的负载均衡(再平衡)是指什么?
      • 8. MongoDB 的配置服务器有什么作用?
      • 9. MongoDB 的复制机制是怎样的?
      • 10. 为什么 MongoDB 的 oplog 总是很多?
      • 11. 怎么控制 MongoDB 的写入语义?你用的是什么语义?为什么用这个语义?
      • 12. 有没有遇到过配置服务器崩溃的问题?怎么提高配置服务器的可用性?
      • 13. 当 MongoDB 的主节点崩溃之后,如何选出一个新的主节点?
      • 14. 怎么样可以让 MongoDB 在主从选举的时候优先选择同机房的从节点?
    • 42|MongoDB高性能:怎么优化 MongoDB 的查询性能?
      • 1. 你的业务里面使用 MongoDB 的性能如何?能撑住多大的读写流量?
      • 2. 你有没有遇到过 MongoDB 的性能问题?后面是如何解决的?
      • 3. 当我一个查询请求落到了 MongoDB 之上后,MongoDB 是怎么执行这个查询的?
      • 4. mongos 是什么?拿来干什么?怎么优化它的性能?
      • 5. 怎么设计 MongoDB 的索引?怎么判定一个索引是否合适?
      • 6. 什么是 ESR 规则?为何要遵守 ESR 规则?不遵守行不行?
      • 7. 大文档有什么问题?可以怎么解决大文档引发的问题?
      • 8. 什么时候要嵌入文档?有什么优势?
      • 9. 怎么优化 MongoDB 的排序(分页)查询?
      • 10. 为什么要尽可能只查询必要的字段?
      • 11. 怎么优化 MongoDB 所在的操作系统?这些优化为什么会有效果?

39|Elasticsearch 高可用:怎么保证 Elasticsearch 的高可用?

  1. Elasticsearch 的节点有什么角色?一个节点可以扮演多个角色吗?
  2. 在实践中,怎么合理安排不同节点扮演的角色?
  3. 什么是候选主节点和投票节点?投票节点可以被选为主节点吗?为什么要引入投票节点?
  4. 可以说一下你们公司的 Elasticsearch 是如何部署的吗?性能如何?
  5. 你用 Elasticsearch 解决过什么问题?为什么用 Elasticsearch?可以用别的框架吗?
  6. Elasticsearch 为什么引入分片?为了解决什么问题?
  7. 当一个写入请求发送到 Elasticsearch 之后,发生了什么?
  8. Elasticsearch 是实时的吗?
  9. Elasticsearch 的 Translog 是拿来干什么的?它可以保证数据一定不丢失吗?
  10. 什么是 Commit Point?用来干什么?
  11. Elasticsearch 在合并段的时候,会影响到已有的查询吗?一个查询怎么知道应该用合并前的段,还是应该用合并后的段?
  12. 如果我的写入数据流量很大,怎么保证我的 Elasticsearch 不会崩溃?
  13. 你知道什么是协调节点吗?它的作用是什么?怎么保证协调节点高可用?

1. Elasticsearch 的节点有什么角色?一个节点可以扮演多个角色吗?

Elasticsearch 的节点主要有以下几种角色:

  • 主节点(Master Node):负责集群的管理和协调,如索引创建、删除和集群状态管理。
  • 数据节点(Data Node):用于存储数据和执行数据相关的操作(如搜索、聚合)。
  • 协调节点(Coordinating Node):处理客户端请求,并将请求路由到相应的节点。
  • 超时节点(Ingest Node):用于预处理文档(如数据清洗、转换)后再索引。

一个节点可以扮演多个角色,例如一个数据节点也可以是主节点。

2. 在实践中,怎么合理安排不同节点扮演的角色?

在实践中,可以根据集群规模和资源情况合理安排节点角色:

  • 小型集群:可以将少数节点设置为数据节点和主节点,简化部署。
  • 中型和大型集群:建议分离主节点和数据节点,主节点负责管理,数据节点专注于数据存储和查询,以提高性能和稳定性。
  • 添加协调节点:在流量高的情况下,可以增加专门的协调节点,减轻数据节点和主节点的负担。

3. 什么是候选主节点和投票节点?投票节点可以被选为主节点吗?为什么要引入投票节点?

  • 候选主节点(Candidate Master):在选举过程中,任何节点都可以成为候选主节点。
  • 投票节点(Voting Node):参与主节点选举的节点。投票节点是具备选举资格的节点,但未必是当前主节点。

投票节点可以被选为主节点。引入投票节点的原因是为了提高选举的可靠性和容错能力,确保在网络分区或节点故障的情况下,能够通过多数投票机制选举出有效的主节点。

4. 可以说一下你们公司的 Elasticsearch 是如何部署的吗?性能如何?

我们公司的 Elasticsearch 部署通常包括以下策略:

  • 多节点集群:采用至少三个主节点以确保高可用性。
  • 数据和主节点分离:数据节点专门负责存储和查询,主节点负责集群管理。
  • 监控与备份:使用监控工具(如 Elasticsearch X-Pack)跟踪集群健康状态,定期备份数据。

这种部署策略下,性能表现良好,能够高效处理大规模数据和查询请求。

5. 你用 Elasticsearch 解决过什么问题?为什么用 Elasticsearch?可以用别的框架吗?

我曾用 Elasticsearch 解决过以下问题:

  • 日志分析:使用 Elasticsearch 进行大规模日志数据的索引和分析,便于快速查询和可视化展示。
  • 全文检索:通过 Elasticsearch 的强大搜索功能,实现复杂的全文检索需求。

选择 Elasticsearch 的原因包括其高性能、分布式特性和丰富的查询功能。虽然可以使用其他框架(如 Solr 或传统数据库),但 Elasticsearch 在实时性和处理大数据方面表现更优。

6. Elasticsearch 为什么引入分片?为了解决什么问题?

Elasticsearch 引入分片的原因主要包括:

  • 水平扩展:通过将数据划分为多个分片,可以将数据分布到多个节点上,实现水平扩展。
  • 并行处理:分片可以并行处理搜索请求,提高查询性能。
  • 容错性:可以为每个分片创建副本,提高数据的可用性和容错能力。

7. 当一个写入请求发送到 Elasticsearch 之后,发生了什么?

当一个写入请求发送到 Elasticsearch 时,主要步骤如下:

  1. 路由:根据文档 ID 和配置的路由算法确定目标分片。
  2. 索引:将文档写入目标分片,并更新相关的索引结构。
  3. Translog:将写入操作记录到 Translog,以确保操作的持久性。
  4. 刷新:根据刷新策略,将内存中的文档更新到硬盘索引中,确保可查询性。

8. Elasticsearch 是实时的吗?

Elasticsearch 不是严格的实时系统,而是近实时(Near Real-Time,NRT)系统。数据写入后,通常需要经过短暂的延迟才能被查询到,这个延迟由配置的刷新间隔决定,默认是 1 秒。

9. Elasticsearch 的 Translog 是拿来干什么的?它可以保证数据一定不丢失吗?

Translog(事务日志)用于记录未持久化的写入操作,以确保在发生故障时可以恢复数据。它的主要作用包括:

  • 数据持久化:在写入操作后,Translog 确保操作记录不会丢失。
  • 故障恢复:在节点崩溃或重启时,可以通过 Translog 恢复丢失的写入操作。

虽然 Translog 大幅提高了数据的可靠性,但并不能保证数据一定不丢失。如果 Translog 在刷新之前被删除或损坏,仍有可能导致部分数据丢失。

10. 什么是 Commit Point?用来干什么?

Commit Point 是指在写入操作完成后,数据最终被持久化到硬盘的时间点。它用于确保数据的持久性和一致性,主要作用包括:

  • 保证数据一致性:确保所有写入操作在特定时间点被可靠地持久化。
  • 优化性能:通过将多个写入操作合并,减少对硬盘的写入频率,提高性能。

11. Elasticsearch 在合并段的时候,会影响到已有的查询吗?一个查询怎么知道应该用合并前的段,还是应该用合并后的段?

在合并段的过程中,Elasticsearch 设计了非阻塞的查询机制,合并不会影响到已有的查询。一个查询会同时访问合并前和合并后的段,查询引擎会智能地决定使用哪个段来获取数据,确保查询结果的一致性和正确性。

12. 如果我的写入数据流量很大,怎么保证我的 Elasticsearch 不会崩溃?

为保证高流量写入下 Elasticsearch 不会崩溃,可以采取以下措施:


http://www.ppmy.cn/news/1552121.html

相关文章

C#tabcontrol如何指定某个tabItem为默认页

// Selects tabPage2 using SelectedTab.this.tabControl1.SelectedTab tabPage2; 参考链接 TabControl.SelectedTab 属性 (System.Windows.Forms) | Microsoft Learnhttps://learn.microsoft.com/zh-cn/dotnet/api/system.windows.forms.tabcontrol.selectedtab?viewnetfr…

Python函数内部与函数外部执行相同语句的显存区别

执行代码 mport torch import torch.cuda # 设置设备 device torch.device(cuda if torch.cuda.is_available() else cpu) # 参数设置 B 64 # batch size L 32 # sequence length C 512 # embedding dimension H 8 # number of heads D C // H # head dimension # …

基于STM32的智能无人机自主飞行与目标识别系统设计

目录 引言系统需求分析 2.1 功能需求 2.2 硬件需求 2.3 软件需求系统设计 3.1 总体架构 3.2 各模块设计系统实现 4.1 硬件实现 4.2 软件实现系统调试与优化总结与展望 1. 引言 随着无人机技术的快速发展,无人机在军事侦察、环境监测、物流配送等领域的应用逐渐增多…

Spring Web开发注解和请求(1)

大家好我是小帅,今天我们来学习Spring Web MVC框架(入门级) 文章目录 1. 什么是 Spring Web MVC?1.1 MVC 定义1.2 什么是Spring MVC ? 2. 学习Spring MVC2.1 建⽴连接第一个spring MVC程序 3. web开发注解的解释3.1RestControlle…

在html页面显示一个变量,而这个变量中有xss脚本,如何安全的把这个变量原样展示出来

当你想要在HTML页面安全地展示一个可能包含XSS(跨站脚本攻击)脚本的变量原样内容时,可以通过以下几种常见的方式来实现安全展示: 方法一:使用文本节点 在JavaScript中,当你要将变量插入到HTML页面的某个元…

安全关系型数据库查询新选择:Rust 语言的 rust-query 库深度解析

在当今这个数据驱动的时代,数据库作为信息存储和检索的核心组件,其重要性不言而喻。然而,对于开发者而言,如何在保证数据安全的前提下,高效地进行数据库操作却是一项挑战。传统的 SQL 查询虽然强大,但存在诸…

SOA、分布式、微服务之间的关系和区别?

在当今的软件开发领域,SOA(面向服务架构)、分布式系统和微服务是三个重要的概念。它们各自有着独特的特性和应用场景,同时也存在着密切的关系。以下是关于这三者之间关系和区别的详细分析: 关系 分布式架构的范畴&…

按列数据拆分到工作表-Excel易用宝

我们部门有这样一份数据表,现在老板想把每个月的数据拆分成一个独立的工作表,要保持表头和表尾的数据结构,实际每一月的数据只占用了一列,像这样的拆分表格要如何操作呢? 单击Excel易用宝,合并与拆分&#…