2016-06-21 1 views
0

이 포함되어 있습니다. IBM Informix, MySQL 및 Oracle 중 하나에서 실행되는 응용 프로그램이 있으며 Hibernate에서 Java를 사용하여 데이터베이스에 연결합니다. XML, CSV 및 기타 텍스트 기반 파일을 데이터베이스 (clob 열)에 저장합니다. Java의 엔터티는 byte[] 개체입니다.Informix, MySQL 및 Oracle blob에는

응용 프로그램에 대한 기능 요청 중 하나가 데이터 내부의 "grep"콘텐츠입니다. 그래서 특정 내용으로 모든 파일을 찾아야합니다.

일반 문자/varchar 필드에서 like '%xyz%'을 사용할 수 있지만 바이트 []/blob에서는 작동하지 않습니다.

첫 번째 방법은 각 엔터티를로드하고 byte[]을 문자열로 캐스팅하고 Java에서 contains 메서드를 사용하는 것입니다. 사용법이 다른 (clob이 아닌) 열에 필터 매개 변수를 입력하면, 스캔해야하는 얼룩의 수를 줄이기 위해 clob을 테스트하기 전에 해당 필터를 적용합니다.

이는 100 개의 파일 (clob)과 응용 프로그램과 데이터베이스가 동일한 서버에있는 한 매우 효과적입니다. 하지만 데이터베이스에 1.000.000 개의 파일이 있고 데이터베이스가 항상 같은 네트워크에있는 것은 아니라면 정말 느려질 것이라고 생각합니다. 그래서 나는 그것이 좋은 생각이 아니라고 생각합니다.

다음으로 생각한 것은 데이터베이스 프로 시저를 만드는 것입니다. 그러나 이것이 Informix, MySQL 및 Oracle에서 가능한지 확실하지 않습니다. 그리고 이것이 가능한지 확실하지 않습니다.

마지막으로 선호하지 않는 방법은 clob 안에 있지 않은 데이터 내용을 저장하는 것입니다. 어쩌면 다른 데이터 형식을 사용할 수 있습니까?

누구나 그 실현 방법을 알고 있습니까? 세 가지 DBMS 모두에 대한 솔루션이 필요합니다. 응용 프로그램은 연결된 DBMS의 종류를 알고 있습니다. 따라서 세 가지 솔루션 (각 DBMS에 하나씩)이 있으면 괜찮습니다.

내가 사용하는 데이터 유형 (BLOB, CLOB ...)을 변경하는 데 전적으로 열려 있습니다. 원하는대로 수정할 수 있습니다.

참고 : clob의 범위는 약 5 KiB에서 약 500 KiB이며 최대 1 MiB입니다.

+0

각 BLOB/CLOB 오브젝트의 크기는 어느 정도입니까? KiB, MiB, GiB, 더 커? 객체가 클수록 객체가 많을수록 객체의 각각을 클라이언트 코드로 반환하여 사용 여부를 확인하는 것이 더 나쁩니다. 따라서 걱정할 것입니다. 필터링이 서버 측에서 수행되는지 확인하는 것이 중요합니다. –

+0

각 항목은 약 5kb ~ 500kb입니다. 파일 당 최대 1MB.그리고 필터 매개 변수를 입력하면 검색해야하는 얼룩의 수를 줄이기 위해 필자가 먼저 필터링합니다. – Hauke

+1

대부분의 데이터베이스는 자유형 Google과 유사한 구조화되지 않은 텍스트 데이터 검색 기능을 제공합니다. 바이너리 데이터가 아니기 때문에'clob' 컬럼보다는 'clob' 컬럼에 데이터를 저장하고 싶을 것이다. 그런 다음 일종의 텍스트 인덱스를 작성하게 될 것입니다 (Oracle에서는 찾고자하는 기능이 Oracle Text 임). 그러나 각 데이터베이스의 구현은 다소 고유 할 것입니다. ANSI 표준 SQL을 사용하여 쿼리하는 것이 아닙니다. –

답변

0

Apache Lucene 또는 다른 텍스트 인덱싱 라이브러리를 살펴보십시오. 오라클 텍스트 검색과 같은 DB 특정 솔루션과 함께 갈 경우 https://en.wikipedia.org/wiki/Lucene http://en.wikipedia.org/wiki/Full_text_search

는 각 데이터베이스에 대한 사용자 정의 솔루션을 구현해야합니다. 오라클 텍스트 검색은 배우는 데 많은 시간을 필요로하며, 바로 잡기 위해 많은 조정이 필요하다는 것을 알고 있습니다.

또한 DB 솔루션을 사용하는 경우 데이터 세트가 동일해도 각 DB에 다른 결과가 표시됩니다 (각 DB에는 데이터를 색인화하고 검색하는 고유 한 방법이 있습니다).

Lucene과 같은 타사 솔루션을 사용하면 하나의 솔루션 만 배워야하며 결과는 Db와 상관없이 일관됩니다.