现在的位置: 首页 > 综合 > 正文

ingres 中的 parallel create index

2013年01月05日 ⁄ 综合 ⁄ 共 14046字 ⁄ 字号 评论关闭

在开源的数据库中,支持并行建索引的,只有ingres,但它并不是并行建一个索引,而是对同一个表,同时并行建多个索引,

下面主要分析它如何协调主子线程通信部分,使用版本是 ingres-10.1.0-114-gpl;

并行建索引函数为:src/back/dmf/dmu/dm2upind.c        STATUS dm2u_pindex( DM2U_INDEX_CB   *index_cbs)

主子线程通信函数是 src/back/dmf/dmu/dm2uputi.c       

 DB_STATUS dm2u_pload_table(DM2U_MXCB   *mxcbs, i4  *rec_cnt, DB_ERROR  *dberr)

 

 

ingres是多线程,所以建索引的主线程和各个子线程是通过内存直接交换信息,没有通过共享内存;它由多个页面组成

 

 

 

 

DB_STATUS dm2u_pload_table(DM2U_MXCB   *mxcbs, i4  *rec_cnt, DB_ERROR  *dberr)

 

 

在子线程从交换页面读数据时,是互斥的,就是说同一时刻只有一个子线程读一个交换页面,不存在并发读

而在主线程写的时候,是没加互斥的,

一个写,多个读的时候,读之间互斥,写没加互斥,没写满之前,读不到

 

 

 主线程放数据,子线程取数据的函数,没什么东西,主要是写满之后,取下一个页面的函数

 

 

 

 

 

实现了一个线程写,多个线程读,每个读线程读到全是一样的,

 

【上篇】
【下篇】

抱歉!评论已关闭.