CSDN|42 张图带你揭秘后端技术都要学啥?( 五 )

  • 数据库分片
将一张表分成若干片 , 其中每一片都包含一部分行记录 , 然后将每一片存储在不同的服务器中 , 这样就实现一张表存放在多台服务器中 , 哪都有哪些分片存储的方案?最开始使用"硬编码"的方式 , 此方式从字面上可以理解为直接在代码中指定 。 假定表为用户表 , 通过ID的奇偶存放在不同的服务器上 , 如下图:
CSDN|42 张图带你揭秘后端技术都要学啥?
本文插图
这种方式的缺点很明显 , 当需要增加服务器的时候 , 就需要改动代码 , 这就不友好了 。 比较常见的数据库分片算法是通过余数Hash算法 , 根据主键ID和服务器的数量取模 , 根据余数确定服务器 。
搜索引擎我们使用谷歌浏览器的时候 , 输入搜索关键字 , 就会出现搜索到多少条结果 , 用时多少 , 它是如何做到在如此短的时间完成这么大数据量的搜索 。 先来想第一个问题 , 全世界这么多网页在哪里?互联网的存在让你和我隔着屏幕都知道你多帅 。 当然 , 每个网页中都会存在很多其他网页的超链接 , 这样构成了庞大的网络 。 对于搜索引擎而言 , 目标为解析这些网页获取超链接 , 下载链接内容(过滤) , 具体一些说 。 将URL存放于池子中 , 从池子中取出URL模拟请求 , 下载对应的HTML , 并存放于服务器上 , 解析HTML内容时如果有超链接URL , 检测是否已经爬取过 , 如果没有暂存队列 , 后面再依次爬取 。 架构图如下:CSDN|42 张图带你揭秘后端技术都要学啥?
本文插图
爬虫常规方法将获取的所有网页进行编号并得到网页集合 。 然后通过分词技术获得每一个单词 , 组成矩阵如下所示:CSDN|42 张图带你揭秘后端技术都要学啥?
本文插图
分词就这样按照单词-文档的方式组织起来就叫做倒排索引了 。 CSDN|42 张图带你揭秘后端技术都要学啥?
本文插图
倒排索引Google通过建立<单词 , 地址>这样的文档 , 主要搜索到单词就能定位到文档的地址列表 , 然后根据列表中文档的编号就展现文档信息从而实现快速的检索 。 如果搜索出来结果很多 , Google是如何能更精准的将我们需要的信息呈现给我们呢 。 它很明显有个排序功能 , 那是如何排序的?Google使用了一种叫做"PageRank"的算法 , 通过计算每个网页的权重 , 并按照权重排序 , 权重高的自然就在显示在前面 , 那问题来了 , 为啥权重高的 , 排在前面的通常就是用户所需要的呢?这就得了解下pagerank算法了 。 在pagerank中 , 如果网页A包含网页B说明A认可B , 即投一票 。 如下图ABCD四个网页所示 , 箭头代表超链接的方向 , 比如A->B代表A网页包含B的超链接CSDN|42 张图带你揭秘后端技术都要学啥?
本文插图
pagerank怎么计算的?ABCD 初始值都为1 , 然后根据关系计算权重 。 比如此时B包含了AD两个网页 , 那么权重1被分为两个1/2分别给A和D , 此时A包含BCD , 那么此时A页面新的权重为1/2 + 1/3 + 1 = 11/6 。 pagerank 值越受推荐 , 代表用户越想看到 。 基于每个网页的 pagerank 值对倒排索引中的文档列表排序 , 靠前者则是用户想看到的文档 。 这种是因为超链接 , 引入权值的方式排序 。 还有其他诸如对于商品售卖次数排序或者电影点赞或评价分数排序 。 还有通过关键字查找 , 希望找到和搜索词相关 , 这个时候可能就会采用词频TF进行排序 , 词频代表所查词和文档的相关程度 。 CSDN|42 张图带你揭秘后端技术都要学啥?
本文插图
词频TF比如我们搜索"Java后端"出现的结果以"后端"的相关技术 。 在大部分的应用中都会涉及到搜索引擎技术 , 技术庞大且复杂 , 希望各位老铁根据自身情况搜索相关所需学习 , 校招面试中不出现盲点即可 。


推荐阅读