创建数据库并希望写入磁盘而不是保存在 RAM 中
Posted
技术标签:
【中文标题】创建数据库并希望写入磁盘而不是保存在 RAM 中【英文标题】:Creating a Database and want to write out to disk and not keep in RAM 【发布时间】:2018-01-03 22:42:34 【问题描述】:您好,我正在用 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
在映射区域中的位置。
【问题讨论】:
Oracle、Informix、DB2、PostgreSQL、Sybase、mysql、MS SQL Server 等 DBMS 都可以管理它——我不明白为什么你不能。当然,您必须设计系统才能正常工作,这并非易事,但肯定可以做到。 【参考方案1】:mmap() 只是将文件映射到虚拟地址空间,它不会将整个文件加载到 RAM 中。在 32 位操作系统上,您的数据库将受到可用地址空间的限制,但在 64 位操作系统上 mmap() 应该没问题。
因此,假设您的操作系统是 64 位,如果您的解决方案非常好:操作系统将管理映射,因此最近使用的页面将在 RAM 中,并且在内存压力的情况下,页面将自动写回磁盘。
【讨论】:
以上是关于创建数据库并希望写入磁盘而不是保存在 RAM 中的主要内容,如果未能解决你的问题,请参考以下文章