数据库函数库
数据库函数库与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数据库