将数据预加载到RAM中以进行快速交易

时间:2018-03-25 05:12:56

标签: c++ database transactions in-memory

我的想法是,如果我们预先加载客户'事先处理数据(帐号,净余额),每当处理一个事务时,txn记录以FIFO数据结构写入RAM,并更新客户端' RAM中的数据,然后在一段时间后,记录将被写入磁盘中的数据库,以防止因波动而从RAM中丢失数据。

通过这样做,可以节省I / O中的时间,并且可以减少寻找客户的时间。目标数据(更快的交易)。

我听说过内存数据库,但我不知道我的想法是否和那个东西一样。还有,比我想的更好吗?

1 个答案:

答案 0 :(得分:0)

在我看来,思考/研究有几个方面可以向前迈进一步。预加载和处理数据通常比绑定到磁盘/数据库页面访问模式更快。但是,你会立即失去耐久性。因此,有三种方法在不同情况下有效:

磁盘同步(良好的旧数据库方式,保证每个事务数据都在永久存储之后)

内存(只要系统启动并运行,数量级更快,错误交易数据丢失的风险)

延迟(基本上在内存中,但不时将数据刷新到磁盘)

值得注意的是,Linux通过内存映射文件直接支持延迟,这些文件 - 一方面 - 通常与通常的内存一样快(除非读取和访问太多页面),另一方面同步自动(但不是立即)磁盘。

当您标记C ++时,这可能是让您的想法运行的最简单方法。

但是,请注意,在假设失败(硬件,重启等)时,您根本就没有交易,因为具体说明数据实际写入时是非常重要的。

作为旁注:有时,通过将(可靠地)写入日志文件(顺序访问,因此比直接写入数据文件更快)来解决此问题。在数据库上下文中搜索单词Compaction:这是将日志与通常使用的磁盘上数据结构合并并且不时发生的操作(当日志变得太大时)。

问题的最后一个方面:是的,内存数据库在主内存中工作。但是,根据它们给出的保证(ACID?),一些操作仍然涉及硬盘或NVRAM。