您好我正在用C编写数据库,并希望将数据写入硬盘驱动器,而不再将其存储在RAM中。有没有办法做到这一点?
目前我创建一个大文件并将其打开
fd = open("database.dat",O_CREAT | O_RDWR);
hd = mmap(0, SSD_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
然后写入已映射的内存地址,然后
msync(dest,DB_PAGE_SIZE, MS_SYNC);
其中dest
位于mmaped区域中。
答案 0 :(得分:0)
mmap()只是将文件映射到虚拟地址空间,它不会将整个文件加载到RAM中。在32位操作系统上,您的数据库将受到可用地址空间的限制,但在64位操作系统上,mmap()应该没问题。
因此,假设您的操作系统是64位,那么您的解决方案就完美了:操作系统将管理映射,因此最近使用的页面将在RAM中,并且在内存压力的情况下,页面将自动写回磁盘。 / p>