分布式搜索引擎es 面试突击

es elastocsearch

倒排索引是在数据查询之前建立,在查询的时候可以直接通过关键词定位到文档内容。用空间换时间

分布式架构原理说一下?

es底层是基于lucene来的   大概就是一个用于全文检索的jar包

用es来做分布式的搜索引擎  可以承载一秒钟几千的搜索

es用来存储数据的基本单位是索引。

index:mysql里的一张表

type:一个index里可以有多个type,每个type的字段都是差不多的,但是有一些略微的差别

比如mysql中的表  有些订单是实物订单,有些是游戏点卡。两种订单大部分字段一样,但是少部分字段可能有略微的差别。

mapping代表了对这个type表结构的定义,定义了这个type中每个字段名称,字段是什么类型,然后还有这个字段的各种配置

document:往index里的一个type里面写一条数据,叫做一条document,一条document代表了mysql中某个表的一行,每个document有多个field,每个field就代表了document中一个字段的值

架构:

每台机器中有一个es进程,每个es进程中有多个shard,每个shard都会在其他的某个机器上有一个副本   一个索引的数据会被分布式存储在多个shard上面    primary为主版本,replica为副版本

如果说masterNode节点(代表一个机器)突然挂了,那么es会重新选举一个新的节点成为masterNode     原本需要的不是shard01跟shard02么  此时新的masterNode里面是02跟03,02是replica Shard  此时会将它变成primary Shard   

kafka是只能在lead里面读写   而es是可以在primary里面写读写  可以在replica里面读

当刚刚宕机了的节点恢复后,它里面的shard02会变成replica shard

写入与查询的工作原理?

客户端可以挑任意一个进程去写,进去以后  如果是找到了replica节点,那么replica会把数据路由到primary中,写进primary,然后primary会将数据同步到replica中

写进shard怎么写的?

在写进shard之后  会写进内存buffer中,同时会写进tanslog日志中,每隔一段时间会把buffer中的数据刷进磁盘,refresh操作->刷到segmentFile中,segmentfile 中就存储最近1秒内buffer中写入的数据  刷到segmentfile之前会先进os cache操作系统级别的一个内存缓存中 为什么说es是准实时的,因为是每隔1秒refresh一次,写入的数据1秒后才能被看到

这样一直重复,新的数据不断进入buffer和translog中,不断将buffer数据写入一个又一个新的segment file中去,每次refresh完buffer清空,tanslog保留,随着过程推进,translog会变得越来越大,当translog达到一定长度的时候,就会触发conmit操作

commit操作:1写comimit point  2 OS cache数据fsync强刷到磁盘上去 3.清空translog日志文件

一般不叫commit  一般叫flash操作

translog主要是用来做数据的恢复  内存如果宕机 那么就可以根据translog来做一个恢复

1.他是准实时的,数据写入一秒后可以搜索到,2可能会丢失数据的,你的数据有5秒的时间停留在buffer、translog、segment file  os cache中  

此时如果宕机  可能会导致五秒的数据丢失

如果你希望一定不丢数据的话 ,可以设置参数,每次写入一条数据,都是直接写入buffer,同时写入磁盘中的translog

删除数据:有个.del的文件  如果某条数据被删除了,.del文件中会标记这条数据。然后你就不会搜索到这条数据了

merge操作:三个segment合并成一个segment,如果原来的segment中某条数据被标志成.del  那么在合并后  它就没了  被物理删除了

读数据过程:不断轮询 每次随机找一个shard去读,

在几十亿数量级场景下如何优化查询性能?

仅仅只是写入es中要用来检索的少数几个字段就可以了 , fileSystemcache里面的内存要大一点

你最好写入es的数据小于等于 fileSystem cache   最好让查询大量的命中filesystemcache

数据预热:经常要访问的数据 把他刷到filesystemCache中  就是从内存拿  而不是磁盘

比如电商 你可以吧一些平时查看得比较多的商品,热数据提前后台搞个程序,每隔一分钟,自己主动访问一次,刷到filesystemCache中去

冷热分离:  就是经常用的数据放在一张表里面,不经常用的放在另一个shard里面

用es做分页,越往后翻越慢

两个思路来解决:

1.不允许深度分页

2.默认翻得越深,性能越差

微博:可以用scroll  api

其实现在很多产品是不能随意翻页的   做成的是往下拉的这种  而不是说一下从一百页跳到200页

生产环境的分布式搜索引擎是怎么部署的?

中小型公司:

 

集群部署了5台机器,每台机器是6核64G的,集群总内存是320G

日增量数据大概是2000万条,每天日常增量数据大概是500MB,每月

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/19882.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于分布鲁棒联合机会约束的能源和储备调度(Matlab代码实现)

💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥 🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 …

CloudCompare二次开发之如何通过PCL进行点云滤波?

文章目录 0.引言1.CloudCompare界面设计滤波(filter)按钮2.PassThrough直通滤波器3.VoxelGrid体素滤波器4.UniformSampling均匀采样5.StatisticalOutlierRemoval统计滤波器6.RadiusOutlierRemoval半径滤波器7.ConditionRemoval条件滤波器8.ProjectInliers投影滤波器9.ModelOutl…

写给程序员Android Framework 开发,

前言 在 Android 开发者技能中,如果想进大厂,一般拥有较好的学历可能有优势一些。但是如果你靠硬实力也是有机会的,例如死磕Framework。Framework 知识广泛应用在Android各个领域中,重要性显而易见。 成为一名Android Framework…

maven学习总结

生命周期 每个生命周期的各个环节都是由各种插件完成!!!Maven有三个相互独立的生命周期(Maven的这三个生命周期不能看成一个整体)!!! 我们在开发中描述的项目的生命周期&#xff0…

互联网营销之何谓真需求-想知道如何挖掘真需求看这篇就对了

互联网营销思维是以爆品为核心的迭代思维,本文结合“生日蛋糕”、“方便面”、“蜜雪冰城”几个小例子,以及我们具体的工作,展开聊聊什么是“真需求”。 1. 互联网营销和传统营销的区别 1.1 传统的营销思维: “定位4P&#xff0…

如何修复d3dcompiler_47.dll缺失?多种解决方法分享

在使用Windows操作系统的过程中,有时候会遇到d3dcompiler_47.dll缺失的情况。这个问题可能会导致某些应用程序无法正常运行,因此需要及时解决。本文将介绍如何修复d3dcompiler_47.dll缺失的问题。 一.什么是d3dcompiler_47.dll D3dcompiler_47.dll是Di…

基于html+css图展示57

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

前后端图片交互的简易方式

前后端图片交互的简易方式 一、交互方式说明二、前后端具体代码实现前端具体代码实现后端具体代码实现效果 测试结果 一、交互方式说明 在项目的实际开发中,难免会遇到前端需要渲染数据库中保存的图片,那咱知道图片也属于一种文件,不好保存到…

【零基础QQ机器人开发三】程序上云篇

前言:本文为大家带来QQ机器人程序上云的教程,环境搭建请参考下面链接 【0基础QQ机器人开发】基于go-cqhttp的QQ机器人开发教程,仅供自学 【零基础QQ机器人开发二】服务器篇 文章目录 程序Logger类StatuStore类MultiFunc类QQBot类main.py 前言&#xff1a…

高级Web题库

高级Web题库 For ZPT 声明 一切开发旨在学习,请勿用于非法用途 by rick rick 关注 永雏塔菲喵 永雏塔菲喵 选择题 第1题 知识点:CSS 题目:设置text-decoration属性的删除线的值为( )。 选项: A underlin…

Pytest自动化测试框架一些常见的插件

Pytest拥有丰富的插件架构,超过800个以上的外部插件和活跃的社区,在PyPI项目中以“ pytest- *”为标识。 本篇将列举github标星超过两百的一些插件进行实战演示。 插件库地址:http://plugincompat.herokuapp.com/ 1、pytest-html&#xff…

冗余-安全设计的基石

冗余构成原理就是在系统中采用2套中央处理器(CPU)单元,其中1套为工作主机,1套为热备,一旦工作主机发生故障,热备的CPU将自动投入工作,此时热备的CPU变为工作主机,原工作主机故障处理…

a标签属性href的多种写法

众所周知,a标签的最重要功能是实现超链接和锚点。而且,大多数人认为a标签最重要的作用是实现超链接,其实不单单是实现超链接的方法,今天新起点博客就来整理下a标签中href的几种用法。 1、a href“[removed]js_method();” 这是常用…

Android aidl及binder基础知识巩固

作者:义华 1、什么是binder binder是android framework提供的,用于跨进程方法调用的机制,具有安全高效等特点。 我们知道,在 Android 系统中,每个应用程序都运行在一个独立的进程中,各个进程之间需要进行…

chatGPT提问,BGP内容

ChatGPT提问:提问框架 背景角色任务要求 动态路由:内部网关协议:如RIP ISIS OSPF 在同一个公司内部运行的路由协议 外部网关协议:如 BGP 在不同公司之间运行的路由协议 AS:自治系统 每个自治系统都有唯一的…

玩机搞机-----安卓全机型 ADB FAST 各种指令解析说明与操作【二】基础联机

安卓全机型 玩机 搞机 ADB FAST 各种指令解析说明与操作_adb线刷命令_安卓机器的博客-CSDN博客 今天对上个帖子不足的地方进行补正。方便友友进行基础的联机操作,很多时候我们用adb指令的时候会有各种奇奇怪怪的问题。例如同一个机型,同一个指令。有时候…

OpenCL编程指南-4.4矢量操作符

矢量操作符 如下描述了可用于矢量数据类型或矢量和标量数据类型组合的各类操作符。 算术操作符 算术操作符(加()、减(–)、乘(*)和除(/)),可以作用于内置整数、浮点标量和矢量数…

AWS 中的另外一种远程工具 AWS Session Manager

作者:SRE运维博客 博客地址:https://www.cnsre.cn/ 文章地址:https://www.cnsre.cn/posts/230129126154/ 相关话题:https://www.cnsre.cn/tags/aws/ 背景需求 因为项目的安全性。为了避免项目的服务器暴露在公网中。很多时候我们…

Python时间模块:time和datetime的区别与用法

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 目录标题 前言一. Python中表示时间的两种方式:二. time三. datetime1. datetime.datetime2.datetime.timedelta 尾语 💝 一. Python中表示时间的两种方式: 时间戳:相对于197…

OpenCL编程指南-3.2OpenCL上下文

OpenCL上下文 上下文是所有OpenCL应用的核心。上下文为关联的设备、内存对象(例如,缓冲区和图像)以及命令队列(在上下文和各设备之间提供一个接口)提供了一个容器。正是上下文驱动着应用程序与特定设备以及特定设备之…