Нужно загрузить всю базу данных postgreSQL в оперативную память - PullRequest
19 голосов
/ 02 января 2009

Как мне поместить всю мою базу данных PostgreSql в оперативную память для более быстрого доступа ?? У меня 8 ГБ памяти, и я хочу выделить 2 ГБ для БД. Я читал о настройках общих буферов, но он просто кэширует наиболее доступный фрагмент базы данных. Мне нужно было решение, в котором вся БД помещалась в ОЗУ, и любое чтение происходило из БД ОЗУ, и любая операция записи сначала записывала в БД ОЗУ, а затем в БД на жестком диске (что-то вроде fsync по умолчанию = с общими буферами в настройках конфигурации postgresql).

Ответы [ 5 ]

7 голосов
/ 04 января 2009

Я задавал себе один и тот же вопрос некоторое время. Одним из недостатков PostgreSQL является то, что он, похоже, не поддерживает механизмы хранения IN MEMORY, как MySQL ...

В любом случае, я столкнулся с статьей пару недель назад, в которой описывалось, как это можно сделать; хотя, похоже, работает только на Linux. Я действительно не могу ручаться за это, потому что я сам не пробовал, но, похоже, это имеет смысл, поскольку табличному пространству PostgreSQL действительно назначено смонтированное хранилище.

Однако даже при таком подходе я не уверен, что вы могли бы также поместить свои индексы в ОЗУ; Я не думаю, что MySQL заставляет использовать индекс HASH с таблицей IN MEMORY даром ...

Я также хотел сделать то же самое, чтобы улучшить производительность, поскольку я также работаю с огромными наборами данных. Я использую питон; у них есть типы данных словаря, которые в основном являются хеш-таблицами в форме пар {ключ: значение}. Их использование очень эффективно и эффективно. По сути, чтобы получить мою таблицу PostgreSQL в ОЗУ, я загружаю ее в такой словарь Python, работаю с ней и время от времени сохраняю ее в db; оно того стоит, если его правильно использовать.

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

Надеюсь, это поможет!

2 голосов
/ 14 января 2009

если вы извлекаете данные по id, используйте memcached - http://www.danga.com/memcached/ + postgresql.

0 голосов
/ 03 июня 2009

Установите устаревший RAM-диск и скажите pg, чтобы он хранил там свои данные.

Убедитесь, что вы хорошо это поддерживаете.

0 голосов
/ 04 января 2009

Имея только 8 ГБ базы данных, если вы уже оптимизировали всю активность SQL и готовы решать проблемы с запросами на оборудовании, я полагаю, у вас проблемы. Это просто не масштабируемое решение в долгосрочной перспективе. Вы уверены, что вы ничего не можете сделать, чтобы внести существенные изменения в разработку программного обеспечения и базы данных?

0 голосов
/ 02 января 2009

Возможно что-то вроде Tangosol Coherence cache , если вы используете Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...