2011-02-04 7 views
1

작은 바이트 수를 얻을 수있는 응용 프로그램이 있습니다 (getBytes (long pos, int length)를 통해). 얼룩은 ~ 30MB입니다. BLOB 시작 부분 근처에서 바이트를 요청하면 성능이 적당합니다. 얼룩의 끝에 가까운 바이트를 요청하면 성능이 훨씬 떨어집니다. 소스 코드 (JdbcBlob.java)를 보면 BLOB가 임의로 (입력 스트림을 통해) 대신 순차적으로 읽혀지는 것으로 보입니다.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가 걸립니다.