Azure Table深入理解

> 1、同一个Table中的相同Partition Key是否存在同一个文件中?

Azure Table为如下所示的三层结构。Stream层是最终数据存放的位置,Partition层对Stream层的数据进行分区(Partition)管理。

Stream层,数据以Extent为单位进行复制。每个Extent由Block组成,单个Extent和Block的大小均有上限。一个Stream为一组指向Extent的指针,当一个Extent写满之后,会新建一个Extent继续写数据。在Partition层,同个Table中相同PartitionKey的元素表现为一个Partition,存在一个Stream中。

Stream层写入时,数据会同时写入一个主EN(Extent Node)和两个副EN;读取时,会根据情况选择主副EN中的一个进行负载均衡。

Partition层,Partition Server(PS)管理一组RangePartition,一个RangePartion内可能会有多个Partition。如果某个RangePartition繁忙,Partition Manager(PM)会把该RangePartition内的Partition进行分割,交给空闲的PS管理。反之对于访问量低的RangePartition会进行合并。这种分割和合并其实仅改变Stream中的指针,对Extent不做任何操作,所以速度很快。除了永久存储(Stream层),经常使用的数据也会保存在Partition层的Cache中以提高速度。

 

> 2、同一个存储账号的不同Table可否并行查询?查询时相互是否有影响?

同个存储账号的不同Table可以并行查询,并行查询会按查询内容占用相应PS和EN的资源,不会有其他影响。

 

> 3、同一个Table中,若一个查询涉及到了多个PartitionKey,底层是否会帮忙并行查询,然后将结果整合后统一返回?

当一个查询涉及多个PartitionKey时,各个PartitionKey的请求会交给相应PS处理,结果会一起返回给前端。


0 条评论

    发表评论

    电子邮件地址不会被公开。 必填项已用 * 标注