ydb的内存模型
2009-09-10 00:00:00 来源:WEB开发网Java代码
struct log {
int fd;
char *fname;
u64 file_size;
};
然后我们主要来看ydb_open的实现,其他的方法就大概描述下:
Java代码
#define YDB_CREAT (0x01)
#define YDB_RDONLY (0x02)
#define YDB_GCDISABLE (0x04)
YDB ydb_open(char *top_dir,
int overcommit_ratio,
unsigned long long min_log_size,
int flags)
其中第一个参数是索引以及数据文件的目录,第二个参数表示,第三个参数表示数据文件的最小值,最后一个也就是上面的事个宏。意思基本就是字面的意思。
这次我们将代码分片(省略了一些合法性判断)来看。
首先新建一个db对象,然后将传递进来的参数赋值给它,并
Java代码
struct db *db = (struct db *)zmalloc(sizeof(struct db));
db->magic = YDB_STRUCT_MAGIC;
db->top_dir = strdup(top_dir);
db->overcommit_ratio = overcommit_ratio;
db->lock = (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER;
db->flags = flags;
然后通过top_dir,来得到索引的文件名,这里可以看到索引的文件名为top_dir/index.ydb.得到文件名后,进入 tree_open,将索引加载到内存中,这里可以看到传递给tree_open的logno是一个指针,这标明当它返回后会修改这个值,最终这个值会被修改为当前的写的那个数据文件的number。
最后调用loglist_open来初始化loglist,也就是数据文件的链表。
更多精彩
赞助商链接