创建数据库并希望写入磁盘而不是保留在RAM中

时间:2017-07-28 02:04:18

标签: c memory hard-drive

您好我正在用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区域中。

1 个答案:

答案 0 :(得分:0)

mmap()只是将文件映射到虚拟地址空间,它不会将整个文件加载到RAM中。在32位操作系统上,您的数据库将受到可用地址空间的限制,但在64位操作系统上,mmap()应该没问题。

因此,假设您的操作系统是64位,那么您的解决方案就完美了:操作系统将管理映射,因此最近使用的页面将在RAM中,并且在内存压力的情况下,页面将自动写回磁盘。 / p>