PostgreSQLのBLOBまたは参照


11

Ubuntuサーバーで実行されるPostgreSQLデータベースにバイナリデータファイルを保存する必要があります。最初は、それぞれ約250kbのファイルが数十個あります。ただし、ファイルの数は時間とともに増加します。他のダウンストリーム分析のために、ファイルからデータを抽出する必要がある場合があります。

バイナリデータをBLOBまたは参照として保存するという昔からの疑問について、いくつかの調査を行いました。どちらも明らかに長所と短所があります。PostgreSQLに関して知っておくべき特定の問題はありますか?PostgreSQL関数または外部Pythonプログラムのいずれかを使用してファイルからデータを抽出する場合、どちらの方法が望ましいですか?

データファイルをデータベースに直接格納する場合、他のすべてのフィールドを含むテーブルではなく、「メイン」テーブルを参照する外部キーを含む別のテーブルにデータファイルを格納する方が良いでしょうか?

ここで質問と回答を読みました。そこでのコメントは、Linuxでの(ファイルシステムでの)参照によるバイナリファイルの保存の方が良いことを示唆しています。ここでの質問は、特にPostgreSQLと、さまざまな分析のためにファイルからデータを抽出することに関するものです。

更新:同様の質問


PostgreSQlを使用すると、参照を含むレコードが削除されたときにファイルシステム内のファイルを自動的に削除するルールを設定できます
jp

この質問に対する答えは複数あると思います。それがどうなったのか?ポスターが削除したかどうかを確認する方法はありますか?それについてのコメントはどうですか?
SabreWolfy、2011

はい、私が書いたbyteaのパフォーマンスの問題は回避できるので、削除しました。コメントは、「byteaですべて問題なく、データベース内の印刷不可能な文字をエスケープせず、アプリケーションで再びエスケープを解除しないことを確認する必要があります。araqnidがコメントしたように、代わりにlibpqでサポートされている16進エスケープ。」
jp

回答:


9

通常のbytea列としてデータベースにデータを保存する必要があると思います。そうすることで、データベースのすべての利点が得られ、データベース関数(さらに、必要に応じてPL / Python)を使用してデータを処理できます。大きなデータアイテムは自動的に行外に格納されるため、別の参照の間接参照を導入する理由はありません。

大きなバイナリオブジェクトをデータベースの外部に格納する主な理由は、オブジェクトが大きすぎて十分な時間に格納および取得できない場合、データベースが実際よりも肥大化している場合、またはファイルとしてファイルにアクセスする必要がある場合です。別のアプリケーション。私が知る限り、それはそこには当てはまりません。


詳細をありがとう。別のアプリケーションからファイルにアクセスすることについてのあなたの指摘は、将来ユーザーがバイナリファイルをダウンロードして自分のマシンでローカルに使用できるようにしたいと考えていることに気づきました。ファイルがデータベースに保存されている場合、それは可能ですか?
SabreWolfy、2011年

承知しました。これを調整するための小さなコードを書く必要があります(データベースからファイルデータを取得する、HTTPダウンロードを調整するなど)が、それはブロッカーではありません。
Peter Eisentraut、2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.