【问题标题】:Creating a Database and want to write out to disk and not keep in RAM创建数据库并希望写入磁盘而不是保存在 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 都可以管理它——我不明白为什么你不能。当然,您必须设计系统才能正常工作,这并非易事,但肯定可以做到。

标签: c memory hard-drive


【解决方案1】:

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

因此,假设您的操作系统是 64 位,如果您的解决方案非常好:操作系统将管理映射,因此最近使用的页面将在 RAM 中,并且在内存压力的情况下,页面将自动写回磁盘。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多