6.2.5 索引

Megastore数据模型中有一个非常重要的概念:索引(Index),分为两大类:

●局部索引(local index):局部索引是单个实体组内部的,用于加速单个实体组内部的查找。局部索引属于某个实体组,实体组内数据和局部索引的更新操作是原子的。在某个实体组上执行事务操作时先记录REDO日志,回放REDO日志时原子地更新实体组内部的数据和局部索引。图6-5中的PhotosByTime就是一个局部索引,映射到Bigtable相当于每个实体组中增加一些主键为(user_id,time,photo_id)的行。

●全局索引(global index):全局索引横跨多个实体组。图6-5中的PhotosByTag就是一个全局索引,映射到Bigtable是一张新的索引表,主键为(tag,user_id,photo_id),即索引字段+Photo数据表主键。

除了这两大类索引外,Megastore还提供了一些额外的索引特性,主要包含以下几个:

●STORING子句:通过在索引中增加STORING字句,系统可以在索引中冗余一些常用的列字段,从而不需要查询基本表,减少一次查询操作。冗余存储的问题使索引数据量变得更大。PhotosByTag索引中冗余存储了thumbnail_url,根据tag查询photo的thumbnail_url时只需要一次读取索引表即可。

●可重复索引:Megastore数据某些中某些字段是可重复的,相应的索引就是可重复索引。这就意味这,一行数据可能对应多行索引。PhotosByTag是重复索引,每个photo可能有不同tag,分别对应不同的索引行。