您当前的位置: 首页 >  数据库

qianbo_insist

暂无认证

  • 0浏览

    0关注

    399博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

如何做一个国产数据库系统(一)

qianbo_insist 发布时间:2021-06-23 21:17:04 ,浏览量:0

做国产数据库之二

做一个国产数据库

做一个数据库系统真的是要懂的是基础,各种基础,网络,文件系统,操作系统,性能,测试,各方面都要懂

使用基本方法

索引文件+数据文件+ B+ 树 ,hash空间 如图是写的一个数据库文件, 前面两兆字节是索引,后面是数据。最前面的8字节数据为索引总量 4字节,和 目前索引量4字节。 在这里插入图片描述

1、定义我们的数据结构

typedef struct sdata { uint32_t index; char vardata[128]; }sdata;

这个数据结构表明 index是索引 ,vardata是128字节的数据,长度不超过128字节,这个数据结构是各案例,以后我们会逐步修改

2 、写一个基本的数据库
//2M 的索引,一半的空间为索引号码,一半的空间为数据偏移地址
//                     1024*1024/sizeof(int) 
int  bfile_write(const char * file,/*uint32_t index_num,*/ sdata data[],int n)
{
#define INDEX_BYTES 2 * 1024 * 1024
	int index_num = 1024 * 1024 / sizeof(int); //max index number is 162144
	if (n > index_num)
		return -1;
	FILE * fp = fopen(file, "wb");
	if (fp == NULL)
		return -1;
	fpos_t pos_start = 0;
	fpos_t pos_index = 8;
	fpos_t pos_data = pos_index + INDEX_BYTES;
	fpos_t position =  4 + 4 + INDEX_BYTES + sizeof(data[0].vardata) * n;
	fsetpos(fp, &position);
	fsetpos(fp, &pos_start);
	//写入总索引量
	fwrite(&index_num, sizeof(int), 1, fp);
	//写入目前索引量
	fwrite(&n, sizeof(int), 1, fp);
	//排序写入文件
	std::sort(&data[0], &data[n], Rule());
	int offsetsum = 4+4+INDEX_BYTES;
	int len = sizeof(data[0].vardata);
	for (int i = 0; i             
关注
打赏
1663161521
查看更多评论
0.0392s