首页天道酬勤数据系统 - 分区和二级索引

数据系统 - 分区和二级索引

admin 12-04 23:18 277次浏览

到目前为止,我们讨论的分区方案只依赖于键值数据模型。如果数据记录只通过它们的主键来访问,我们可以从它们的键来确定分区,并使用它来读写与这个键对应的分区。

但如果加上二级指标,情况会变得更加复杂。辅助索引通常不能唯一标识数据记录,但它是一种搜索特定值出现频率的方法,例如:

寻找所有用户的相关行为123、寻找所有包含猪食一词的文章、寻找所有红色汽车的二级索引是关系数据库的基础,在文档数据库中也很常见。许多键值存储(如HBase和伏地魔)都避免了二级存储,因为它们增加了实现的复杂性,但有些存储(如Riak)已经开始添加二级索引,因为它们对数据模型非常有用。最后,二级索引是Solr和Elasticsearch等搜索服务器存在的原因。

二级索引的问题是它们没有整洁的映射分区。使用辅助索引对数据库进行分区有两种主要方式:

基于文档的分区和基于术语的分区

基于文档分区二级索引

例如,您正在运行一个销售二手车的网站。每个列表使用一个唯一的ID,我们称之为文档ID,你按照文档ID对数据库进行分区,比如ID 0 ~ 499在分区0,ID500~999在分区1,以此类推。

您希望您的用户通过过滤颜色和品牌来查找车辆,因此您需要颜色和品牌的二级索引(在文档数据库中,这将是一个字段;在关系数据库中,这将是一个列)。如果声明索引,数据库将自动执行索引。例如,当一辆红色汽车添加到数据中时,数据库分区会自动将其添加到索引颜色为红色的文档标识列表中。

这样,每个分区都是完全独立的:每个分区都维护自己的二级索引,它只包含那部分文档。并且不在乎其他分区存储什么数据。Jkdkfd在写数据库时需要添加——,删除或更新文档3354。您只需要处理包含您正在编写的文档标识的分区。因此,按文档分区的索引也称为本地索引。

但是,从文档分区索引中读取数据时需要非常小心:除非您对文档ID做了一些特殊处理,否则没有理由将所有特定颜色或品牌的汽车都放在同一个分区中。下图中。红色汽车出现在0区和1区。因此,如果你想找到一辆红色汽车,你必须向所有地区发送一个查询,并结合你得到的所有结果。

这种查询分区数据库的方式也称为分散/聚集,读取二级索引的查询开销很大。即使您同时查询所有分区,分散/聚集也很容易导致尾部延迟扩展。但也有广泛使用的,如MongoDB、Riak、Cassandra、Elasticsearch、SolrCloud、VoltDB等都使用了文档分区的二级索引。大多数数据库提供者会建议您构建自己的分区方案,以便辅助索引查询只能服务于单个分区,但这通常是不可能的,尤其是当jkdkfd在单个查询中使用多个辅助索引时,例如,在筛选车辆时,它同时使用颜色和品牌。

基于术语的二级索引分区

除了让每个分区都有自己的二级索引之外,我们还可以构建一个全局索引来覆盖所有分区中的数据。但是,我们不能只将索引存储在一个节点上,因为它可能会成为瓶颈,破坏分区的目的。全局索引也必须分区,但它的分区可以不同于主键索引。

下图显示了这将是什么样子:

所有分区中的红色车辆都出现在color:red的索引中,但索引是分区的,分区0中的颜色以字母A到R开头,分区1中的颜色以字母S到Z开头。品牌的指数分区也差不多。

我们称这种索引方法为术语分区术语分区,因为我们寻找的术语决定了索引的分区。同时,我们在这里使用的术语:color:red。该术语来自全文索引(一种特殊的二级索引),其中该术语是文档中出现的所有单词。

和以前一样,我们可以用术语本身或使用它的风骚蚂蚁来划分索引。使用术语本身进行分区可以用于范围扫描(例如,在数字属性中,如汽车的要价),而使用术语散列进行分区可以更均匀地分配负载。

与文档分区索引相比,全局(术语分区)索引的优点是可以提高读取效率:客户端不需要分散/聚合所有分区,只需要向包含术语的分区发送请求。然而,全局索引的缺点是写入速度较慢且更复杂,因为写入单个文档现在可能会影响索引的多个分区(文档中的每个术语可能位于不同的分区和节点中)。

理想情况下,索引总是最新的,写入数据库的每个文档都会立即反映在索引中。但是,在术语分区索引中,这需要一个

因为写入而跨所有分区的分布式事务,并非所有数据库都支持。

实际上,对全局二级索引的更新通常是异步的(也就是说,如果您在写操作后不久就读取了索引,则您刚刚进行的更改可能尚未反映在索引中)。例如,Amazon DynamoDB指出,在正常情况下,其全局二级索引会在几分之一秒内更新,但是如果基础架构发生故障,则可能会经历更长的传播延迟。

全局术语分区索引的其他用途包括Riak的搜索功能和Oracle数据仓库,您可以在本地索引和全局索引之间进行选择。

“驾驶脑”上云SwiftUI-如何添加Scenekit场景Qt专栏之模态与非模态对话框的实现简介TLS 1.3
索尼a7r4(windows源码) fiddler抓包工具使用教程(fiddler手机抓包)
相关内容