Java&JDBCを使用して、PostgresのJSONB列に文字列を格納しています。挿入するとうまくいきます。
値を取得するとき、Javaでメモリが不足しています。大量のデータを取得しているため、各json/stringが約1MBです。次のようなクエリを記述します。
SELECT compress( myJsonColumn ) FROM myTable WHERE ...
Postgresで圧縮メソッドを探してみましたが、見つかりませんでした。どんなポインタでもいただければ幸いです。ありがとう。
明確化:明確にするために、データベース内のデータを圧縮したくありません。私はPostgresがこれを適切に処理するだろうと思います、私の懸念は主にJava-heap-spaceです。
私のアーキテクチャには3つのコンポーネントがあります。
私は最近このようなものを使用する機会がありました:
CREATE FUNCTION gzip(text) RETURNS bytea
LANGUAGE plperlu IMMUTABLE STRICT COST 100000 PARALLEL SAFE
AS $_X$
use Compress::Zlib;
my $x = Compress::Zlib::memGzip($_[0]);
return encode_bytea($x);
$_X$;
ただし、bytea自体はエスケープされた形式で送信されるため、サイズが大きくなります。運が良ければ、JDBC実装はそれらがメモリに読み込まれるときにその場でエスケープを解除し、結果セット全体を未加工の形式で保存しない場合があります。申し訳ありませんが、JDBCを十分に理解していません。
すべての行をメモリに読み込むのではなく、カーソルを使用して一度に1行ずつ処理してから破棄することはできませんか?