做国产数据库之二
做一个国产数据库做一个数据库系统真的是要懂的是基础,各种基础,网络,文件系统,操作系统,性能,测试,各方面都要懂
使用基本方法索引文件+数据文件+ B+ 树 ,hash空间 如图是写的一个数据库文件, 前面两兆字节是索引,后面是数据。最前面的8字节数据为索引总量 4字节,和 目前索引量4字节。
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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?