【问题标题】:How to config a shared cache for multiple environments with C API?如何使用 C API 为多个环境配置共享缓存?
【发布时间】:2014-03-31 08:19:33
【问题描述】:

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

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

【问题讨论】:

    标签: berkeley-db


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我想你说的 16KiB 是指数据库缓存。我在环境中将缓存大小设置为 5GiB。尝试在环境中创建的数据库中设置缓存大小是错误的,因为在 Berkeley DB 环境中打开的数据库使用指定给环境的缓存。
    • 嗯,不...我的意思是每个环境中都有一个 16KiB 的缓存,因为您似乎每个数据库都使用一个环境。显然,有 100,000 个环境,每个环境不可能有 5GiB 缓存!
    猜你喜欢
    • 1970-01-01
    • 2019-01-27
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    相关资源
    最近更新 更多