《APUE》读书笔记-第二十章数据库函数库

简介:

  本章的内容是开发一个简单的、多用户数据库的C函数库。调用此函数库提供的C语言函数,其他程序可以读取和存储数据库中的记录。绝大部分商用数据库函数库提供多进程同时更新数据库所需要的并发控制,采用建议记录锁、B+树、动态散列实现数据库。

1、函数库

  开发类似ndbm函数库,增加了并发控制机制,从而允许多进程同时更新同一数据库。函数接口如下:

复制代码
1 #include "apue_db.h"
2 DBHANDLE db_open(const char *pathname, int oflag, .../* int mode */);  //返回值:若成功则返回数据库句柄,若出错则返回NULL
3 int db_close(DBHANDLE db); //关闭数据库
4 in db_store(DBHANDLE db, const char *key, const char*data, int flag); //向数据库中加条新的记录
5 char* db_fetch(DBHANDlE db, const char *key);//若成功则返回指向数据的指针,若记录没有找到则返回NULL。
6 int db_delete(DBHANDLE db, const char *key);//返回值:若成功则返回0, 若记录没有找到则返回-1。
7 void db_rewind(DBHANDLE db); //回滚到数据库第一条记录
8 char* db_nextrec(DBHANDLE db, char *key);//返回值:若成功则返回指向数据的指针,若到达数据库的结尾则返回NULL
复制代码

2、实现概述

  大多数访问数据库的函数库使用两个文件来存储信息:一个索引文件和一个数据文件。数据库实现结构如下图所示:

索引文件和数据文件结构

3、集中式和非集中式

(1)集中式:由一个进程作为数据库管理者,所有的数据库访问工作由此进程完成,其他进程通过IPC机制与此中心进程进行联系。

(2)非集中式:每个函数库独立申请并发控制(加锁),然后调用自己的I/O函数。调用数据库库函数执行I/O操作的用户进程是合作进程,使用字节范围锁机制实现并发访问。

非集中式避免使用IPC机制,速度一般比集中式要快。集中式的优点是能够根据需要来对操作模式进行调整,恢复要比非集中式方法容易。

4、并发

(1)粗锁(coarse-grained locking):将索引文件和数据文件中的一个作为整个数据库的锁,并要求调用者在对数据库进行操作前必须获得这个锁。缺点是限制了最大程度的并发。

(2)细锁(fine-grained locking):要求一个读进程或写进程在操作一条记录前必须先获得此记录所在散列链的读锁或写锁。允许对一条散列链同时可以有多个读进程,而只能有一个写进程。另外,一个写进程在操作空闲区链表(如dbdelete或dbstore)前,必须获得空闲区链表的写锁。最后,当dbstore向索引文件或数据文件加一条新记录时,必须获得对应文件相应区域的写锁。

相关文章
|
3月前
|
SQL 数据挖掘 测试技术
南大通用GBase8s数据库:LISTAGG函数的解析
南大通用GBase8s数据库:LISTAGG函数的解析
|
3月前
|
SQL 测试技术 数据库
|
4月前
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
88 2
|
4月前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
5月前
|
关系型数据库 MySQL 测试技术
《性能测试》读书笔记_数据库优化
《性能测试》读书笔记_数据库优化
45 7
|
6月前
|
SQL 数据处理 数据库
|
6月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
704 0
|
6月前
|
数据采集 DataWorks 安全
DataWorks产品使用合集之如何判断数据库类型是否支持整库
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
6月前
|
数据库连接 数据库
Thinkphp6多数据库实例跨库操作
Thinkphp6多数据库实例跨库操作
105 0
|
6月前
|
SQL JavaScript 前端开发
websql数据库javascript操作库--websqlWrapper
websql数据库javascript操作库--websqlWrapper