我有一个需要查看 blob 的应用程序获取少量字节(通过 getBytes(long pos,int length))。斑点约为 30MB。当我要求靠近 blob 开头的字节时,性能是合理的。当我要求接近 blob 末尾的字节时,性能要差得多。查看源代码 (JdbcBlob.java),似乎 blob 是按顺序读取的,而不是随机读取的(通过输入流)。
有人知道任何解决方法吗?我是一个巨大的 H2 粉丝,这个问题不是一个交易破坏者,但我认为它可以改进。
谢谢
它很慢,因为 H2 使用 InputStream 并且不进行随机访问(所以你已经自己回答了这个问题)。不支持随机访问的原因是:到目前为止没有人要求这个功能:-)
我认为没有简单的解决方法。需要更改 H2 以支持随机访问。对于 BLOB 数据,这应该相对容易;对于 CLOB 数据,它会更难(因为数据以 UTF-8 格式存储,并且找到正确的点并不容易)。
我现在已经在路线图中添加了一个功能请求,但是如果您在不久的将来真的需要这个功能,那么恐怕您将不得不自己实现它。H2 是开源的,总是欢迎使用补丁 :-)
我刚刚升级到版本 1.3.166,很高兴发现这个问题已经得到纠正。在我的案例中,在 blob 末尾附近偷看大约需要 500 毫秒。
现在需要 4 毫秒。