当前位置: 首页 > news >正文

深圳网站建设服务比较便宜移动版网站开发

深圳网站建设服务比较便宜,移动版网站开发,摄影设计说明模板,公众号开发工具有哪几种文章目录 1.简单介绍下ES#xff1f;2.简单介绍当前可以下载的ES稳定版本#xff1f;3.安装ES前需要安装哪种软件#xff1f;4.请介绍启动ES服务的步骤#xff1f;5.ES中的倒排索引是什么#xff1f;6. ES是如何实现master选举的#xff1f;7. 如何解决ES集群的脑裂问题8… 文章目录 1.简单介绍下ES2.简单介绍当前可以下载的ES稳定版本3.安装ES前需要安装哪种软件4.请介绍启动ES服务的步骤5.ES中的倒排索引是什么6. ES是如何实现master选举的7. 如何解决ES集群的脑裂问题8. 详细描述一下ES索引文档的过程9. 详细描述一下ES更新和删除文档的过程10. 详细描述一下ES搜索的过程11.索引是什么?12.请解释什么是分片(SHARDs)?13.什么是副本(REPLICA), 他的作用是什么14.在ES集群中增加和创建索引的步骤是什么15.ES支持哪些类型的查询16.Elasticsearch在部署时对Linux的设置有哪些优化方法17.什么是ElasticSearch中的编译器18.拼写纠错是如何实现的19.ElasticSearch中的分析器是什么20.是否了解字典树21. 在并发情况下ES如果保证读写一致22. ES对于大数据量上亿量级的聚合如何实现23. 对于GC方面在使用ES时要注意什么24. 说说你们公司ES的集群架构索引数据大小分片有多少以及一些调优手段参考 1.简单介绍下ES ES是一种存储和管理基于文档和半结构化数据的数据库搜索引擎。它提供实时搜索ES最近几个版本才提供实时搜索以前都是准实时和分析结构化、半结构化文档、数据和地理空间信息数据。 2.简单介绍当前可以下载的ES稳定版本 最新的稳定版本是8.11.3 3.安装ES前需要安装哪种软件 JDK 8或者 Java 1.8.0 4.请介绍启动ES服务的步骤 A 启动步骤如下 Windows下进入ES文件夹的bin目录下点击ElasticSearch.bat开始运行 打开本地9200端口http://localhost:9200, 就可以使用ES了 5.ES中的倒排索引是什么 传统的检索方式是通过文章逐个遍历找到对应关键词的位置。 倒排索引是通过分词策略形成了词和文章的映射关系表也称倒排表这种词典 映射表即为倒排索引。 其中词典中存储词元倒排表中存储该词元在哪些文中出现的位置。 有了倒排索引就能实现 O(1) 时间复杂度的效率检索文章了极大的提高了检索效率。 加分项 倒排索引的底层实现是基于FSTFinite State Transducer数据结构。 Lucene 从 4 版本后开始大量使用的数据结构是 FST。FST 有两个优点 1空间占用小。通过对词典中单词前缀和后缀的重复利用压缩了存储空间 2查询速度快。O(len(str)) 的查询时间复杂度。 6. ES是如何实现master选举的 前置条件 1只有是候选主节点mastertrue的节点才能成为主节点。 2最小主节点数min_master_nodes的目的是防止脑裂。 Elasticsearch 的选主是 ZenDiscovery 模块负责的主要包含 Ping节点之间通过这个RPC来发现彼此和 Unicast单播模块包含一个主机列表以控制哪些节点需要 ping 通这两部分 获取主节点的核心入口为 findMaster选择主节点成功返回对应 Master否则返回 null。 选举流程大致描述如下 第一步确认候选主节点数达标elasticsearch.yml 设置的值 discovery.zen.minimum_master_nodes; 第二步对所有候选主节点根据nodeId字典排序每次选举每个节点都把自己所知道节点排一次序然后选出第一个第0位节点暂且认为它是master节点。 第三步如果对某个节点的投票数达到一定的值候选主节点数n/21并且该节点自己也选举自己那这个节点就是master。否则重新选举一直到满足上述条件。 补充 这里的 id 为 string 类型。master 节点的职责主要包括集群、节点和索引的管理不负责文档级别的管理data 节点可以关闭 http 功能。 7. 如何解决ES集群的脑裂问题 所谓集群脑裂是指 Elasticsearch 集群中的节点比如共 20 个其中的 10 个选了一个 master另外 10 个选了另一个 master 的情况。 当集群 master 候选数量不小于 3 个时可以通过设置最少投票通过数量discovery.zen.minimum_master_nodes超过所有候选节点一半以上来解决脑裂问题 当候选数量为两个时只能修改为唯一的一个 master 候选其他作为 data 节点避免脑裂问题。 8. 详细描述一下ES索引文档的过程 这里的索引文档应该理解为文档写入 ES创建索引的过程。 第一步客户端向集群某节点写入数据发送请求。如果没有指定路由/协调节点请求的节点扮演协调节点的角色。 第二步协调节点接受到请求后默认使用文档 ID 参与计算也支持通过 routing得到该文档属于哪个分片。随后请求会被转到另外的节点。 bash# 路由算法根据文档id或路由计算目标的分片id shard hash(document_id) % (num_of_primary_shards)第三步当分片所在的节点接收到来自协调节点的请求后会将请求写入到 Memory Buffer然后定时默认是每隔 1 秒写入到F ilesystem Cache这个从 Momery Buffer 到 Filesystem Cache 的过程就叫做 refresh 第四步当然在某些情况下存在 Memery Buffer 和 Filesystem Cache 的数据可能会丢失ES 是通过 translog 的机制来保证数据的可靠性的。其实现机制是接收到请求后同时也会写入到 translog 中当 Filesystem cache 中的数据写入到磁盘中时才会清除掉这个过程叫做 flush 第五步在 flush 过程中内存中的缓冲将被清除内容被写入一个新段段的 fsync 将创建一个新的提交点并将内容刷新到磁盘旧的 translog 将被删除并开始一个新的 translog。 第六步flush 触发的时机是定时触发默认 30 分钟或者 translog 变得太大默认为 512 M时。 补充关于 Lucene 的 Segement Lucene 索引是由多个段组成段本身是一个功能齐全的倒排索引。段是不可变的允许 Lucene 将新的文档增量地添加到索引中而不用从头重建索引。对于每一个搜索请求而言索引中的所有段都会被搜索并且每个段会消耗 CPU 的时钟周、文件句柄和内存。这意味着段的数量越多搜索性能会越低。为了解决这个问题Elasticsearch 会合并小段到一个较大的段提交新的合并段到磁盘并删除那些旧的小段。段合并 9. 详细描述一下ES更新和删除文档的过程 删除和更新也都是写操作但是 Elasticsearch 中的文档是不可变的因此不能被删除或者改动以展示其变更。 磁盘上的每个段都有一个相应的 .del 文件。当删除请求发送后文档并没有真的被删除而是在 .del 文件中被标记为删除。该文档依然能匹配查询但是会在结果中被过滤掉。当段合并时在 .del 文件中被标记为删除的文档将不会被写入新段。 在新的文档被创建时Elasticsearch 会为该文档指定一个版本号当执行更新时旧版本的文档在 .del 文件中被标记为删除新版本的文档被索引到一个新段。旧版本的文档依然能匹配查询但是会在结果中被过滤掉。 10. 详细描述一下ES搜索的过程 搜索被执行成一个两阶段过程即 Query Then Fetch Query阶段 查询会广播到索引中每一个分片拷贝主分片或者副本分片。每个分片在本地执行搜索并构建一个匹配文档的大小为 from size 的优先队列。PS在搜索的时候是会查询Filesystem Cache的但是有部分数据还在Memory Buffer所以搜索是近实时的。 每个分片返回各自优先队列中 所有文档的 ID 和排序值 给协调节点它合并这些值到自己的优先队列中来产生一个全局排序后的结果列表。 Fetch阶段 协调节点辨别出哪些文档需要被取回并向相关的分片提交多个 GET 请求。每个分片加载并 丰富 文档如果有需要的话接着返回文档给协调节点。一旦所有的文档都被取回了协调节点返回结果给客户端。 11.索引是什么? ES集群包含多个索引每个索引包含一种表表包含多个文档并且每个文档包含不同的属性。 12.请解释什么是分片(SHARDs)? 随着索引文件的增加磁盘容量、处理能力都会变得不够在这种情况下将索引数据切分成小段这就叫分片(SHARDS)。它的出现大大改进了数据查询的效率。 13.什么是副本(REPLICA), 他的作用是什么 副本是分片的完整拷贝副本的作用是增加了查询的吞吐率和在极端负载情况下获得高可用的能力。副本有效的帮助处理用户请求。 14.在ES集群中增加和创建索引的步骤是什么 可以在Kibana中配置新的索引进行Fields Mapping设置索引别名。也可以通过HTTP请求来创建索引。 15.ES支持哪些类型的查询 主要分为匹配文本查询和基于Term的查询。 文本查询包括基本匹配match phrase, multi-match, match phrase prefix, common terms, query-string, simple query string. Term查询比如term exists, type, term set, range, prefix, ids, wildcard, regexp, and fuzzy。 16.Elasticsearch在部署时对Linux的设置有哪些优化方法 面试官想了解对ES集群的运维能力。 解答 1关闭缓存swap;2堆内存设置为Min节点内存/2, 32GB;3)设置最大文件句柄数4线程池队列大小根据业务需要做调整5磁盘存储raid方式——存储有条件使用RAID10增加单节点性能以及避免单节点存储故障。 17.什么是ElasticSearch中的编译器 编译器用于将字符串分解为术语或标记流。一个简单的编译器可能会将字符串拆分为任何遇到空格或标点的地方。Elasticsearch有许多内置标记器可用于构建自定义分析器。 18.拼写纠错是如何实现的 1、拼写纠错是基于编辑距离来实现编辑距离是一种标准的方法它用来表示经过插入、删除和替换操作从一个字符串转换到另外一个字符串的最小操作步数 2、编辑距离的计算过程比如要计算 batyu 和 beauty 的编辑距离先创建一个7×8 的表batyu 长度为 5coffee 长度为 6各加 2接着在如下位置填入黑色数字。其他格的计算过程是取以下三个值的最小值 如果最上方的字符等于最左方的字符则为左上方的数字。否则为左上方的数字1。对于 3,3 来说为 0 左方数字1对于 3,3 格来说为 2 上方数字1对于 3,3 格来说为 2 最终取右下角的值即为编辑距离的值 3。 对于拼写纠错我们考虑构造一个度量空间Metric Space该空间内任何关 系满足以下三条基本条件 d(x,y) 0 – 假如 x 与 y 的距离为 0则 xy d(x,y) d(y,x) – x 到 y 的距离等同于 y 到 x 的距离 d(x,y) d(y,z) d(x,z) – 三角不等式 1、根据三角不等式则满足与 query 距离在 n 范围内的另一个字符转 B其与 A 的距离最大为 dn最小为 d-n。 2、BK 树的构造就过程如下每个节点有任意个子节点每条边有个值表示编辑距离。所有子节点到父节点的边上标注 n 表示编辑距离恰好为 n。比如我们有棵树父节点是”book”和两个子节点”cake”和”books””book”到”books”的边标号 1”book”到”cake”的边上标号 4。从字典里构造好树后无论何 时你想插入新单词时计算该单词与根节点的编辑距离并且查找数值为d(neweord, root)的边。递归得与各子节点进行比较直到没有子节点你就可以创建新的子节点并将新单词保存在那。比如插入”boo”到刚才上述例子的树中我们先检查根节点查找 d(“book”, “boo”) 1 的边然后检查标号为1 的边的子节点得到单词”books”。我们再计算距离 d(“books”, “boo”)2则将新单词插在”books”之后边标号为 2。 3、查询相似词如下计算单词与根节点的编辑距离 d然后递归查找每个子节点标号为 d-n 到 dn包含的边。假如被检查的节点与搜索单词的距离 d 小于 n则返回该节点并继续查询。比如输入 cape 且最大容忍距离为 1则先计算和根的编辑距离 d(“book”, “cape”)4然后接着找和根节点之间编辑距离为 3 到5 的这 个就找到了 cake 这个节点计算 d(“cake”, “cape”)1满足条件所以返回 cake然后再找和 cake 节点编辑距离是 0 到 2 的分别找到 cape 和cart 节点这样就得到 cape 这个满足条件的结果。 19.ElasticSearch中的分析器是什么 在ElasticSearch中索引数据时数据由为索引定义的Analyzer在内部进行转换。 分析器由一个Tokenizer和零个或多个TokenFilter组成。编译器可以在一个或多个CharFilter之前。分析模块允许您在逻辑名称下注册分析器然后可以在映射定义或某些API中引用它们。 Elasticsearch附带了许多可以随时使用的预建分析器。或者您可以组合内置的字符过滤器编译器和过滤器器来创建自定义分析器。 20.是否了解字典树 常用字典数据结构如下所示 Trie 的核心思想是空间换时间利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。它有 3 个基本性质 1、根节点不包含字符除根节点外每一个节点都只包含一个字符。 2、从根节点到某一节点路径上经过的字符连接起来为该节点对应的字符串。 3、每个节点的所有子节点包含的字符都不相同。 1、可以看到trie 树每一层的节点数是 26^i 级别的。所以为了节省空间我们还可以用动态链表或者用数组来模拟动态。而空间的花费不会超过单词数×单词长度。 2、实现对每个结点开一个字母集大小的数组每个结点挂一个链表使用左儿子右兄弟表示法记录这棵树 3、对于中文的字典树每个节点的子节点用一个哈希表存储这样就不用浪费太大的空间而且查询速度上可以保留哈希的复杂度 O(1)。 21. 在并发情况下ES如果保证读写一致 可以通过版本号使用乐观并发控制以确保新版本不会被旧版本覆盖由应用层来处理具体的冲突 另外对于写操作一致性级别支持quorum/one/all默认为quorum即只有当大多数分片可用时才允许写操作。但即使大多数可用也可能存在因为网络等原因导致写入副本失败这样该副本被认为故障分片将会在一个不同的节点上重建。 对于读操作可以设置replication为sync(默认)这使得操作在主分片和副本分片都完成后才会返回如果设置replication为async时也可以通过设置搜索请求参数_preference为primary来查询主分片确保文档是最新版本。 22. ES对于大数据量上亿量级的聚合如何实现 Elasticsearch 提供的首个近似聚合是cardinality 度量。它提供一个字段的基数即该字段的distinct或者unique值的数目。它是基于HLL算法的。HLL 会先对我们的输入作哈希运算然后根据哈希运算的结果中的 bits 做概率估算从而得到基数。其特点是可配置的精度用来控制内存的使用更精确 更多内存小的数据集精度是非常高的我们可以通过配置参数来设置去重需要的固定内存使用量。无论数千还是数十亿的唯一值内存使用量只与你配置的精确度相关。 23. 对于GC方面在使用ES时要注意什么 1倒排词典的索引需要常驻内存无法GC需要监控data node上segment memory增长趋势。 2各类缓存field cache, filter cache, indexing cache, bulk queue等等要设置合理的大小并且要应该根据最坏的情况来看heap是否够用也就是各类缓存全部占满的时候还有heap空间可以分配给其他任务吗避免采用clear cache等“自欺欺人”的方式来释放内存。 3避免返回大量结果集的搜索与聚合。确实需要大量拉取数据的场景可以采用scan scroll api来实现。 4cluster stats驻留内存并无法水平扩展超大规模集群可以考虑分拆成多个集群通过tribe node连接。 5想知道heap够不够必须结合实际应用场景并对集群的heap使用情况做持续的监控。 24. 说说你们公司ES的集群架构索引数据大小分片有多少以及一些调优手段 根据实际情况回答即可如果是我的话会这么回答 我司有多个ES集群下面列举其中一个。该集群有20个节点根据数据类型和日期分库每个索引根据数据量分片比如日均1亿数据的控制单索引大小在200GB以内。  下面重点列举一些调优策略仅是我做过的不一定全面如有其它建议或者补充欢迎留言。 部署层面 1最好是64GB内存的物理机器但实际上32GB和16GB机器用的比较多但绝对不能少于8G除非数据量特别少这点需要和客户方面沟通并合理说服对方。 2多个内核提供的额外并发远胜过稍微快一点点的时钟频率。 3尽量使用SSD因为查询和索引性能将会得到显著提升。 4避免集群跨越大的地理距离一般一个集群的所有节点位于一个数据中心中。 5设置堆内存节点内存/2不要超过32GB。一般来说设置export ES_HEAP_SIZE32g环境变量比直接写-Xmx32g -Xms32g更好一点。 6关闭缓存swap。内存交换到磁盘对服务器性能来说是致命的。如果内存交换到磁盘上一个100微秒的操作可能变成10毫秒。 再想想那么多10微秒的操作时延累加起来。不难看出swapping对于性能是多么可怕。 7增加文件描述符设置一个很大的值如65535。Lucene使用了大量的文件同时Elasticsearch在节点和HTTP客户端之间进行通信也使用了大量的套接字。所有这一切都需要足够的文件描述符。 8不要随意修改垃圾回收器CMS和各个线程池的大小。 9通过设置gateway.recover_after_nodes、gateway.expected_nodes、gateway.recover_after_time可以在集群重启的时候避免过多的分片交换这可能会让数据恢复从数个小时缩短为几秒钟。 索引层面 1使用批量请求并调整其大小每次批量数据 5–15 MB 大是个不错的起始点。 2段合并Elasticsearch默认值是20MB/s对机械磁盘应该是个不错的设置。如果你用的是SSD可以考虑提高到100-200MB/s。如果你在做批量导入完全不在意搜索你可以彻底关掉合并限流。另外还可以增加 index.translog.flush_threshold_size 设置从默认的512MB到更大一些的值比如1GB这可以在一次清空触发的时候在事务日志里积累出更大的段。 3如果你的搜索结果不需要近实时的准确度考虑把每个索引的index.refresh_interval 改到30s。 4如果你在做大批量导入考虑通过设置index.number_of_replicas: 0 关闭副本。 5需要大量拉取数据的场景可以采用scan scroll api来实现而不是from/size一个大范围。 存储层面 1基于数据时间滚动创建索引每天递增数据。控制单个索引的量一旦单个索引很大存储等各种风险也随之而来所以要提前考虑及早避免。 2冷热数据分离存储热数据比如最近3天或者一周的数据其余为冷数据。对于冷数据不会再写入新数据可以考虑定期force_merge加shrink压缩操作节省存储空间和检索效率。 参考 https://zhuanlan.zhihu.com/p/265399976 https://www.wenyuanblog.com/blogs/elasticsearch-interview-questions.html http://www.mianshigee.com/question 海的那边是什么已经不重要了
http://www.yutouwan.com/news/463057/

相关文章:

  • 海安网站开发沈阳seo建站
  • 寻找手机网站建设响应式网站生成
  • 国外公共空间设计网站福清哪有做网站的地方
  • 徐州网站开发案例wordpress 导入 媒体
  • 中山快速做网站服务erp系统的功能包括哪些
  • 中国协会网站建设方案网站怎么发布
  • 关于做展厅的网站个人手机网站
  • 阜宁网站设计鞍山人才招聘网
  • wordpress ucthemeseo站点
  • 网站建设 盈利wordpress模板打包
  • 个人网站备案 照片网建企业
  • 店铺装修设计网站网站seo策略
  • seo优化网站排名怎么查商标注册过没有
  • 那个网站点击率高龙溪营销型网站制作
  • app页面模板简单制作沈阳网络推广优化
  • 母婴网站建设的与功能模块建筑人才网报名平台
  • 国内免费域名注册网站如何自己做网站腾讯
  • 网站收录入口是什么微信公众号怎么做文章推广
  • 杭州做宠物网站的公司在线oa
  • 做网站一般做多大的网站设计制作有哪些原因
  • 12306网站服务时间工商银行门户网站是什么意思
  • 网站建设运维策划医院网站建设管理规范
  • 360网站收录提交入口网站注册怎么做屏蔽过滤
  • 广西防城港建设厅网站wordpress进入
  • 做网站交互效果用什么软件采集网站后台数据
  • 在线网站建设询问报价上海阳性增多
  • 网站报价表格wordpress升级失败
  • php 手机网站开发wordpress 修订版本
  • 个人网站 免备案全国分站seo
  • 会议网站建设方案模板庆阳网站设计价格