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

南宁网站提升排名建立有效的()

南宁网站提升排名,建立有效的(),宁波seo外包公司,阿里wordpress怎么安装教程提到ES#xff0c;大多数爱好者想到的都是搜索引擎#xff0c;但是明确一点#xff0c;ES不等同于搜索引擎。不管是谷歌、百度、必应、搜狗为代表的自然语言处理(NLP)、爬虫、网页处理、大数据处理的全文搜索引擎#xff0c;还是有明确搜索目的的搜索行为#xff0c;如各大…提到ES大多数爱好者想到的都是搜索引擎但是明确一点ES不等同于搜索引擎。不管是谷歌、百度、必应、搜狗为代表的自然语言处理(NLP)、爬虫、网页处理、大数据处理的全文搜索引擎还是有明确搜索目的的搜索行为如各大电商网站、OA、站内搜索、视频网站的垂直搜索引擎他们或多或少都使用到了ES。 ​作为搜索引擎的一部分ES自然具有速度快、结果准确、结果丰富等特点那么ES是如何达到“搜索引擎”级别的查询效率呢首先是索引其次是压缩算法接下来我们就一起了解下ES的索引结构和压缩算法 1 结构 1.1 Mysql Mysql下的data目录存放的文件就是mysql相关数据mysql文件夹对应的就是数据库mysql。 其中表columns_priv对应了3个文件columns_priv.frm、columns_priv.MYD、columns_priv.MYI。 .frm表结构.MYDmyisam存储引擎原数据.MYImyisam存储引擎索引.ibdinnodb存储引擎数据 1.2 Elasticsearch cfe为索引文cfs 为数据文件cfe文件保存Lucene各文件在.cfs文件的位置信息 cfs、cfe 在segment还很小的时候将segment的所有文件都存在在cfs中在cfs逐渐变大时大小超过shard的10%则会拆分为其他文件如tim、dvd、fdt等文件 1.3 存储结构 倒排索引结构分为倒排表、词项字典、词项索引 倒排表包含某个词项的所有id的数据存储了在.doc文件中 词项字典包含了index field的所有经过处理之后的词项数据最终存储在.tim文件中 1.4 结构对比 我们以某商城的手机为例左侧为es倒排索引结构右侧为原始数据。左侧图示只是为了展示倒排索引结构并不是说es中倒排表就是简单的数组 以上面结构对比示例图为例假如共有10亿条数据需要存储在ES中(上图右)分词后存储的倒排表(上图左)大概包含分词term以及对应的id数组等在10亿条数据中分词“小米”相关的数据有100万条也就是说分词“小米”对应的数组Posting List长度是100万 id是int类型的有序主键分词“小米”在数组Posting List中100万int类型数字总长度100万✖每个int占4字节400万Byte≈4MB。1个分词占4MB空间,假如10亿条数据有500万个分词总空间4MB✖500万2千万MB磁盘空间直接爆炸 2 算法 分词对应的数组Posting List实际就是一个个有序数组而有序数值数组是比较容易进行压缩处理的而且一般来说压缩效益也不错如果能对其进行压缩是能够大大节约空间资源的 ES中倒排索引的压缩算法主要有FOR算法(Frame Of Reference)和RBM算法(RoaringBitMap) 2.1 FOR FOR算法的核心思想是用减法来削减数值大小从而达到降低空间存储。 假设V(n)表示数组中第n个字段的值那么经过FOR算法压缩的数值V(n)V(n)-V(n-1)。也就是说存储的是后一位减去前一位的差值。存储是也不再按照int来计算了而是看这个数组的最大值需要占用多少bit来计算 我们按照差值计算的方式来保存数据初始值为12与1的差值为13与2的差值为1……最终我们就将原始Posting List数据转化为100万个1每个1我们可以用1bit来记录总空间1bit✖100万100万bit相比原有400万Byte3200bit空间压缩了32倍 在实际生产中不可能出现一个term的Posting List是这种差值均为1的情况所以我们以通用示例举例。假如原数据为[73300302332343372],数组中6个数字占据总空间为24字节。按照差值方式记录数组转化为[73,227,2,30,11,29],最大数字为227大于2的7次方128小于2的8次方256所以每个数字可以使用8bit即1Byte来保存占据总空间为1Byte*6 1Byte7Byte 在此基础上我们将差值数组按照密集度划分为[73,227]和[2,30,11,29]其中[73,227]中最大值227介于2的7次方和2的8次方之间所以用8bit1Byte作为切割分段[2,30,11,29]中最大数30介于2的4次方和2的5次方之间所以用5bit作为切割分段。 数组[73,227]占据总空间为8bit✖2个16bit2Byte 数组[2,30,11,29]占据总空间为5bit✖4个20bit3Byte 为什么20bit3Byte呢因为8bit1Byte小于8bit也会占据1个字节空间所以17bit到24bit均为3Byte 所以最终占据总空间12137Byte 疑问一既然原数组[73300302332343372]要按照密集度拆分为[73,227]和[2,30,11,29]两个数组那为什么不继续往下拆分直接拆分到每个数字是一个数组这样使用bit记录时占据总空间会更少 答如果继续拆分数组空间确实会使用更少但是之前我们提到搜索引擎速度快的方式有两种高效的压缩算法和快速的编码解码速度单个数字存储确实压缩了空间但是我们无法再通过解码的方式将源数据还原 疑问二为什么源数据使用差值记录占据6Byte拆分数组后占据7Byte拆分后占据空间不变有时候甚至会变大为什么 答数据量小的情况下确实会出现该情况因为我们需要拆分数组并记录拆分数组的长度如上面示例中的8bit和5bit在原数据存储空间基础上还要存储拆分长度所以数据量小的情况下会出现比直接存储占据空间大的情况。但是不管是搜索引擎还是Elasticsearch更多处理的是海量数据数据量越多差值数组拆分的方式节省空间越明显 2.2 RBM 我们已经了解了FOR压缩算法算法核心是将PostingList按照差值密集度转化成两个差值数组。在这里我们要考虑一种情况就是在大数据中10亿条数据分词500万个如果分词“小米”所在PostList比较分散且差值很大此时使用FOR算法效果就会大打折扣。所以稀疏的数组不适合使用FOR算法 在这里我们以[100062101131385132052191173196658]为例如果按照FOR算法转化成的差值数组为[10006110169284667591215485]密集度很低。我们采用RBM算法 源数据PostingList是由int类型组成的数组int类型4Byte32bit最大值2的32次方-14294967295≈43亿。当数据较大且稀疏时我们将32bit拆分为16bit和16bit16bit最大值65535前16bit存放商后16bit存放余数所以商和余数都不会超过65535.我们将源数组的值除以65536得到的商和余数分别存放在前16bit和后16bit。 以数字196658为例转化为2进制前16位3后16位50 得到的结果以K-V存放。Key最大值为16bit所以以short[]数组存放Value以Container存放。 由于源数组为有序数组所以按照高低16位转化后商和余数都是从小到大排列 通过看Container源码我们可以看到Container有3种ArrayContainer、BitmapContainer、RunContainer。 ArrayContainer本质为集合所以随着数组中数量越多占用空间越多呈正向增长。 当数组种数量为4096时占据总空间4096个✖16bit(即2Byte)➗10248KB 当数组种数量为65536时占据总空间65536个✖16bit(即2Byte)➗1024128KB BitmapContainer位图核心就是将原有存储数值转化成该数值在哪个位置上存在 由于余数最大值为65535所以我们需要65536位位图数值是多少在位图上对应的位置就是多少。数值等于4096则位图上4096位值为1数值等于65535则位图上65535位值为1。每个位置上的数都占用8KB空间8KB65536bit RunContainer用法相对狭隘这种类型是Lucene 5之后新增的类型主要应用在连续数字的存储商比如倒排表中存储的数组为 [1,2,3…100W] 这样的连续数组如果使用RunContainer只需存储开头和结尾两个数字1和100W即占用8个字节。这种存储方式的优缺点都很明显它严重收到数字连续性的影响连续的数字越多它存储的效率就越高如果数组是如下形式 [1,2,3,4,5,100,101,102,999,1000,1001] 就会被拆分为三段[1,5],[100,102],[999,1001] 至于每次存储采用什么容器需要进行一下判定比如ArrayContainer当存储的元素少于4096个时他会比BitmapContainer占用更少空间而当大于4096个元素时采用ArrayContainer所需要的空间就会大于8kb那么采用BitmapContainer就会占用更少空间 3 总结 ES在处理海量数据时通过其独到的结构和压缩算法将索引效率尽可能的提升。虽然在实际业务处理中我们极少遇到海量数据处理的情况但是通过了解ES的原理能够帮我们开阔下视野了解数字之美算法之美。
http://wiki.neutronadmin.com/news/128435/

相关文章:

  • 网站建设 前期资料wordpress前台如何删除文章
  • 网站开发程序员建设网站要多长时间
  • 网站服务器在制作网站开发用的图片
  • 网站建设专用图形库网站建设项目开发书
  • 网站做零售机械代加工厂家
  • 网站素材免费下载系统类小说
  • 阿里云网站建设的实训报告软件商店安装免费下载
  • ps做网站效果图尺寸如何手机百度助手
  • 中山外贸网站建设报价陕西网站建设公司哪有
  • 企业设计网站建设济南模板网站制作
  • 宁德营销型网站建设网站没有备案信息该怎么做
  • p2p网站建设广州php网站后台页面
  • 建筑工程网站建设方案wordpress 配置ckplayer
  • 谁能帮我做网站生活中的科技产品有哪些
  • 家具定制东莞网站建设手机排行榜zol
  • 云起时网站建设万网董事长是谁
  • 网站首页不见怎么做高端网站设计
  • 网站建设的活怎么接茶的网站制作
  • 登录不了建设银行网站屏显的企业网站应该怎么做
  • 深网站建设php二次网站开发步骤
  • 许昌做网站公司汉狮价格深度网营销型网站建设公司怎么样
  • 网站建设乙方义务酒店网站的规划与建设方案
  • 国外ps网站wordpress音乐盒
  • 重庆网站建设优斗士深圳住房和建设局网站首页
  • 企业网站设计源代码如何查看网站的外链
  • 网站不清理缓存安阳住房与城乡建设局官方网站
  • 你的网站赚钱吗百度如何建设自己的网站
  • 免费推广网站教程国家信息网
  • 微信小程序做网站响应式网站模板的优势
  • 网站备案网站建设方案杭州网络公司网站建设