postgreSQLデータベース全体をRAMにロードする必要がある
-
03-07-2019 - |
質問
PostgreSqlデータベース全体をRAMに入れてアクセスを高速化するにはどうすればよいですか? 8GBのメモリがあり、DB用に2GBを割り当てたいです。共有バッファの設定について読んだことがありますが、データベースの最もアクセスされたフラグメントをキャッシュするだけです。 DB全体がRAMに配置され、RAM DBから読み取りが行われ、書き込み操作が最初にRAM DBに書き込まれ、次にハードドライブ上のDBに書き込まれるソリューションが必要でした(デフォルトのfsync = postgresqlの構成設定で共有バッファーを使用してオンにします)。
解決
私はしばらくの間、同じ質問を自問しました。 PostgreSQLの欠点の1つは、MySQLのようにIN MEMORYストレージエンジンをサポートしていないように見えることです...
とにかく記事数週間前、これを行う方法を説明しました。 Linuxでのみ動作するようです。私は実際に試していないので、それを保証することはできませんが、PostgreSQLテーブルスペースには実際にマウントされたリポジトリが割り当てられているので、それは理にかなっているようです。
ただし、このアプローチを使用しても、インデックスをRAMに配置できるかどうかはわかりません。 MySQLがIN MEMORYテーブルでHASHインデックスを強制的に使用するとは思わない...
また、パフォーマンスを向上させるために同様のことをしたかったのは、巨大なデータセットを扱っているためです。私はpythonを使用しています。基本的には{key:value}ペアの形式のハッシュテーブルである辞書データ型を持っています。これらを使用すると、非常に効率的かつ効果的です。基本的に、PostgreSQLテーブルをRAMに入れるには、そのようなpython辞書にロードして、それを操作し、時々dbに永続化します。うまく使えばそれだけの価値があります。
Pythonを使用していない場合は、Pythonがお使いの言語で類似した辞書マッピングデータ構造であると確信しています。
これがお役に立てば幸いです!
他のヒント
IDでデータをプルする場合は、memcachedを使用します- http://www.danga.com/memcached / + postgresql。
おそらく、Javaを使用している場合は Tangosol Coherenceキャッシュ 。
データベースが8GBしかないため、すべてのSQLアクティビティをすでに最適化し、ハードウェアでクエリの問題を解決する準備ができている場合は、問題があることをお勧めします。これは、長期的にはスケーラブルなソリューションではありません。ソフトウェアとデータベースの設計面で大きな違いを生むためにできることは何もありませんか?
昔ながらのRAMdiskをセットアップし、pgにデータを保存するように指示します。
ただし、必ずバックアップしてください。