1

지속 가능한 클래스 중 하나에 byte [] 멤버가 있습니다. 일반적으로 @Lob 및 @Column (name = "foo", size =)으로 주석을 달았습니다. 그러나이 특별한 경우에는 바이트 []의 길이가 매우 다양 할 수 있습니다 (최대 10KB에서 최대 100MB까지).가변 길이 최대 절전 모드의 BLOB?

크기가 128MB 인 열에 주석을 추가하면 중소 규모의 개체에 많은 공간을 낭비하게 될 것입니다. 사용할 수있는 가변 길이 BLOB 유형이 있습니까? 최대 절전 모드는 공간 낭비없이 장면의 뒤에서 나를 위해 모든 것을 처리 할 것인가? 이것에 대해 가장 좋은 방법은 무엇입니까?

감사합니다. 내가 128메가바이트의 크기 과 열 주석을하면 내가 작고 중간 크기의 개체에 대한 많은 공간을 낭비 할 거 야

답변

3

, 나는 생각합니다. 사용할 수있는 가변 길이 BLOB 유형이 있습니까?

LOB (CLOB 또는 BLOB)에는 크기가 없습니다 (대부분의 데이터베이스에서 알고있는 한). 유형은 "일반"데이터보다 명확한 정보를 보유하기위한 것입니다. 대부분의 데이터베이스는 이러한 데이터에 대해 다른 저장 체계를 사용합니다. 다른 세그먼트에 테이블의 주요 데이터로 저장하십시오. 나는 size 매개 변수가 최대 절전 모드로 간주되지 않는다고 생각한다.

공간을 낭비 없이 뒤에서 나를 위해 이 모든 것을 알아서 최대 절전 모드 것인가?

최대 절전 모드는 LOB의 효율적인 저장을 관리하는 데이터베이스입니다. LOB는 다른 유형보다 약간 느리지 만 (특수 저장 장치로 인해), 데이터베이스에 의해 여전히 잘 관리됩니다.

바이트의 길이는 [] (최대 ~ 100메가바이트에 ~ 10킬로바이트 모든 방법에서)

이것에 대해 이동하는 가장 좋은 방법은 무엇입니까 많이 변화 할 수있다?

10KB는 행의 일반 데이터 크기 (예 : 숫자 또는 몇 자)와 비교할 때 이미 크기가 큽니다.

예를 들어 짧은 문자 (예 : 20 개의 문자)와 매우 긴 문자 (예 : 3000 자)가 있으면 문제가 될 수 있습니다. 이 경우 작은 문자열 (테이블의 기본 데이터에 저장 될 수 있음)에 대해 LOB 가격을 지불하게됩니다. 그러나 10KB는 상대적으로 크기 때문에 LOB의 사용은 실제로 정당화됩니다.

참고 :

당신은 스트림 (예를 들어, InputStream) 대신 바이트 배열을 사용하는 것이 좋습니다. 이렇게하면 응용 프로그램의 성능이 향상 될 수 있으며 메모리가 제한되지 않습니다 (20 명의 동시 사용자가 100MB LOB에 액세스하면 어떻게됩니까?).

또한 DBA에게 LOB 저장 영역을 조정하는 방법을 묻는 것이 좋습니다. 대부분의 데이터베이스에는 이에 대한 매개 변수가 있습니다. 예를 들어 Oracle LOB Performance Guideline입니다.

+0

때로는 DBA가 있었으면합니다. 나야. :) 나는 내 데이터베이스로 hsqldb를 사용하고 있으며, 실제로는 텍스트가 아닙니다.InputStream 아이디어는 흥미 롭습니다. 튜토리얼이나 내가 읽을 수있는 부분을 가르쳐 주시겠습니까? – Seth

+0

@Seth '@ Lob'이 스트림에서 작동하는지 알고 싶지 않습니다. 'UserType'을 사용해야 할 수도 있습니다 : http://i-proving.ca/space/Technologies/Hibernate/Blobs+and+Hibernate와 http://ajava.org/online/hibernate3api/org/hibernate/Hibernate. html. 불행히도 세부 사항을 기억하지 못합니다. – ewernli

+0

제안 해 주셔서 감사합니다. – Seth

관련 문제