我的想法是,如果我们预先加载客户'事先处理数据(帐号,净余额),每当处理一个事务时,txn记录以FIFO数据结构写入RAM,并更新客户端' RAM中的数据,然后在一段时间后,记录将被写入磁盘中的数据库,以防止因波动而从RAM中丢失数据。
通过这样做,可以节省I / O中的时间,并且可以减少寻找客户的时间。目标数据(更快的交易)。
我听说过内存数据库,但我不知道我的想法是否和那个东西一样。还有,比我想的更好吗?
答案 0 :(得分:0)
在我看来,思考/研究有几个方面可以向前迈进一步。预加载和处理数据通常比绑定到磁盘/数据库页面访问模式更快。但是,你会立即失去耐久性。因此,有三种方法在不同情况下有效:
磁盘同步(良好的旧数据库方式,保证每个事务数据都在永久存储之后)
内存(只要系统启动并运行,数量级更快,错误交易数据丢失的风险)
延迟(基本上在内存中,但不时将数据刷新到磁盘)
值得注意的是,Linux通过内存映射文件直接支持延迟,这些文件 - 一方面 - 通常与通常的内存一样快(除非读取和访问太多页面),另一方面同步自动(但不是立即)磁盘。
当您标记C ++时,这可能是让您的想法运行的最简单方法。
但是,请注意,在假设失败(硬件,重启等)时,您根本就没有交易,因为具体说明数据实际写入时是非常重要的。
作为旁注:有时,通过将(可靠地)写入日志文件(顺序访问,因此比直接写入数据文件更快)来解决此问题。在数据库上下文中搜索单词Compaction:这是将日志与通常使用的磁盘上数据结构合并并且不时发生的操作(当日志变得太大时)。
问题的最后一个方面:是的,内存数据库在主内存中工作。但是,根据它们给出的保证(ACID?),一些操作仍然涉及硬盘或NVRAM。