5

すべてのデータを 1 つの共有ネットワーク ドライブに配置して、分散処理環境をセットアップしようとしています。何も書き込むつもりはなく、読み取るだけなので、ネットワーク ドライブも書き込み保護することを検討しています。

MSSQL を扱っていたとき、データベースを DVD にバックアップし、それを読み取り専用データベースとして直接ロードできたことを覚えています。

Postgres でそのようなことができれば、読み取り専用 DVD のような抽象化を与えることができ、すべてがうまくいくはずです。

Postgresでこのようなことは可能ですか?そうでない場合、代替手段はありますか? (MySQL? sqlite でさえ?)

または、それが不可能な場合、共有ファイル システムを指定する方法はありますか? (他のプロセスもそれから読み取っていることを知っていますか?)

さまざまな理由により、並列 dbms を使用することはできず、並列実行する 2 つの DB プロセスが必要です...

どんな助けでも大歓迎です。ありがとう!!

4

3 に答える 3

3

データ ディレクトリを書き込み禁止にすると、PostgreSQL は書き込み可能にする必要があるため、起動に失敗しますpostmaster.pid。PostgreSQL は、一時ファイルとテーブルスペースの書き込み、ヒント ビットの設定、可視性マップの管理などもできる必要があります。

理論的には、読み取り専用データベースでの実行をサポートするように PostgreSQL サーバーを変更することは可能かもしれませんが、現時点ではこれはサポートされていません。うまくいくとは思わないでください。インスタンスごとにデータ ディレクトリのクローンを作成する必要があります。

パフォーマンス上の理由で複数の PostgreSQL インスタンスを実行したい場合、それらが共有ストレージをめぐって争うことは、とにかく非生産的です。DB が RAM に収まるほど小さい場合は問題ありませんが、その場合は、各マシンに複製するだけでも簡単です。DB が RAM にキャッシュするのに十分な大きさでない場合、両方の DB インスタンスで I/O ボトルネックが発生し、ストレージ競合の影響を受けない単一の DB よりもパフォーマンスが向上する可能性は低くなります (おそらくわずかに劣ります)。

次の方法で動作させる可能性があります。

  • 定数データを新しいテーブルスペースに移動し、読み取り専用共有ストレージに移動します
  • 共有データ用に新たに分離されたテーブルスペースを除いた、データベースのベース バックアップを作成する
  • DB のベースバックアップをコピーして、DB を実行する各ホストのプライベート ストレージの読み取り/書き込みを行う
  • 共有ストレージをマウントし、Pg が期待する場所にテーブルスペースをリンクする
  • 開始ページ

...少なくとも、ヒントビットの設定とVACUUM FREEZE共有テーブルスペース内のすべてを最初に強制する場合。サポートされていない、テストされていない、おそらく機能しない、プライベート インスタンスを実行する利点がない、絶対にやらないと思いますが、本当に主張するなら試してみてください。クラッシュ、間違ったクエリ結果、およびその他の奇妙な動作が発生する可能性は低くありません。

于 2012-11-09T01:00:58.900 に答える
0

試したことはありませんが、すべての使用が実際に読み取り専用である場合、ほとんどが RO ファイル システム上にあるデータ ディレクトリで postgres を実行できる可能性があります。自動バキュームを必ず無効にする必要があります。読み取りアクティビティでも xlog ミューテーションが生成される可能性があるため、おそらくpg_xlogディレクトリを書き込み可能なファイル システムにシンボリック リンクする必要があります。大規模な並べ替えやその他の一時的な要件のために、読み取りクエリがディスクにあふれてしまうことがあるためbase/pgsql_tmp、書き込み可能なディスク領域にもリンクする必要があります。

Richard が指摘しているように、データ ヒープには可視性のヒント ビットがあります。VACUUM FULL FREEZE ANALYZERO ファイル システムに配置する前に、データベースで試してみることをお勧めします。

于 2012-11-08T19:43:03.957 に答える
0

「このようなことはPostgresで可能ですか?そうでない場合、代替手段はありますか?(MySQL?sqliteでも?)」

sqliteからシステムを移植するために、postgresでもこれを行うことができるかどうかを理解しようとしています。これは、読み取り専用の NFS 共有上の sqlite3 データベース ファイルで問題なく動作することを確認できます。Sqlite は、この目的のためにうまく機能します。

sqlite を使い終わったら、更新があるたびに、新しい sqlite ファイルを含む新しいディレクトリにカットオーバーします。使用中のデータベースに挿入することはありません。挿入が問題を引き起こすかどうかはわかりません(どちらのデータベースでも)。OS レベルでの読み取り専用データのキャッシュは、別のデータベース インスタンスが dir を読み取り/書き込みでマウントした場合に問題になる可能性があります。これは、私が理想的にできるようにしたいことです。

于 2014-01-27T17:04:53.220 に答える