首页 > 编程知识 正文

动态磁盘和基本磁盘哪个好(FastDB 磁盘和无盘模式)

时间:2023-05-05 17:49:19 阅读:121312 作者:3935

在网上看了主存数据库的性能测试,与BerkeleyDB和SQLite相比,fastdb的性能还稍好一些,时间和精力有限,本人对SQLite、BerkeleyDB进行了系统的分析研究在这里,我们只需简单分析fastdb效率的实现。

其他报告显示,在fastdb磁盘模式下,批量提交事务时fastdb的性能比SQLite的性能高3-10倍,但每次提交一个事务时fastdb的性能这是因为在磁盘模式下,fastdb经常将数据同步到磁盘,而I/o操作访问物理磁盘,导致性能瞬间下降几个数量级。

因此,fastdb的作者提供了两种方案,一种是定时备份,另一种是fastdb的无盘模式。

)1)磁盘模式

磁盘模式的优点是服务器崩溃时不会丢失与文件同步的数据部分。 另一方面,频繁的I/o操作会导致性能下降。 那么,磁盘模式是如何实现的?

file.cpp文件中将显示:

首先在主目录中打开*.fdb文件

FD=:3360open(name,open_flags,0666 );

if(FD0 ) {

int orig_errno=errno;

故障定位文件' % s '-FD-% d,错误跟踪- % dn ),

name,fd,orig_errno;

return orig_errno;

}

然后mmap ) )使用映射

mapaddr=(char* ) mmap null,mmapSize,

(flags read_only )? prot _ read : prot _ read|prot _ write,

mmap_attr,fd,0;

if(mmapaddr==(char* )-1 ) {

status=errno;

mmap addr=空;

if(FD=0) {

:3360关闭(软盘;

}

返回状态;

}

map的一种著名映射机制是可以将数据同步到文件中

)2)无盘模式

fastdb的默认模式是磁盘模式,可以通过更改config.h,然后重新编译来实现

//diskless _ configuration-only in-memorytemporarydatabase

拆下//

# define diskless _ configuration1//这就是无盘模式

无盘模式完全是内存操作。 在此使用system v的共享内存。 sync.cpp的代码如下:

intfd=:3360打开(filename,O_RDWR|O_CREAT,ACCESS_PERMISSION_MASK ); 用/tmp创建*.fdb文件

if(FD0 ) {

if (文件名!=name

delete[] fileName;

}

返回假;

}

:3360关闭(软盘;

intkey=Getkeyfromfile(filename ); //根据文件名创建密钥

if (文件名!=name

delete[] fileName;

}

if(key0) {

返回假;

}

shm=shmget(key,doalign(size,4096 ),IPC _ creat|access _ permission _ mask ); //创建共享内存

if(shm0) {

返回假;

}

ptr=(char* ) shmat ) shm,NULL,0 ); //装载到本进程

-----------------

译文: https://blog.csdn.net/huanzai2/article/details/24404247

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。