Как настроить общий кеш для нескольких сред с помощью C API?

Как настроить общий кеш для нескольких сред с помощью C API? Так же, как версия Java. http://docs.oracle.com/cd/E17277_02/html/GettingStartedGuide/env.html#multienvsharedcache

Я хочу открыть большое количество баз данных, не менее 100 000. Но по мере увеличения количества открытых баз данных операция db->open становится очень медленной. Это стоило почти 2 часа для 100 000 баз данных. Поэтому я пытаюсь распределить эти базы данных по нескольким окружениям (например, по 5 окружений). И чтобы повысить эффективность использования памяти, я хочу разделить кеш между envs.


person roczhang    schedule 31.03.2014    source источник


Ответы (1)


Я почти уверен, что вы не можете сделать это с помощью C API. Однако рассмотрите несколько альтернативных решений:

  1. Используйте относительно небольшие кэши для каждой среды. Вам нужно иметь достаточно памяти в кэше каждой среды только для хранения рабочего набора страниц для чтения.
  2. Откройте все базы данных в одной среде. Однако, если вам нужно восстановить каждую базу данных по отдельности, это не сработает.

Вероятно, открытие всех этих баз данных занимает так много времени, потому что ваша система выполняет подкачку. Но даже для кэша объемом 1 МБ на каждую среду потребуется 100 ГБ ОЗУ. Возможно, вам удастся обойтись кешем размером 96 КБ или меньше на каждую среду, что составляет менее 10 ГБ. Попробуйте 16КиБ!

Это не снизит производительность, как может показаться. Ваша ОС уже неплохо справляется с кэшированием данных на диске.

Если вы можете открыть все базы данных в одной среде, это еще лучше.

person Mike Andrews    schedule 01.04.2014
comment
Я думаю, вы сказали, что 16 КБ означает кеш базы данных. Я установил размер кеша на 5 ГБ в среде. Попытка установить размер кэша в базе данных, созданной в среде, является ошибкой, поскольку базы данных, открытые в средах Berkeley DB, используют кэш, указанный для среды. - person roczhang; 02.04.2014
comment
Ну, нет... Я имею в виду кэш размером 16 КБ в каждой среде, поскольку казалось, что вы используете одну среду для каждой базы данных. Понятно, что при наличии 100 000 сред каждая не может иметь кэш-память объемом 5 ГБ! - person Mike Andrews; 03.04.2014