2012-01-20 2 views
2

저는 Java 프로그래밍에 익숙하며 첫 번째 데스크톱 응용 프로그램을 작성하고 있습니다.이 응용 프로그램은 고유 한 isbn을 취하고 모든 준비가 로컬 DB에서 수행되는지 확인합니다. if 그것은 로컬 DB에서 읽는 것입니다. isbndb.com에서 데이터를 요청하고 로컬 DB가 XML 형식 인 DB에 입력하면됩니다. 이제는 다음 두 가지 방법 중 어느 것이 항목이 모두 준비되어 있는지 확인하기 위해 최소의 오버 헤드를 생성하는지 궁금합니다.JAVA : 파일이 존재합니다 대용량 db 데이터베이스 검색

방법 1.) 파일 있음.

DB 항목을 만들 때 isbn number.xml (즉, 3846504937540.xml)이라는 이름의 모든 isbn 번호에 대해 별도의 파일이 만들어지며 파일 존재 여부 확인 방법을 사용하여 모든 항목이 준비되어 있는지 확인합니다 사용자가 isbn을 제공했습니다.

방법 2) SAX XML 파서.

모든 항목을 하나의 큰 XML 파일에 입력하고 기존 항목을 확인할 때 SAX XML 파서를 사용하여 파일을 구문 분석 한 다음 isbn을 제공 한 사용자가 XML DB의 항목과 일치하는지 확인합니다 .

참고 : 결과 항목은 시간이 지남에 따라 수천 가지가 될 수 있습니다.

모든 정보는 크게 감사하겠습니다.

+0

레코드가 있는지 확인하기 위해 db와 where clausule을 사용할 수 없습니까? – designerrr

답변

1

나는 당신의 방법 중 하나가 그다지 훌륭하다고 생각하지 않습니다. DBMS를 사용하여 데이터를 저장하는 것이 좋습니다. 시스템에 DBMS가 없거나 DBMS가 설치되지 않은 시스템에서 실행할 수있는 앱을 원할 경우 SQLite을 사용하십시오. David Crawshaw의 SQLiteJDBC으로 Java에서 사용할 수 있습니다.

두 가지 방법에 관한 한, 유지 관리 및 일관성 문제는 말할 것도없고, 처음에는 엄청난 양의 파일 혼란이 발생합니다. 두 번째 방법은 일단 모든 쿼리에 대해 데이터베이스의 절반을 평균 (평균적으로) 읽어야하기 때문에 상당한 수의 항목이 있으면 느려질 것입니다. DBMS를 사용하면 빠르게 찾아야하는 정보에 대한 색인을 정의함으로써이 문제를 피할 수 있습니다. DBMS는 인덱스를 자동으로 유지 관리합니다.

+0

빠른 답변을 보내 주신 모든 분들께 고맙겠습니다. 처음에는 DB 시스템을 사용하지 않고 가고 싶었지만 이제는 확신이 들었으며 임베디드 DB (아마도 JavaDB (Derby))를 사용할 가능성이 높습니다. –

+0

@CourtenayRogers JavaDB/Derby는 훌륭한 제품입니다. SQLite는 관심있는 SQLite와 Derby 사이의 자세한 내용을 게시했습니다 (http://www.sqlite.org/cvstrac/wiki?p=SqliteVersusDerby). –

0

파일 시스템에 의존하는 아이디어가 너무 마음에 들지 않습니다. 응용 프로그램이 얼마나 중요한지 잘 모르겠지만 이러한 XML 파일에는 많은 일이 발생할 수 있습니다. :) 더하기, 폴더 매우 커지게되면, 일부 파일을 계층 구조 폴더 구조로 분할하여 적절한 성능을 얻으려고 생각할 필요가 있습니다.

반면에 자주 업데이트해야하는 경우 xml 파일을 데이터베이스로 사용하는 이유가 없습니다.

필자는 관계형 데이터베이스를 사용하고 각 레코드의 테이블에 isbn_number 열의 인덱스와 함께 새 레코드를 추가합니다.

수천 개의 레코드를 사용하는 경우 sqlite으로 잘 처리 할 수 ​​있으며 필요한 경우 더 강력한 (포함하지 않는) 코드 수정으로 더 강력한 비 내장 DB로 바꿀 수 있습니다.

0

XML 문자열뿐만 아니라 ISBN 번호도 포함하도록 db 테이블을 확장하십시오.
그런 다음 ISBN 열을 기반으로 XML 열을 선택합니다.

검색어 : 자바 탈출, 다른 방법은 최대 절전 모드 같은 ORM을 사용할 수 "select XMLString from cacheTable where isbn='"+ isbn +"'"

.
전체 XML 문서를 하나의 열에 저장하는 대신 ORM에서 각 요소 및 속성마다 서로 다른 열을 사용하며 더 단순한 장기 디자인을 위해 upp를 여러 테이블로 분할 할 수도 있습니다.

0

두 가지 방법 대신 DBMS를 사용하는 것이 좋습니다.

0

존재 확인을 위해 최소한의 오버 헤드를 원할 경우 옵션 1은 아마도 직접 조회하기 때문에 원하는 것일 것입니다. 검사 할 때마다 XML을 파싱하면 최악의 경우 전체 XML 파일을 통과해야합니다. 옵션 2를 사용하여 캐싱을 할 수 있지만 옵션 1보다 복잡해 지더라도.

옵션 1을 사용하면 디렉토리 아래에 저장할 수있는 파일 수 제한이 있으므로주의해야합니다. XML 파일을 여러 계층으로 저장합니다 (예 : /xmldb/38/46/3846504937540.xml).

귀하의 옵션 중 어느 것도 장기적으로 데이터를 저장하는 좋은 방법이 아니며 데이터가 커짐에 따라 관리가 어려워집니다.

사람들은 이미 DBMS를 사용하는 것이 좋습니다. 동의합니다. 그 외에 MongoDB와 같은 문서 기반 데이터베이스를 데이터베이스로 조사 할 것을 제안합니다.