Необходимо загрузить всю базу данных PostgreSQL в оперативную память

StackOverflow https://stackoverflow.com/questions/407006

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Некоторое время я задавал себе тот же вопрос.Одним из недостатков PostgreSQL является то, что он, похоже, не поддерживает механизмы хранения данных в ПАМЯТИ, как это делает MySQL...

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

Однако, даже при таком подходе, я не уверен, что вы могли бы также поместить свои индексы в оперативную память;Я не думаю, что MySQL просто так использует ХЭШ-индекс со своей таблицей В ПАМЯТИ...

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

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

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

Другие советы

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

Возможно, что-то вроде Кэш когерентности Tangosol если вы используете Java.

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

Настройте старомодный RAMdisk и скажите pg, чтобы он хранил там свои данные.

Однако убедитесь, что вы хорошо сделали резервную копию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top