Berkeley DB - 如何使用 C API 为多个环境配置共享缓存



如何使用C API为多个环境配置共享缓存? 就像Java版本一样。http://docs.oracle.com/cd/E17277_02/html/GettingStartedGuide/env.html#multienvsharedcache

我想打开大量数据库,至少 100,000 个。但是,随着打开的数据库计数的增加,db->open 操作变得非常缓慢。100,000 个数据库几乎需要 2 个小时。所以我尝试将这些数据库分发到多个环境(例如,5 envs)。为了提高内存使用效率,我想在 env 之间共享缓存。

我很确定你不能用C API做到这一点。 但是,请考虑一些替代解决方案:

  1. 为每个环境使用相对较小的缓存。 每个环境的缓存中只需要有足够的内存来保存用于读取的工作页集。
  2. 在同一环境中打开所有数据库。 但是,如果您需要独立恢复每个数据库,这是行不通的。

打开所有这些数据库可能需要很长时间,因为您的系统正在交换。 但即使是每个环境 1MB 的缓存也需要 100GiB 的 RAM。 每个环境可以使用 96KiB 或更小的缓存,该缓存小于 10GiB。 试试 16KiB!

这不会像看起来那样破坏性能。 您的操作系统在缓存磁盘上的数据方面已经做得很好。

如果可以在同一环境中打开所有数据库,那就更好了。

最新更新