[Day 28] Partitioning (2) - Partitioning and Secondary Indexes

Partitioning and Secondary Indexes

昨天谈了 key-value partition,但在实务上,我们可能会为一些具指标性的栏位建立第二、第三个 index,secondary index 的目的不是要识别到单笔资料,而是要透过这个帮助工程师更快速的查询到特定的值,例如快速找到所有红色的车款。

许多的 relational 和 document 资料库都支援 scondary index,既然这麽实用,我们就得研究研究如何在已用 key 切好 partition 的情况下,让我们的 secondary index 也做 partition ,接下来介绍 2 种主要的方法:document-based partitioningterm-based partitioning

Partitioning Secondary Indexes by Document

想像一下你有一个卖二手车的网站,每台车都有自己的 unique ID (也是 document ID,我们使用 document 资料库),你的 partition 策略选择 key 范围,例㜶 0~499 为 partition 0,500~999 为 partition 1 以此类推。

你想让 user 能用颜色和车厂来搜寻二手车,所以你需要为这 2 个 fields 建立 secondary index,尔後你在新增红色的车款时,资料库就会自动将 color:red 当做进入点字串来建立 index,建立完成後如下图:

figure_6-4

可以看到这个 index 的方法,每个 partition 都是完全的将 index 分离,每个 partition 都维护自己的 secondary index ,里头只列出该 partition 底下的 document id,互不干扰,之後不管你是新增、更新、删除都只会影响某一个 partition,这就是 document-partition 也被称为 local index

现在我们想查红色二手车,在这个 index 方法底下,我们一定得查询 所有 的 partition,这个查询方法也称为 scatter/gather ,因为是查所有的 partition,所以这个查询操作是昂贵的,会倾向增加 P99 response time (Day 3)。

尽管如此,document-partition 还是被广泛的运用到 MongoDB, Riak, Cassandra, Elasticsearch, SolorCloud 这些资料库上。

Partitioning Secondary Indexes by Term

不像前一个 index 方法是存在每个 partition 里 (local index),接下来这个 index 方法也称为 global index ,它就只把它存在一个 partition 里,如下图:

figure_6-5

可以看到我们的红色二手车 color_red 只出现在 partition 0 里头了,partition 1 里没有,这个方法会将 color_red 视为完整字串项目来做 partition,所以 partition 0 只存了 a ~ r 字母颜色开头的车, partition 1 只存了 s ~ z 字母颜色开头的车,车厂 make: 亦同,这就是 term-partition

global (term-partition) index 的好处就是读取变的有效率了,因为它不用像 document-partition 那样需要读所有的 partition,反之缺点就是写入比较慢和复杂,因为一笔 document 会影响许多的 partition。


<<:  第28天-CSS-影像-(3-2)

>>:  Day 30 - 结束其实是另外一个旅程的开始

Ruby on Rails Controller

第 1 步 - 新增 Route 别忘了,使⽤者想要看到你网站上的内容,第⼀步是要问过 Route,...

C# delegate

我们习惯把数据或者对像作为参数传递给方法,比如: int i = int.Parse("9...

Vue3 ( 元件 / components ) -2

1.元件注册方法有三,注册後才能使用 (1)全域注册 方法1. <alert></...

大脑如何精准学习 (2) 积极主动参与/好奇心

终於读到我很想读的段落了。 积极主动参与 active engagement - 定义 这里讲的是「...

Day 25 : 案例分享(7.4) 库存与制造 - 工单与工作中心

案例说明及适用场景 当有工单的需求时 每一个BOM表都有属於自己的制程,而一个产品可以多个BOM表 ...