WEB开发网
开发学院软件开发Java ydb的内存模型 阅读

ydb的内存模型

 2009-09-10 00:00:00 来源:WEB开发网   
核心提示: 最后一步,也是一个校验,ydb的内存模型(6),为了防止索引文件中的key所对应的数据文件没有被加载到loglist中, Java代码 intstart=MIN(rarr_min(db->tree.refcnt),rarr_min(db->loglist.logs));intstop

最后一步,也是一个校验,为了防止索引文件中的key所对应的数据文件没有被加载到loglist中。

Java代码 int start = MIN(rarr_min(db->tree.refcnt), rarr_min(db->loglist.logs)); 
 int stop = MAX(rarr_max(db->tree.refcnt), rarr_max(db->loglist.logs)); 
 for(logno=start; logno<stop; logno++) { 
///得到当前数据的引用计数 
 uint refcnt = refcnt_get(&db->tree, logno); 
///表示当前的数据文件。 
 struct log *log = slot_get(&db->loglist, logno); 
 if(refcnt == 0 && log == NULL) 
  continue; 
 if(refcnt && log) 
  continue; 
 if(refcnt) { 
  log_error("Log %i(0x%x) used, but file is not loaded!", logno, logno); 
  log_error("Sorry to say but you'd lost %i key-values.", refcnt); 
  log_error("Closing db"); 
  /* we're in inconsistent state */ 
  db_close(db, 0); 
  return(NULL); 
 } 
 if(log) 
  continue; 
 } 
 return db; 
}

然后来看下tree_open和log_listopen的实现:

treeopen主要任务就是初始化红黑树,然后加载索引文件到内存,其中加载索引文件到内存是通过tree_load_index来实现的

tree_load_index就不分析了,只大概说下它的步骤。

1 首先通过mmap映射index。db到内存。

上一页  1 2 3 4 5 6 7  下一页

Tags:ydb 内存 模型

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接