解决方案:诠网科技|通过分析诊断网站日志,提升搜索引擎抓取友好度
优采云 发布时间: 2022-11-22 15:18解决方案:诠网科技|通过分析诊断网站日志,提升搜索引擎抓取友好度
作为SEO的人,如果不知道如何分析和诊断网站日志,那是相当可悲的。日志分析其实就是对搜索引擎蜘蛛每天爬行的痕迹进行正确的数据诊断,从而采取合理的优化措施。那么,我们应该从哪里入手分析诊断网站日志呢?
1、搜索引擎蜘蛛的访问次数
搜索引擎对网站的访问量间接反映了网站的权重。站长为了增加搜索引擎蜘蛛的访问量,需要对服务器性能、外链层级建设、网站结构、链接入口等进行分析和优化。
2、搜索引擎蜘蛛的总停留时间
搜索引擎蜘蛛的驻留时间与网站结构、服务器响应时间、网站代码、网站内容更新等密切相关。
3. 搜索引擎蜘蛛的抓取量
" />
事实上,搜索引擎蜘蛛的停留时间与网站的结构、网站或内容的更新、服务器的设置等密切相关,因为搜索引擎蜘蛛的爬行量与被收录量直接相关网站的收录量,蜘蛛爬行量越大,网站的收录量就会越大。
4、搜索引擎蜘蛛单次访问次数
如果搜索引擎蜘蛛一次抓取的网页越多,说明网站内容越有价值,网站结构越有利于搜索引擎蜘蛛的抓取。
5、搜索引擎蜘蛛在单个页面上的爬行时间
搜索引擎蜘蛛抓取单个页面的时间与网站页面的抓取速度、网页的内容、网页上图片的大小、网页代码的简单程度密切相关。停留时间可以增加蜘蛛的总爬行量,增加网站收录量,增加网站的整体流量。
6、网站页面的爬取
" />
一般来说,搜索引擎蜘蛛在网站上停留的时间有限。只有设置好网站结构,对重要页面进行合理规划,降低页面重复抓取率,才能将蜘蛛引入其他页面,从而增加网站收录量。
7.网页状态码
定期清除页面中的死链接,让蜘蛛能够顺利抓取整个页面,从而提高网页的抓取率。
8.爬取网站目录结构
一般来说,蜘蛛的主要爬取目录会与网站的重点栏目保持一致。为了提高网站重要栏目的收录、权重和关键词,我们需要从外链和内链层面调整优化方案。当遇到不需要收录或爬取的栏目时,需要使用robots标签提醒蜘蛛不要爬取。
只有不断分析诊断网站日志,才能知道自己发布的外链是否有效,购买的空间是否稳定,蜘蛛喜欢哪些页面不喜欢哪些页面,需要更新哪些内容等等——系列优化结果.
解密:从二叉查找树到B*树,一文搞懂搜索树的演进!|原创
本文从二分查找入手,讲解BST、AVL、红黑树、B树、B+树最后到B*树的演化过程,明白为什么!
点击上方“后端开发技术”,选择“设为星标”,优质资源将及时投放
计算机中有一些数据结构总是离不开数据搜索,比如二叉搜索树(Binary Search Tree)、红黑树、B-树、B+树等数据结构。你有没有想过为什么要查找那么多数据结构?为什么红黑树结构在计算机内存中被广泛使用?为什么多个MySQL数据引擎都选择B+树作为索引实现?为什么 Redis 使用跳表?
带着这些问题,在本文中我们将讨论这些数据结构的实际应用以及现有问题的演变。
二分查找
对于搜索数据,不得不提的一种基本算法是二分法。很多数据结构搜索算法的核心思想是二分法,其搜索效率常常与二分法进行比较。二分法的时间复杂度是**O(logN)**,这是一个非常好的时间复杂度,其效率仅次于常数时间复杂度**O(1)**。
二分查找的实现思路如下:
对数据集进行排序,找到数据集的中间节点,判断是否是查找的值,等于直接返回。根据与中间节点大小的比较结果,确定收缩搜索区间的范围是中间节点的左侧还是右侧。重复上面的步骤 2 和 3 继续搜索。
从它的实现来看,有两点很重要:一是保证数据的顺序,二是适合分段数据存储,便于缩小范围内的查找。所以按照这个思路,演化出两种不同的路由,两种数据结构,树和跳表。
二叉搜索树 BST
二叉搜索树(BST,Binary Search Tree)(也称为二叉搜索树)是一棵空树,或者说是一棵具有以下性质的二叉树:
二叉搜索树的问题
二叉搜索树满足了使用二分法查询数据的要求,但是存在一个问题:因为插入顺序不同,导致二叉树的高度不稳定,极端情况下可能变成链表(即,插入的数据是有序的,递增或递减)。这样就变成了线性查询,时间复杂度最多变成O(n),查询效率不稳定。
为了解决这个问题,产生了各种树平衡算法来保证树的节点的高度不会变化太大。于是就有了AVL树(平衡二叉树)、红黑树等新的数据结构。
AVL树
平衡二叉树的全称叫做平衡二叉搜索(排序)树,AVL树是最早的平衡二叉树之一。
为了解决一般二叉查找树存在的问题,即根节点和叶子节点的高度差过大,查询效率不成问题,极端情况下可能会变成链表。所以AVL树具有以下特点:
在AVL树中,任意节点的两棵子树的高度差最大为1,所以又称为平衡二叉树。
AVL 树的查找、插入和删除平均和最坏情况的复杂度为 O(LogN)。
AVL 是什么意思? AVL是大学教授GM Adelson-Velsky和EM Landis名字的缩写。他们提出了平衡二叉树的概念。为了纪念他们,平衡二叉树被称为AVL树。
与普通的二叉搜索树不同的是,在插入和删除节点时,会根据需要进行左旋或右旋,以保证二叉树的平衡,如下*敏*感*词*。这不是本文的重点,有兴趣的可以研究一下。
AVL树问题
AVL 树高平衡很好,但它是有代价的。为了保持平衡,它的旋转非常耗时。
AVL实现平衡的关键在于轮换操作:插入和删除可能会破坏二叉树的平衡。这时候需要进行一次或多次的树轮换来重新平衡树。插入数据时,最多只需要两次旋转(单次旋转或双次旋转);但是在删除数据的时候,会导致树变得不平衡,AVL需要保持被删除节点到根节点路径上所有节点的平衡,而旋转的数量级是O(lgn)。
由于旋转耗时,AVL树在删除数据时效率很低;当删除操作较多时,维持平衡的成本可能会高于其收益,因此AVL在实践中并未得到广泛应用。
场景:Windows使用AVL树来管理进程地址空间。
针对这种情况,红黑树对其进行了优化。
红黑树RB-Tree
红黑树是一种自平衡的二叉搜索树,是一种高效的搜索树。它由 Rudolf Bayer 于 1978 年发明,当时被称为平衡二叉 B 树(symmetric binary B-trees)。后来在1978年被Leo J. Guibas和Robert Sedgewick修改为今天的红黑树。红黑树效率好,可以在O(logN)时间内完成查找、添加、删除等操作。
红黑树是一棵接近平衡的二叉树(之所以说接近平衡是因为它没有像AVL树那样的平衡因子的概念,只是靠满足红的五个性质-black节点保持接近平衡的结构,为了提高整体性能,不严格固定一定的平衡因子以保持绝对平衡)。
特征
一棵红黑树同时满足以下性质:
从任何节点到叶节点的所有路径都收录
相同数量的黑色节点
红黑树查找、插入、删除操作的时间复杂度为O(logN)。
红黑树解决了AVL树的问题。AVL的左右子树的高度差不能超过1,每进行一次插入/删除操作,几乎都需要使用一次旋转操作来保持平衡。在频繁插入/删除、频繁旋转的场景下,操作使得AVL的性能大打折扣。红黑树牺牲严格的平衡换取插入/删除时少量的轮换操作,整体性能优于AVL。红黑树插入不平衡问题,不超过两次旋转即可解决;删除的不平衡不超过3次旋转就可以解决,红黑树的红黑规则在最坏的情况下可以解决。(log 2N) 完成搜索操作的时间。红黑树和AVL树效率对比:如果插入一个节点导致树不平衡,AVL树和红黑树都最多需要2次旋转操作,即都是O(1);但是当删除节点导致树不平衡时,在最坏的情况下,AVL需要保持被删除节点到根节点路径上所有节点的平衡,所以旋转的幅度为O(logN),而红黑树最多只需要3次旋转,只需要O(1)的复杂度。其次,AVL树的结构比红黑树更平衡。插入和删除节点更容易导致 Tree 不平衡。因此,当需要插入或删除大量数据时,AVL 需要更频繁地进行 rebalance。所以,红黑树在需要插入和删除大量节点的场景下效率更高。自然地,由于 AVL 是高度平衡的,AVL 搜索效率更高。map的实现只是折衷了两者在查找、插入、删除的效率。总的来说,红黑树的统计性能要高于AVL。
AVL 树在最坏情况下最多有 O(logN) 次旋转,而红黑树最多有 3 次。
场景:
红黑树有很多应用。
红黑树问题
红黑树虽然是一种经过性能优化的自平衡二叉搜索树,插入修改效率和搜索售卖是平衡的,但是它仍然存在一些问题。
插入和删除时仍然需要轮换节点,频繁修改数据的场景影响效率。毕竟红黑树是二叉树。当数据量很大时,树的高度会变得很大,搜索会经过过多的节点,导致效率低下。红黑树在内存中表现良好,但是由于树的高度,在使用磁盘等辅助存储设备读写数据时(如MySQL等数据库),数据会分散在磁盘中,并且IO的数量会过多。效率变低。适用于单一查询,无法支持数据查询中常见的范围查询场景。
针对以上问题,为磁盘存储而生的B树。
B树
B-tree是一种多路搜索树,也称为平衡多路搜索树(有两条以上的搜索路径)。与二叉树相比,B树的每个非叶子节点都可以有多个子树。因此,在节点总数相同的情况下,B树的高度远小于AVL树和红黑树(B树是“矮胖子”),并且磁盘IO次数大大减少。数据库索引技术中大量使用了B-tree和B+-tree的数据结构。
定义 B 树最重要的概念是顺序。对于m阶B树(即一个节点至多收录
多个子节点),需要满足以下条件:
度:在一棵树中,每个节点的子节点(子树)的个数称为该节点的度。
顺序:顺序定义为节点可以拥有的最大元素数。
如下图所示,这是一个2度和3度的B树。
场景:MongoDB 索引。
B树的优点
与平衡二叉树相比,B树提高了节点空间的利用率。B树在每个节点中保存了更多的数据,降低了树的高度,从而提高了搜索性能。
B树的优点不仅在于树高小,还在于利用了访问局部性原理。
所谓局部性原则,就是在使用一条数据时,附近的数据在短时间内被使用的概率更高。B 树将具有相似键的数据存储在同一节点中。当访问其中一个数据时,数据库会将整个节点读入缓存;当立即访问其相邻数据时,可以直接在缓存中读取。, 没有磁盘 IO; 换句话说,B树有更高的缓存命中率。
在数据库应用中,B树每个节点存储的数据量约为4K。这是因为考虑到磁盘数据存储是以块的形式存储的,每个块的大小为4K,每次IO数据都是在磁盘上进行的。读取时,会一次性读取同一个磁盘块的数据,所以每次磁盘IO都可以读取B树中一个节点的所有数据。
对于顺序插入的数据,B-tree结构的优势可以使其在内存中顺序排列,存储在同一个磁盘页中。顺序插入对磁盘利用率和读取效率非常友好。
" />
场景:MySQL 的 InnbDB 索引。
B树问题
B树虽然解决了磁盘存储的问题,但是在查询范围数据的时候还是不够好。比如要查询1-5的数据,就必须按照树的时间顺序遍历访问每个节点。
针对这个问题,B+树对其进行了优化。
B+树
B+树是在B树基础上的又一次改进。主要提升了两个方面,一是查询的稳定性,二是在数据排序上更加友好。
B+树也是一种多路平衡搜索树,其特点主要有以下四点:
第一种算法:
第二种算法:
B+树与B树的比较
1、B+树层数少:B+树与B树相比,在每个非叶子节点存储更多的关键字,所以每个磁盘块存储的数据更多,树的层数更少,所以查询数据更快
2、B+树查询速度更稳定:B+所有关键词数据地址都存储在叶子节点上,所以每次搜索的次数相同,所以查询速度比B树更稳定
3、B+树天生就有排序的功能:所有关键字都出现在叶子节点的链表中(密集索引),B+树的所有叶子节点数据组成一个有序链表,查询数据时更方便大间隔和小间隔。数据紧凑度很高,缓存的命中率会比B-tree高。
4、B+树的全节点遍历速度更快:B+树只需要遍历所有叶子节点即可遍历整棵树,而不是像B树那样遍历每一层,有利于数据库的全表扫描。
B-tree相对于B+树的优势在于,如果经常访问的数据离根节点很近,而B-tree的非叶子节点本身存储的是key及其数据的地址,这种数据检索的速度会比B+树快。
5、B+树更适合做文件索引系统
B+树的缺点
在B+树的构建过程中,为了保持树的平衡,节点的合并和分裂是耗时的,所以B*树是如何减少构建中节点合并和分裂的次数,所以以提高树的数据插入、删除性能。
B*树
B*树与B+树相比,不同之处在于:
(1)首先,关键词的数量是有限的。B+树初始化的关键字个数为cei(m/2),初始化的b-tree个数为(cei(2/3m))
(2)当B+树节点满时进行分裂,当B*树节点满时检查兄弟节点是否满(因为每个节点都有指向兄弟节点的指针),如果兄弟节点未满,将关键字传递给兄弟节点,如果兄弟节点已满,则从当前节点和兄弟节点中取出1/3的数据创建新节点;
在B+树的基础上,由于更大的初始容量,节点空间利用率更高,并且有指向兄弟节点的指针,传递关键字给兄弟节点的特性使得B*树的分解次数更频繁。很少。
总结
对于上面的演化过程,这里简单总结一下,如下图所示。推荐采集
!
如果您觉得对您有帮助,请点赞、采集
或分享!