基于内存池的 简单高效的数据库 SDK简介
下载地址:
https://gitee.com/tankaishuai/powerful_sdks/tree/master/shm_alloc_db_heap
shm_alloc_db_heap 是一个基于内存池实现的简单高效的文件型数据存储引擎,利用它可以轻松地像访问内存块一样读、写、增、删、改、查、任意自定义记录于磁盘文件中。除此之外,还提供了数据库碎片整理、堆破坏有效性检测等实用功能。特别适合用作数据存储类应用之中。
以下简单讲解下常用的API:
(1)shm_struct* shm_open(unsigned int shm_size, const char *file, int keep);
创建/打开一个数据库连接,成功返回连接句柄,失败返回 NULL。
参数:
shm_size: 初始化预分配数据库大小,建议取 1M 左右。
file: 数据库文件存储路径。
keep: 是否打开一个现有数据库。如果设为 0, 将完全新建数据库结构。
(2)void* shm_alloc(shm_struct* shm_head, int size);
插入一条数据库记录。 成功返回记录指针,失败返回 NULL。
参数:
size: 待插入的记录字节数。
注意:该接口在数据库已满时不会自动增长扩容,如果需要让数据库自动增长扩容,需使用以下高级接口:
void* shm_map_alloc(shm_struct** shm_head_ptr, int size, int* allow_remap);
初始化 int allow_remap = 0 并传入 &allow_remap 给第三个参数即可。
(3)void* shm_realloc(shm_struct* shm_head, void* ptr, int size);
重新调整数据库中记录项的字节大小。成功返回记录指针,失败返回 NULL。
参数:
ptr: 待调整的记录指针。
size: 记录需要的新的字节数。
(4)void shm_free(shm_struct* shm_head, void* ptr);
删除一条记录。
参数:
ptr: 待删除的记录指针。
(5)int shm_list(shm_struct* shm_head, shm_pfn_t blk_pfn, shm_pfn_t free_pfn, void *u);
遍历数据库中的所有记录。成功返回 0, 失败返回 错误码。
参数:
blk_pfn: 回调函数。其具有如下形式:
int (*shm_pfn_t)(shm_struct* shm_head, void* ptr, unsigned int size, void *u);
返回 0 继续,返回其他值则终止遍历。
free_pfn: 一般传 NULL。
u: 自定义数据。该参数直接透传给回调函数使用。
(6)void shm_close(shm_struct** shm_head_ptr, int defrag);
关闭数据库连接。
参数:
defrag: 是否进行数据库碎片整理。
使用示例:
编译并链接 shm_alloc_db_heap32.dll (32位)或 shm_alloc_db_heap64.dll (64位)即可。