数据分区设计(5)-基于词条(Term)的二级索引分区

举报
JavaEdge 发表于 2022/08/31 23:47:01 2022/08/31
【摘要】 可对所有的数据构建全局索引,而非每个分区维护自己的二级索引(本地索引)。为避免成为瓶颈,不能将全局索引存储在一个节点,否则就破坏了设置分区均衡的目的。所以,全局索引也必须分区,但可以采用与K不同的分区策略。如图-5,所有数据分区的红车收录在索引color:red,而索引本身也是分区的,如从 a 到 r 开始的颜色在分区 0,s 到 z 分区 1。类似的,汽车制造商的索引也被分区(两个分区的边...

可对所有的数据构建全局索引,而非每个分区维护自己的二级索引(本地索引)。为避免成为瓶颈,不能将全局索引存储在一个节点,否则就破坏了设置分区均衡的目的。所以,全局索引也必须分区,但可以采用与K不同的分区策略。

如图-5,所有数据分区的红车收录在索引color:red,而索引本身也是分区的,如从 ar 开始的颜色在分区 0,sz 分区 1。类似的,汽车制造商的索引也被分区(两个分区的边界分别是 fh)。

图-5:基于关键词对二级索引进行分区

这种索引称为 词条分区(term-partitioned),以待寻找的关键词本身作为索引。如颜色:color:red。关键词(Term)这个名称源于全文索引(一种特殊的二级索引),term指文档中出现的所有单词集合。

可直接通过 关键词 本身来全局划分索引,或对其hash。根据关键词本身分区对范围扫描很有用(如对数值类的属性,e.g. 车报价),而对关键词hash分区可更均匀划分分区。

全局的词条分区 V.S 文档分区索引

  • 它使读更高效,即无需分散 / 收集对所有分区都执行一遍查询。相反,客户端只需向含词条的分区发出读请求
  • 全局索引的缺点,写速度较慢且复杂,因为单个文档的更新是,可能影响多个二级索引,而二级索引的分区可能位于不同分区或不同节点,

理想情况下,索引应时刻保持最新,即写入的每个数据要立即反映在最新的索引。但对词条分区,这需要跨分区的分布式事务,写入速度将受到极大影响,所以现有 DB 都不支持同步更新二级索引。

实践中,对全局二级索引的更新都是异步(即若在写入后马上读索引,则更新可能尚未反映在索引中)。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。