3

MySql compress() 関数を varchar で、列ごとに数千文字から百万文字以上になる傾向があるフィールドに適用することを考えています。テキストはほぼ通常の英語なので、圧縮率は 8 対 1 またはそれ以上です。私は何百万ものレコードを持っており、実際にデータを見たいと思うことはめったにないので、圧縮は適切なエンジニアリング トレードオフのようです。

ほとんどの処理は Java で行う必要があり、zip、gzip、bzip2 の優れた実装があります。それはクールです。

しかし、標準のMySqlクライアントを使用して次のようなクエリを実行できるようになりたいです.

select decompress(longcolumn) where ...

そのため、組み込み関数と同じ、または互換性のある圧縮アルゴリズムを Java コードで使用したいと考えています。私が見つけたドキュメントには、「zlibなどの圧縮ライブラリでコンパイルされた」と書かれています

これは少しあいまいですが、何を使用すればよいかを正確に知るにはどうすればよいですか?

=== 編集済み == 明確にするために、「mysql」クライアント プログラムを使用してデバッグを実行できるようにしたいので、次のようにします。

select decompress(longcolumn) where ...

Javaをまったく使用しないでください。しかし、JDBC を使用して更新と挿入を行いたいと考えています。メインラインの使用法では、圧縮されたブログを取得してから解凍する必要があります。ある種のラッパーまたは ZipInputStream で問題ありません。

4

1 に答える 1

2

確かではありませんが、出力を次のようにラップしてみますInflaterInputStream():

ResultSet resultSet = statement.executeQuery("SELECT blobfield FROM table");
InputStream stream = new InflaterInputStream(resultSet.getBlob(1).getBinaryStream());

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/zip/InflaterInputStream.htmlはhttps://docs.oracle.com/javase/7/docs/api/に移動されましたjava/util/zip/InflaterInputStream.html

このブログ投稿も興味深いかもしれません: http://www.mysqlperformanceblog.com/2012/05/30/data-compression-in-innodb-for-text-and-blob-fields/

于 2012-07-03T00:47:07.927 に答える