Skip to content

Commit 3c3f669

Browse files
committed
test toc
1 parent 1aeb8ac commit 3c3f669

3 files changed

+27
-25
lines changed

docs/big-backEnd/后端技术杂谈1:搜索引擎基础倒排索引.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,15 @@
3232

3333

3434
见其名知其意,有倒排索引,对应肯定,有正向索引。
35-
     正向索引(forward index),反向索引(inverted index)更熟悉的名字是倒排索引。
35+
正向索引(forward index),反向索引(inverted index)更熟悉的名字是倒排索引。
3636

3737
在搜索引擎中每个文件都对应一个文件ID,文件内容被表示为一系列关键词的集合(实际上在搜索引擎索引库中,关键词也已经转换为关键词ID)。例如“文档1”经过分词,提取了20个关键词,每个关键词都会记录它在文档中的出现次数和出现位置。
3838

3939
得到正向索引的结构如下:
4040

41-
“文档1”的ID > 单词1:出现次数,出现位置列表;单词2:出现次数,出现位置列表;…………。
41+
“文档1”的ID >单词1:出现次数,出现位置列表;单词2:出现次数,出现位置列表;…………。
4242

43-
“文档2”的ID > 此文档出现的关键词列表。
43+
“文档2”的ID >此文档出现的关键词列表。
4444

4545
![](https://java-tutorial.oss-cn-shanghai.aliyuncs.com/855959-20170706154309815-1724421988.png)
4646

@@ -101,13 +101,13 @@
101101

102102
![](https://java-tutorial.oss-cn-shanghai.aliyuncs.com/855959-20170224200300601-1967186316.png)
103103

104-
图3   文档集合
104+
图3 文档集合
105105

106106
中文和英文等语言不同,单词之间没有明确分隔符号,所以首先要用分词系统将文档自动切分成单词序列。这样每个文档就转换为由单词序列构成的数据流,为了系统后续处理方便,需要对每个不同的单词赋予唯一的单词编号,同时记录下哪些文档包含这个单词,在如此处理结束后,我们可以得到最简单的倒排索引(参考图3-4)。在图4中,“单词ID”一栏记录了每个单词的单词编号,第二栏是对应的单词,第三栏即每个单词对应的倒排列表。比如单词“谷歌”,其单词编号为1,倒排列表为{1,2,3,4,5},说明文档集合中每个文档都包含了这个单词。
107107

108108
![](https://java-tutorial.oss-cn-shanghai.aliyuncs.com/855959-20170224200334195-2052728227.png)
109109

110-
图4   简单的倒排索引
110+
图4 简单的倒排索引
111111

112112
之所以说图4所示倒排索引是最简单的,是因为这个索引系统只记载了哪些文档包含某个单词,而事实上,索引系统还可以记录除此之外的更多信息。图5是一个相对复杂些的倒排索引,与图4的基本索引系统比,在单词对应的倒排列表中不仅记录了文档编号,还记载了单词频率信息(TF),即这个单词在某个文档中的出现次数,之所以要记录这个信息,是因为词频信息在搜索结果排序时,计算查询和文档相似度是很重要的一个计算因子,所以将其记录在倒排列表中,以方便后续排序时进行分值计算。在图5的例子里,单词“创始人”的单词编号为7,对应的倒排列表内容为:(3:1),其中的3代表文档编号为3的文档包含这个单词,数字1代表词频信息,即这个单词在3号文档中只出现过1次,其它单词对应的倒排列表所代表含义与此相同。
113113

@@ -119,7 +119,7 @@
119119

120120
![](https://java-tutorial.oss-cn-shanghai.aliyuncs.com/855959-20170224200448148-924219280.png)
121121

122-
图6   带有单词频率、文档频率和出现位置信息的倒排索引
122+
图6 带有单词频率、文档频率和出现位置信息的倒排索引
123123

124124
“文档频率信息”代表了在文档集合中有多少个文档包含某个单词,之所以要记录这个信息,其原因与单词频率信息一样,这个信息在搜索结果排序计算中是非常重要的一个因子。而单词在某个文档中出现的位置信息并非索引系统一定要记录的,在实际的索引系统里可以包含,也可以选择不包含这个信息,之所以如此,因为这个信息对于搜索系统来说并非必需的,位置信息只有在支持“短语查询”的时候才能够派上用场。
125125

@@ -131,9 +131,9 @@
131131

132132
## 4\. 单词词典
133133

134-
单词词典是倒排索引中非常重要的组成部分,它用来维护文档集合中出现过的所有单词的相关信息,同时用来记载某个单词对应的倒排列表在倒排文件中的位置信息。在支持搜索时,根据用户的查询词,去单词词典里查询,就能够获得相应的倒排列表,并以此作为后续排序的基础。       对于一个规模很大的文档集合来说,可能包含几十万甚至上百万的不同单词,能否快速定位某个单词,这直接影响搜索时的响应速度,所以需要高效的数据结构来对单词词典进行构建和查找,常用的数据结构包括哈希加链表结构和树形词典结构。
135-
4.1   哈希加链表
136-
       图7是这种词典结构的示意图。这种词典结构主要由两个部分构成:
134+
单词词典是倒排索引中非常重要的组成部分,它用来维护文档集合中出现过的所有单词的相关信息,同时用来记载某个单词对应的倒排列表在倒排文件中的位置信息。在支持搜索时,根据用户的查询词,去单词词典里查询,就能够获得相应的倒排列表,并以此作为后续排序的基础。 对于一个规模很大的文档集合来说,可能包含几十万甚至上百万的不同单词,能否快速定位某个单词,这直接影响搜索时的响应速度,所以需要高效的数据结构来对单词词典进行构建和查找,常用的数据结构包括哈希加链表结构和树形词典结构。
135+
4.1 哈希加链表
136+
图7是这种词典结构的示意图。这种词典结构主要由两个部分构成:
137137

138138
主体部分是哈希表,每个哈希表项保存一个指针,指针指向冲突链表,在冲突链表里,相同哈希值的单词形成链表结构。之所以会有冲突链表,是因为两个不同单词获得相同的哈希值,如果是这样,在哈希方法里被称做是一次冲突,可以将相同哈希值的单词存储在链表里,以供后续查找。
139139

@@ -143,13 +143,13 @@
143143

144144
在响应用户查询请求时,其过程与建立词典类似,不同点在于即使词典里没出现过某个单词,也不会添加到词典内。以图7为例,假设用户输入的查询请求为单词3,对这个单词进行哈希,定位到哈希表内的2号槽,从其保留的指针可以获得冲突链表,依次将单词3和冲突链表内的单词比较,发现单词3在冲突链表内,于是找到这个单词,之后可以读出这个单词对应的倒排列表来进行后续的工作,如果没有找到这个单词,说明文档集合内没有任何文档包含单词,则搜索结果为空。
145145

146-
4.2   树形结构
147-
       B树(或者B+树)是另外一种高效查找结构,图8是一个 B树结构示意图。B树与哈希方式查找不同,需要字典项能够按照大小排序(数字或者字符序),而哈希方式则无须数据满足此项要求。
148-
       B树形成了层级查找结构,中间节点用于指出一定顺序范围的词典项目存储在哪个子树中,起到根据词典项比较大小进行导航的作用,最底层的叶子节点存储单词的地址信息,根据这个地址就可以提取出单词字符串。
146+
4.2 树形结构
147+
B树(或者B+树)是另外一种高效查找结构,图8是一个 B树结构示意图。B树与哈希方式查找不同,需要字典项能够按照大小排序(数字或者字符序),而哈希方式则无须数据满足此项要求。
148+
B树形成了层级查找结构,中间节点用于指出一定顺序范围的词典项目存储在哪个子树中,起到根据词典项比较大小进行导航的作用,最底层的叶子节点存储单词的地址信息,根据这个地址就可以提取出单词字符串。
149149

150150
![](https://java-tutorial.oss-cn-shanghai.aliyuncs.com/855959-20170224200636976-342112863.png)
151151

152-
图8   B树查找结构 
152+
图8 B树查找结构
153153

154154
总结
155155

@@ -164,5 +164,5 @@
164164
DocId:单词出现的文档id
165165
TF:单词在某个文档中出现的次数
166166
POS:单词在文档中出现的位置
167-
     以单词“加盟”为例,其单词编号为6,文档频率为3,代表整个文档集合中有三个文档包含这个单词,对应的倒排列表为{(2;1;<4>),(3;1;<7>),(5;1;<5>)},含义是在文档2,3,5出现过这个单词,在每个文档的出现过1次,单词“加盟”在第一个文档的POS是4,即文档的第四个单词是“加盟”,其他的类似。
167+
以单词“加盟”为例,其单词编号为6,文档频率为3,代表整个文档集合中有三个文档包含这个单词,对应的倒排列表为{(2;1;<4>),(3;1;<7>),(5;1;<5>)},含义是在文档2,3,5出现过这个单词,在每个文档的出现过1次,单词“加盟”在第一个文档的POS是4,即文档的第四个单词是“加盟”,其他的类似。
168168
这个倒排索引已经是一个非常完备的索引系统,实际搜索系统的索引结构基本如此。

docs/big-backEnd/后端技术杂谈8:OpenStack架构设计.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232

3333
<!-- more -->
3434

35-
OpenStack 是开源云计算平台,支持多种虚拟化环境,并且其服务组件都提供了 API接口 便于二次开发
35+
OpenStack 是开源云计算平台,支持多种虚拟化环境,并且其服务组件都提供了API接口便于二次开发
3636

3737
OpenStack通过各种补充服务提供基础设施即服务 Infrastructure-as-a-Service (IaaS)`的解决方案。每个服务都提供便于集成的应用程序接口`Application Programming Interface (API)。
3838

@@ -74,23 +74,23 @@ OpenStack的各个服务之间通过统一的REST风格的API调用,实现系
7474

7575
OpenStack services
7676

77-
* Dashboard     【Horizon】     提供了一个基于web的自服务门户,与OpenStack底层服务交互,诸如启动一个实例,分配IP地址以及配置访问控制。
77+
* Dashboard 【Horizon】 提供了一个基于web的自服务门户,与OpenStack底层服务交互,诸如启动一个实例,分配IP地址以及配置访问控制。
7878

79-
* Compute       【Nova】        在OpenStack环境中计算实例的生命周期管理。按需响应包括生成、调度、回收虚拟机等操作。
79+
* Compute 【Nova】 在OpenStack环境中计算实例的生命周期管理。按需响应包括生成、调度、回收虚拟机等操作。
8080

81-
* Networking    【Neutron】     确保为其它OpenStack服务提供网络连接即服务,比如OpenStack计算。为用户提供API定义网络和使用。基于插件的架构其支持众多的网络提供商和技术。
81+
* Networking 【Neutron】 确保为其它OpenStack服务提供网络连接即服务,比如OpenStack计算。为用户提供API定义网络和使用。基于插件的架构其支持众多的网络提供商和技术。
8282

83-
* Object Storage    【Swift】   通过一个 RESTful,基于HTTP的应用程序接口存储和任意检索的非结构化数据对象。它拥有高容错机制,基于数据复制和可扩展架构。它的实现并像是一个文件服务器需要挂载目录。在此种方式下,它写入对象和文件到多个硬盘中,以确保数据是在集群内跨服务器的多份复制。
83+
* Object Storage 【Swift】 通过一个 RESTful,基于HTTP的应用程序接口存储和任意检索的非结构化数据对象。它拥有高容错机制,基于数据复制和可扩展架构。它的实现并像是一个文件服务器需要挂载目录。在此种方式下,它写入对象和文件到多个硬盘中,以确保数据是在集群内跨服务器的多份复制。
8484

85-
* Block Storage       【Cinder】   为运行实例而提供的持久性块存储。它的可插拔驱动架构的功能有助于创建和管理块存储设备。
85+
* Block Storage 【Cinder】 为运行实例而提供的持久性块存储。它的可插拔驱动架构的功能有助于创建和管理块存储设备。
8686

87-
* Identity service  【Keystone】    为其他OpenStack服务提供认证和授权服务,为所有的OpenStack服务提供一个端点目录。
87+
* Identity service 【Keystone】 为其他OpenStack服务提供认证和授权服务,为所有的OpenStack服务提供一个端点目录。
8888

89-
* Image service     【Glance】  存储和检索虚拟机磁盘镜像,OpenStack计算会在实例部署时使用此服务。
89+
* Image service 【Glance】 存储和检索虚拟机磁盘镜像,OpenStack计算会在实例部署时使用此服务。
9090

91-
* Telemetry服务      【Ceilometer】  为OpenStack云的计费、基准、扩展性以及统计等目的提供监测和计量。
91+
* Telemetry服务 【Ceilometer】 为OpenStack云的计费、基准、扩展性以及统计等目的提供监测和计量。
9292

93-
* Orchestration服务   【Heat服务】   Orchestration服务支持多样化的综合的云应用,通过调用OpenStack-native REST API和CloudFormation-compatible Query API,支持`HOT <Heat Orchestration Template (HOT)>`格式模板或者AWS CloudFormation格式模板
93+
* Orchestration服务 【Heat服务】 Orchestration服务支持多样化的综合的云应用,通过调用OpenStack-native REST API和CloudFormation-compatible Query API,支持`HOT <Heat Orchestration Template (HOT)>`格式模板或者AWS CloudFormation格式模板
9494

9595
通过对这些组件的介绍,可以帮助我们在后续的内容中,了解各个组件的作用,便于排查问题,而在你对基础安装,配置,操作和故障诊断熟悉之后,你应该考虑按照生产架构来进行部署。
9696

docs/big-backEnd/后端技术杂谈开篇:云计算,大数据与AI的故事.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
[toc]
2+
13
我今天要讲这三个话题,一个是云计算,一个大数据,一个人工智能,我为什么要讲这三个东西呢?因为这三个东西现在非常非常的火,它们之间好像互相有关系,一般谈云计算的时候也会提到大数据,谈人工智能的时候也会提大数据,谈人工智能的时候也会提云计算。所以说感觉他们又相辅相成不可分割,如果是非技术的人员来讲可能比较难理解说这三个之间的相互关系,所以有必要解释一下。
24

3-
一、云计算最初是实现资源管理的灵活性
5+
# 一、云计算最初是实现资源管理的灵活性
46

57
我们首先来说云计算,云计算最初的目标是对资源的管理,管理的主要是计算资源,网络资源,存储资源三个方面。
68

0 commit comments

Comments
 (0)