7

インメモリテーブルについての私の理解は、メモリ内に作成され、ディスクに頼る必要があったとしても、可能な限り少ないテーブルです。そこにあるテーブル、または少なくともそのほとんどに収まる十分な RAM があると想定しています。テーブルをメモリにロードする明示的な関数 (pg_prewarm など) を使用したくありません。メモリがいっぱいでない限り、または別の方法で指定しない限り、CREATE TABLEまたはを発行するとすぐにテーブルがデフォルトでそこにあるようにしたいだけです。CREATE TABLE AS select statementディスクへのロギングは特に気にしません。

7 年前、同様の質問がここで尋ねられました。PostgreSQL は MySQL メモリ テーブルに相当しますか? . 2 件の回答があり、そのうちの 1 件は少し遅れていました (4 年後)。

1 つの答えは、RAM ディスクを作成し、そのテーブルスペースを追加することです。または、UNLO​​GGED テーブルを使用します。または、グローバル一時テーブルを待機します。ただし、特別なハードウェアは持っていません。通常の RAM しか持っていません。そのため、どうすればよいかわかりません。UNLOGGED 機能を使用できますが、私が理解しているように、まだかなりの量のディスク操作が関係しており (これを削減しようとしています)、デフォルトでテーブルがメモリにロードされるかどうかはわかりません。さらに、グローバル一時スペースがどのように関連しているのかわかりません。私の理解では、それらは共有できるスペース内のテーブルにすぎません。

別の回答では、インメモリ列ストア エンジンを推奨しています。そして、関数を使用してすべてをメモリにロードします。このアプローチで私が抱えている問題は、参照されているエンジンが古くてメンテナンスされていないように見え、他に見つからないことです。また、「メモリへのロード」機能を明示的に使用する必要はなく、代わりにすべてがデフォルトで行われることを望んでいました。

7年後のPostgres 12でインメモリテーブルを取得する方法を考えていました。

4

1 に答える 1

5

Postgres にはメモリ内テーブルがなく、このトピックに関する本格的な作業に関する情報は現在ありません。この機能が必要な場合は、REDIS、MEMCACHED、MonetDB などの特別なインメモリ データベースを使用できます。これらのデータベースには FDW ドライバーがあります。そのため、専用のデータベースにメモリ内テーブルを作成し、外部テーブルを介して Postgres からこれらのテーブルを操作できます。

MyISAM エンジンのみがあった場合、MySQL メモリ テーブルが必要でした。このエンジンは IO で非常に原始的な作業を行い、MySQL には独自のバッファがなかったためです。現在、MySQL には InnoDB エンジン (他のデータベースと同様に最新の結合形式) があり、MySQL インメモリ テーブルを使用するための多くの引数は廃止されています。古い MySQL に対して、Postgres には独自のバッファがあり、ファイル システム キャッシュをバイパスしないため、すべての RAM をデータに使用でき、何もする必要はありません。10 年前、十分なパフォーマンスを得るには、MySQL インメモリ エンジンを使用する必要がありました。しかし、Postgres に移行した後は、インメモリ テーブルを操作しなくてもパフォーマンスが向上しました。

大量のメモリがある場合、Postgres はデフォルトでファイル システム キャッシュ経由でメモリを使用できます。

于 2020-03-08T04:42:42.857 に答える