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

Preloading data into RAM for fast transaction

我的想法是,如果我们提前预加载客户的数据(账户号,净余额),每当处理交易时,txn 记录就会以 FIFO 数据结构写入 RAM,并更新客户的数据在RAM中,然后在一定时间后将记录写入磁盘中的数据库,以防止由于波动而从RAM中丢失数据。

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

我听说过内存数据库,但我不知道我的想法是否与那个东西相同。另外,有没有比我想的更好的主意?

在我看来,要向前迈进,有几个方面需要思考/研究。 Pre-Loading 并且处理数据通常比绑定到磁盘/数据库页面访问模式更快。但是,您会立即失去耐久性。因此,三种方法在不同情况下均有效:

disk-synchronous(好老的数据库方式,每次交易后数据保证永久存储)

in-memory(只要系统正常运行就很好 运行,速度快几个数量级,有因错误丢失交易数据的风险)

延迟(基本上in-memory,但有时数据会刷新到磁盘)

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

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

但是请注意,当假设出现故障(硬件、重启等)时,您根本不会有事务,因为 non-trivial 可以具体说明数据实际写入的时间。

附带说明:有时,这个问题可以通过(可靠地)写入日志文件来解决(顺序访问,因此比直接写入数据文件更快)。在数据库上下文中搜索词压缩:这是将日志与常用 on-disk 数据结构合并的操作,并且不时发生(当日志变得太大时)。

关于问题的最后一个方面:是的,in-memory 数据库在主内存中工作。尽管如此,根据他们提供的保证(ACID?),一些操作仍然涉及硬盘或 NVRAM。