Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
ddia
提交
1884b230
D
ddia
项目概览
OpenDocCN
/
ddia
通知
6
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
ddia
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1884b230
编写于
3月 27, 2020
作者:
J
jiajiadebug
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
correct terms and fix minor issues
上级
6038b1d2
变更
5
展开全部
隐藏空白更改
内联
并排
Showing
5 changed file
with
119 addition
and
119 deletion
+119
-119
ch5.md
ch5.md
+28
-28
ch6.md
ch6.md
+7
-7
ch7.md
ch7.md
+25
-25
ch8.md
ch8.md
+39
-39
ch9.md
ch9.md
+20
-20
未找到文件。
ch5.md
浏览文件 @
1884b230
此差异已折叠。
点击以展开。
ch6.md
浏览文件 @
1884b230
...
...
@@ -107,7 +107,7 @@
如今,大多数数据系统无法自动补偿这种高度偏斜的负载,因此应用程序有责任减少偏斜。例如,如果一个主键被认为是非常火爆的,一个简单的方法是在主键的开始或结尾添加一个随机数。只要一个两位数的十进制随机数就可以将主键分散为100种不同的主键,从而存储在不同的分区中。
然而,将主键进行分割之后,任何读取都必须要做额外的工作,因为他们必须从所有100个主键分布中读取数据并将其合并。此技术还需要额外的记录:只需要对少量热点附加随机数;对于写入吞吐量低的绝大多数主键来是不必要的开销。因此,您还需要一些方法来跟踪哪些键需要被分割。
然而,将主键进行分割之后,任何读取都必须要做额外的工作,因为他们必须从所有100个主键分布中读取数据并将其合并。此技术还需要额外的记录:只需要对少量热点附加随机数;对于写入吞吐量低的绝大多数主键来
说
是不必要的开销。因此,您还需要一些方法来跟踪哪些键需要被分割。
也许在将来,数据系统将能够自动检测和补偿偏斜的工作负载;但现在,您需要自己来权衡。
...
...
@@ -123,7 +123,7 @@
次级索引的问题是它们不能整齐地映射到分区。有两种用二级索引对数据库进行分区的方法:
**基于文档的分区(document-based)**
和
**基于关键词(term-based)的分区**
。
###
按文档的二级索引
###
基于文档的二级索引进行分区
假设你正在经营一个销售二手车的网站(如
[
图6-4
](
img/fig6-4.png
)
所示)。 每个列表都有一个唯一的ID——称之为文档ID——并且用文档ID对数据库进行分区(例如,分区0中的ID 0到499,分区1中的ID 500到999等)。
...
...
@@ -133,7 +133,7 @@
![](
img/fig6-4.png
)
**图6-4
按文档分区二级索引
**
**图6-4
基于文档的二级索引进行分区
**
在这种索引方法中,每个分区是完全独立的:每个分区维护自己的二级索引,仅覆盖该分区中的文档。它不关心存储在其他分区的数据。无论何时您需要写入数据库(添加,删除或更新文档),只需处理包含您正在编写的文档ID的分区即可。出于这个原因,
**文档分区索引**
也被称为
**本地索引(local index)**
(而不是将在下一节中描述的
**全局索引(global index)**
)。
...
...
@@ -143,7 +143,7 @@
这种查询分区数据库的方法有时被称为
**分散/聚集(scatter/gather)**
,并且可能会使二级索引上的读取查询相当昂贵。即使并行查询分区,分散/聚集也容易导致尾部延迟放大(参阅“
[
实践中的百分位点
](
ch1.md#实践中的百分位点
)
”)。然而,它被广泛使用:MongoDB,Riak 【15】,Cassandra 【16】,Elasticsearch 【17】,SolrCloud 【18】和VoltDB 【19】都使用文档分区二级索引。大多数数据库供应商建议您构建一个能从单个分区提供二级索引查询的分区方案,但这并不总是可行,尤其是当在单个查询中使用多个二级索引时(例如同时需要按颜色和制造商查询)。
###
根据关键词(Term)的二级索引
###
基于关键词(Term)的二级索引进行分区
我们可以构建一个覆盖所有分区数据的
**全局索引**
,而不是给每个分区创建自己的次级索引(本地索引)。但是,我们不能只把这个索引存储在一个节点上,因为它可能会成为瓶颈,违背了分区的目的。全局索引也必须进行分区,但可以采用与主键不同的分区方式。
...
...
@@ -151,7 +151,7 @@
![](
img/fig6-5.png
)
**图6-5
按
关键词对二级索引进行分区**
**图6-5
基于
关键词对二级索引进行分区**
我们将这种索引称为
**关键词分区(term-partitioned)**
,因为我们寻找的关键词决定了索引的分区方式。例如,一个关键词可能是:
`颜色:红色`
。
**关键词(Term)**
来源于来自全文搜索索引(一种特殊的次级索引),指文档中出现的所有单词。
...
...
@@ -316,8 +316,8 @@
我们还讨论了分区和二级索引之间的相互作用。次级索引也需要分区,有两种方法:
*
按
文档分区(本地索引),其中二级索引存储在与主键和值相同的分区中。这意味着只有一个分区需要在写入时更新,但是读取二级索引需要在所有分区之间进行分散/收集。
*
按
关键词分区(全局索引),其中二级索引存在不同的分区中。辅助索引中的条目可以包括来自主键的所有分区的记录。当文档写入时,需要更新多个分区中的二级索引;但是可以从单个分区中进行读取。
*
基于
文档分区(本地索引),其中二级索引存储在与主键和值相同的分区中。这意味着只有一个分区需要在写入时更新,但是读取二级索引需要在所有分区之间进行分散/收集。
*
基于
关键词分区(全局索引),其中二级索引存在不同的分区中。辅助索引中的条目可以包括来自主键的所有分区的记录。当文档写入时,需要更新多个分区中的二级索引;但是可以从单个分区中进行读取。
最后,我们讨论了将查询路由到适当的分区的技术,从简单的分区负载平衡到复杂的并行查询执行引擎。
...
...
ch7.md
浏览文件 @
1884b230
此差异已折叠。
点击以展开。
ch8.md
浏览文件 @
1884b230
此差异已折叠。
点击以展开。
ch9.md
浏览文件 @
1884b230
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录