数据分片--数据分片与次级索引

2018-05-13  本文已影响5人  MontyOak

如果所有数据的查询操作都仅仅依赖数据主索引的话,情况和KV结构下的数据分片一样。但是有时还需要根据其他条件进行数据筛选,比如查询某用户某一天的记录,所有包含某商品的购物车信息等等。

按文档划分的次级索引

现在以一个汽车销售网站为例,每辆汽车以一个实体的形式存放在数据库中,按照唯一id进行数据分片。常见的查询条件有汽车颜色、汽车品牌、汽车型号(这些都是文档中的字段)等等。

汽车销售网站示例
这种在增加/修改时创建的用于查询的次级索引,只包含本身数据片的内容,所以也叫本地索引(local index)
这时按次级索引的查询需要向所有数据片发送查询请求,将结果分别查询之后在进行一次聚合。这常常会导致某一个慢查询拖累整个查询的情况。

按区间划分的次级索引

不同于之前提到的本地索引,我们可以构造一个全局索引。按照索引的区间划分不同数据片的数据内容。这样可以降低查询操作的成本,查询操作只需要从部分数据片中读取数据;缺点在于增加了写操作的复杂度,需要额外维护数据与分片的关系。


按区间划分的次级索引

当写/更新操作进行时,有时会引发跨节点的数据更新操作,分布式事务引入了额外的复杂度。所以,索引的更新和写操作一般是异步执行的,先进行写操作,再异步更新索引。

上一篇 下一篇

猜你喜欢

热点阅读