免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1898 | 回复: 0
打印 上一主题 下一主题

学生,遇到一个小项目,设计基于共享内存的数据库,若干问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-13 21:12 |只看该作者 |倒序浏览
在linux下,需要做一个基于共享内存的数据库,用共享内存是便于二次开发,导师教我们先思考整体设计,比如从数据库的两层模型,两层映射开始设计。

物理层,自然是基于共享内存,在unix下,对于共享内存的管理是通过shmget()\shmat()等函数控制的,通过shmget()函数可以创建指定大小的共享内存,然后在需要使用的进程中调用shmat()函数获取这个共享内存的起始地址指针ptr,然后所有的操作都是基于对这个ptr指针的操作来操作的,在共享内存中没有alloc() free()等函数,所有的操作都是自己通过操作ptr指针的移动来进行,所以我在想,在物理层,是不是要写一系列函数,提供对外的操作共享内存的接口,比如说写一个alloc(size_t size)函数,根据申请的size 创建指定大小空间,当然,另外还要维护起码两个链表,一个是空闲链表,一个是指向第一个节点的链表。。导师说还要考虑共享内存的分块,他说对如果使用ptr指针一个一个移动操作,效率很低,需要比如划分2k为一块,然后所有的操作都是以2k为单位,就像操作系统的分页那样。。但是我没怎么明白,有没有高手指教一下?

然后上面逻辑层,针对这个关系型数据库,是不是就是设计比如3个结构体,比如:
struct db
{
   dbname;
   next_db;
   first_table;
   ...
}

struct tb
{
   tbname;
   next_tb;
   first_column;
   ...
}

struct column
{
   coluname;
   type
   next_colu;
   ...
}

分别表示数据库、表、列,然后设计他们的关联关系,比如我设计的是在内存中设一个ptr_db_head指针,指向第一个db结构体,代表第一个数据库,然后这个结构体里有指向它的第一个表的指针,这个表里也有指向他的列属性的指针。。。等等等等。。。
这样是不是就是设计它的逻辑层了?

用户层就不说了,暂时先要把这个搞明白。。

本人水平很有限,请各位指教了,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP