我想要做的/拥有的是:
某种应用程序/驱动程序会创建 RAM 驱动器/分区,并为其分配驱动器号(例如 D:)。此驱动器号应基于/镜像物理目录的特定目录(例如 C:\MyDBData)。
在启动应用程序/驱动程序时,我希望应用程序/驱动程序将目录中的所有文件读入内存并锁定它们,以防止其他应用程序写入这些文件。然后所有文件都可以在 RAM 驱动器上使用。然后可以从内存中完成每个读取操作,我猜这会大大提高性能。任何写入都应该“写入”到物理目录,或者可能使用最多 1 秒的缓冲区。(因此,在断电的情况下,损失将最小。)
当然,此应用程序/驱动程序需要一些自己的 RAM,并且会对 CPU 负载产生一些轻微的开销。不过,我预计性能会大幅提升。
我想用它做以下事情:
为了加快我的 5 GB MySQL DB 的速度,我想将所有表移动到我的 8 GB RAM。
尽管 MySQL 确实支持内存表,但限制让我无法实现这一点。例如,堆表中不允许使用文本/blob 字段。
我仍然不知道 8 GB RAM 是否足以满足 5 GB RAM 驱动器、上述应用程序/驱动程序的开销、mysqld 本身以及操作系统的其余部分。但我可以考虑升级到 12GB 甚至 16 GB RAM。
我的问题是
我认为这种技术已经存在。它叫什么名字?在哪里可以找到它的良好实现?(最好是开源的,适用于 Windows)
尽管欢迎有关 Mysql 与内存的提示,并且也许我的这个想法不是解决 Mysql 问题的最佳方法,但我仍然想探讨有关目录到 RAM 的问题。
编辑: 我刚刚在一个类似的问题中读到,这称为文件系统缓存,并且存在于大多数现代操作系统中。但如果这是可行的方法,我该如何指示我的操作系统增加文件系统缓存,并始终在该缓存中保留整个 5GB 目录?
答案1
操作系统和数据库已经包含了以最佳方式管理内存中数据的功能,以适应大多数使用情况,而不会增加数据丢失的风险。比你我聪明得多的人已经研究过这个问题,他们只是决定为了好玩而关闭这个神奇的加速选项。:)
除非您有特定的用例并且知道自己在做什么,否则除了遵循数据库性能的最佳实践之外,您不会做出任何更好的改进。