数据库函数库

数据库函数库

数据库函数库与UNIX系统的接口

一、历史

1 dbm(3)是在UNIX系统中很流行的数据库函数库,使用了动态散列结构。

2 db(3) 4.3+BSD提供的,它支持3种不同的访问模式:面向记录、散列和B-树。

二、函数库

#include "db.h"

1. 打开数据库

DB *db_open(const chapr a t h* n a m e, int o f l a g, int m o d e);

2. 关闭数据库

void db_close(DB* db);

3. 插入、替换记录

int db_store(DB *db, const char* key, const char* data, int flag);

4. 取记录

char *db_fetch(DB* db, const char* key);

5. 删除记录

int db_delete(DB* db, const char* key);

6. 回到数据库第一条记录

void db_rewind(DB* db);

7. 顺序的读每一条记录

char *db_nextrec(DB* db, char* key);

 

三、实现概述

大多数访问数据库的函数库使用两个文件来存储信息:一个索引文件(.idx)和一个数据文件(.dat)。索引文件包含索引值(键)和指向数据文件中对应数据记录的指针。数据文件存放相关的数据(数据以字符串的形式存放,增加可移植性)

程序示例:

#include "apue.h"
#include "apue_db.h"
#include <fcntl.h>
 
int
main(void)
{
    DBHANDLE    db;
 
    if ((db = db_open("db4", O_RDWR | O_CREAT | O_TRUNC,
      FILE_MODE)) == NULL)
        err_sys("db_open error");
 
    if (db_store(db, "Alpha", "data1", DB_INSERT) != 0)
        err_quit("db_store error for alpha");
    if (db_store(db, "beta", "Data for beta", DB_INSERT) != 0)
        err_quit("db_store error for beta");
    if (db_store(db, "gamma", "record3", DB_INSERT) != 0)
        err_quit("db_store error for gamma");
 
    db_close(db);
    exit(0);
}
$./db4
$ ls -l db4.*
-rw-r--r--  1 sar       28 Oct 19 21:33 db4.dat
-rw-r--r--  1 sar       72 Oct 19 21:33 db4.idx
$ cat db4.idx
0  53  35   0
0  10Alpha:0:6
0  10beta:6:14
17  11gamma:20:8
$ cat db4.dat
data1
Data for beta
record3
 
四、多进程访问同一数据库的方法
1.集中式。由一个进程作为数据库的管理者,所有数据库访问工作由此进程完成。其他进程通过IPC机制与此中心进程进行联系。
2.非集中式。每个库函数独立申请并发控制(加锁),然后自己调用I/O函数。
 
五、并发
1.粗锁。将两个文件中的一个作为整个数据库的锁,并要求调用者在对数据库进行操作前必须获得这个锁,这种加锁方式成为粗锁(coarse-grained locking)
2.细锁(fine-grained locking)。用来改进粗锁以提高并发度。
 
六、构造函数库
数据库的函数库由两个文件构成:公用的C头文件以及一个C源文件。
构造静态库,动态共享库,以及库函数的存放路径、环境变量的设置。

mysql数据库

oracle数据库

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值