Question

Comment puis-je mettre toute la base de données PostgreSql dans la RAM pour un accès plus rapide? J'ai 8 Go de mémoire et je veux dédier 2 Go pour la base de données. J'ai lu des informations sur les paramètres des tampons partagés, mais cela ne fait que mettre en cache le fragment le plus consulté de la base de données. J'avais besoin d'une solution dans laquelle la base de données entière est placée dans la RAM et où toute lecture aurait lieu à partir de la base de données RAM et toute opération d'écriture serait d'abord écrite dans la base de données RAM, puis sur le disque dur (quelque chose comme la valeur par défaut fsync = avec des tampons partagés dans les paramètres de configuration de postgresql).

Était-ce utile?

La solution

Je me suis posé la même question depuis un moment. Un des inconvénients de PostgreSQL est qu’il ne semble pas supporter les moteurs de stockage IN MEMORY comme le fait MySQL ...

Quoi qu'il en soit, je suis tombé sur un article , il y a quelques semaines, décrivant comment cela pourrait être fait; bien que cela ne semble fonctionner que sous Linux. Je ne peux vraiment pas en témoigner car je ne l'ai pas essayé moi-même, mais cela semble logique, car un tablespace PostgreSQL est effectivement affecté à un référentiel monté.

Cependant, même avec cette approche, je ne suis pas sûr que vous puissiez également placer vos index dans la RAM; Je ne pense pas que MySQL force l'utilisation de l'index HASH avec sa table IN MEMORY pour rien ...

Je souhaitais également faire la même chose pour améliorer les performances, car je travaille également avec d’énormes ensembles de données. J'utilise python; ils ont des types de données de dictionnaire qui sont essentiellement des tables de hachage sous la forme de paires {clé: valeur}. Leur utilisation est très efficace. Fondamentalement, pour mettre ma table PostgreSQL dans la RAM, je la charge dans un dictionnaire python, je l’utilise et la persiste dans la base de données de temps en temps; sa vaut la peine si elle est bien utilisée.

Si vous n'utilisez pas python, je suis presque sûr que leur structure de données de mappage de dictionnaire est similaire dans votre langue.

J'espère que ça aide!

Autres conseils

si vous extrayez des données par identifiant, utilisez memcached - http://www.danga.com/memcached / + postgresql.

Peut-être quelque chose comme un cache Tangosol Coherence si vous utilisez Java .

Avec une base de données de 8 Go seulement, si vous avez déjà optimisé toute l'activité SQL et que vous êtes prêt à résoudre les problèmes de requête avec du matériel, je vous suggère que vous avez des problèmes. Ce n'est tout simplement pas une solution évolutive à long terme. Êtes-vous sûr qu'il n'y a rien que vous puissiez faire pour créer des différences substantielles du côté de la conception du logiciel et de la base de données?

Configurez un vieux disque RAM et demandez à pg d'y stocker ses données.

Assurez-vous de bien le sauvegarder.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top