快速,二进制数据库替代

我想实现一个快速的数据库替代,只需要处理二进制数据。 为了指定,我想要一个靠近数据库的东西,即使在执行过程中强制终止(任务pipe理器)的情况下,也可以安全地存储数据库,同时也可以直接从C ++的内存访问。 就像镜像到硬盘的结构向量一样。 它应该能够处理数十万次读取访问,并且每秒至less可以访问1000次写入访问。 在强制终止的情况下,最多可以丢失最后一个命令。 它不需要支持multithreading,数据库文件只能被程序的一个实例访问。 只需要在Windows上运行。 这些是我迄今为止想到的解决scheme:

  1. SQL数据库

    • 优点
      • 易于实现,因为有大量的库可用
    • 缺点
      • 服务器处于不同的进程,因此可能会导致进程间通信速度变慢
      • parsingSQL查询的必要性
      • 为multithreading环境构build,因此需要大量不必要的同步
      • 行不能使用指针直接访问,但每次更改至less需要复制两次
      • UPDATE查询不必要的延迟,因为需要search整个表并检查WHERE情况
      • 这些只是我头顶的几个,可能还有更多
  2. 内存映射文件

    • 优点
      • 直接内存映射,所以可以直接访问指针
      • 与数据库相比非常快
    • 缺点
      • 强行终止可能会导致整个页面不能被写入
      • 很多代码(我其实不介意)
      • 没有强制同步的可能
      • 增加文件大小可能需要很长时间
  3. C ++vector*
    • 优点
      • 可以直接访问指针,但是需要手动通知更改
      • 与数据库相比非常快
      • 完全的编程自由
    • 缺点
      • 由于多次调用WriteFile,可能会变慢
      • 很多代码(我其实不介意)
  4. 每隔几秒完成一次写入C ++vector
    • 优点
      • 可以直接访问指针
      • 与数据库相比非常快
      • 完全的编程自由
    • 缺点
      • 大量未改变的数据被重写到文件,或者浪费大量内存以防止不必要的写入
      • 写入大量内存时无法访问内存
      • 可能会损失数秒的数据
      • 需要多个线程并为此进行同步

*基本上,一个只向每个行公开每个向量的读/写function的包装类允许直接写入内存,但是依靠调用者来通知变化,所有的读取都是从内存中的拷贝完成的,所有的写操作都是为了内存中的副本以及每个命令的文件本身

另外,是否可以在不刷新的情况下写入文件的不同部分,然后一次刷新所有更改,以保证文件将完全写入或完全不写入,即使在写入期间强制终止的情况下也是如此。 我能想到的是以下工作stream程:

在启动时复制目标文件,然后为每一组数据:写入所有更改复制 – >刷新通过replace原来的重复

但是,我觉得这将是一个可怕的大文件的硬盘空间的浪费。

预先感谢您的任何意见!