1

ブロブを覗く必要があるアプリケーションがあり、(getBytes(long pos, int length) を介して) 少数のバイトを取得します。ブロブは約 30MB です。ブロブの先頭付近のバイトを要求すると、パフォーマンスは妥当です。ブロブの終わり近くのバイトを要求すると、パフォーマンスが大幅に低下します。ソース コード (JdbcBlob.java) を見ると、BLOB が (入力ストリームを介して) ランダムではなく順次読み取られているように見えます。

誰かが回避策を知っていますか? 私は H2 の大ファンであり、この問題は取引を妨げるものではありませんが、改善される可能性があると思います.

ありがとう

4

2 に答える 2

2

H2 は InputStream を使用し、ランダム アクセスを行わないため、低速です (そのため、既に質問に回答済みです)。ランダム アクセスがサポートされていない理由は次のとおりです。これまでのところ、誰もこの機能を要求していません :-)

簡単な回避策はないと思います。ランダム アクセスをサポートするには、H2 を変更する必要があります。BLOB データの場合、これは比較的簡単です。CLOB データの場合はさらに難しくなります (データは UTF-8 形式で保存され、適切なポイントにシークするのはそれほど簡単ではないため)。

ロードマップに機能リクエストを追加しましたが、近い将来この機能が本当に必要な場合は、自分で実装する必要があると思います. H2 はオープン ソースであり、パッチはいつでも歓迎されます :-)

于 2011-02-05T06:55:16.533 に答える
0

バージョン 1.3.166 にアップグレードしたところ、この問題が修正されたことを嬉しく思います。私の場合、ブロブの終わり近くを覗くのに約 500 ミリ秒かかりました。

現在、4msかかります。

于 2012-05-01T17:35:19.907 に答える