11 2022 档案
摘要:1. 背景 之前说过,搜索引擎需要将互联网上百亿级别的网页内容存到本地磁盘上,基于这一存储海量数据的需求,Google开发了GFS。GFS(Google File System)为了能够存储百亿级的海量网页信息专门开发的文件系统。在Google整个云存储与云计算技术框架中,GFS是其他相关技术的基石
阅读全文
摘要:1. 背景 什么是跳表?跳表是SortedMap的一种具体实现,是一种概率性的数据结构。跳表拥有SortedMap的所有功能,定位和红黑树类似,其和红黑树的区别在于 优点: 跳表的实现更加简单 跳表在范围查询的时候效率是要高于红黑树 红黑树的插入和删除可能引发子树的调整,逻辑比较复杂,跳表只要维护相
阅读全文
摘要:1. 背景 为什么需要云存储和云计算?对于商业搜索引擎来说,需要处理的数据超过百亿,并且不部分数据都是互联网页面这样的无结构化或者半结构化数据。云存储和云计算平台的目的,就是为了存储和管理这些海量数据变得简单化。目前来看,一套高效的云存储和云计算平台,已经成为了搜索引擎的核心竞争力。 这本书主要是通
阅读全文
摘要:1. 背景 互联网网页是通用搜索引擎主要的处理对象,目前互联网上的网页数量以百亿计,所以通用搜索引擎首要面临的问题是:如何设计出高效的下载系统,将海量的网页数据传输到本地,在本地形成互联网网页的镜像备份。这就是网络爬虫的功能。 2. 通用爬虫框架 下图是一个通用的爬虫框架 首先取一部分高质量的网页,
阅读全文
摘要:0. 前言 本系列文章主要是源于对《搜索引擎的技术架构》一书的读书笔记,其中会掺杂在其他文章或书籍的内容以及我个人对搜索引擎的理解,阅读顺序也没有按照书中目录的顺序来,相比于单纯的知识点总结,本系列更像是我借由此书来谈一谈我对搜索引擎的理解。 本系列文章专注于描述搜索引擎的技术架构,对搜索引擎的历史
阅读全文
摘要:1. 背景 编码指的是内存里的整数和字符串放到磁盘上的方式,其主要目的有两个 对不定长整数以及字符串能够在读取的时候感知到已经读取完了整个值 最大程度的节省在磁盘上占用的空间 2. 设计 2.1 整数 整数的种类上分为定长整数和不定长整数,而定长整数又分为32位整数和64位整数。 整数在存储方式上可
阅读全文
摘要:1. 背景 对于数据库来说,内存的分配非常重要,当我们使用C++默认的内存分配方式 malloc/free或者new/delete的时候,如果遇到很小的键值对时,每次调用的平均开销就会比较大,同时会产生很多内存碎片。 由于在MemTable中经常会遇到需要为较小键值对分配内存的原因,LevelDB在
阅读全文
摘要:1. 介绍 1.1 描述 LSM Tree(Log Structured merge Tree) 意思是日志结构合并树。目前广泛应用于一些流行的KV存储引擎中(LevelDBl、HBase、Bigtable等) LSM树并不是像红黑树,B树那样树严格的树状结构,而是一种存储结构 其中日志结构指的是用
阅读全文
摘要:1. 介绍 1.1 描述 SSTable(Sorted String Table)是一个通常放在磁盘上的,排序的字符串表, 用来高效存储大量的键值对数据, 同时搭配上优化实现IO操作的高吞吐量. 1.2 背景 当我们要运行一系列的Map-Reduce任务时,因为输入的数据量很大,所以消耗在IO的时间
阅读全文