2011-02-04 6 views
1

私は小数点以下を取得する必要があるアプリケーションを持っています(getBytes(long pos、int length)を介して)。ブロブは〜30MBです。ブロブの先頭付近でバイトを要求すると、パフォーマンスは合理的です。ブロブの終わり近くでバイトを要求すると、パフォーマンスは非常に悪くなります。ソースコード(JdbcBlob.java)を見ると、ブロブは(入力ストリームを介して)ランダムにではなく順番に読み込まれるように見えます。H2データベースでgetBytes(long pos、int length)を使用してBLOBを見るのが遅いのはなぜですか?

誰かが回避策を知っていますか?私は巨大なH2のファンであり、この問題は契約を破るものではありませんが、改善できると思います。

おかげ

答えて

2

H2はInputStreamを使用し、(あなたがすでに質問を自分で答えている)ランダムアクセスを行いませんので、それは遅いです。ランダムアクセスがサポートされていない理由は次のとおりです。これまで誰もこの機能を要求していませんでした:-)

私は単純な回避策はないと思います。ランダムアクセスをサポートするためにH2を変更する必要があります。 BLOBデータの場合、これは比較的簡単です。 CLOBデータの場合は(データがUTF-8形式で格納されているため、正しいポイントまで簡単に検索できないため)難しくなります。

私はロードマップに機能要求を追加しましたが、近い将来この機能が必要な場合は、自分で実装する必要があります。 H2はオープンソースで、パッチはいつでも歓迎します:-)

+0

お返事ありがとうございます。私はH2について十分に言うことができません。それは単に素晴らしい製品です。 – Matt

0

バージョン1.3.166にアップグレードしたばかりで、この問題が修正されています。私の場合、ブロブの端の近くには、約500msかかりました。

これで4msかかるようになりました。

関連する問題