Java 데스크탑 애플리케이션에서 데이터를 유지하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/37271

  •  09-06-2019
  •  | 
  •  

문제

내 데스크톱 응용 프로그램에 대규모 Java 개체 트리가 있고 이를 파일 시스템에 파일로 유지하는 가장 좋은 방법을 결정하려고 합니다.

내가 가졌던 몇 가지 생각은 다음과 같습니다.

  • DataOutputStream을 사용하여 자체 직렬 변환기 롤:이렇게 하면 파일 내용을 가장 효과적으로 제어할 수 있지만 세세하게 관리하는 비용이 발생합니다.

  • ObjectOutputStream 및 다양한 관련 클래스를 사용한 기존 직렬화:나는 데이터가 부서지기 쉽다는 것을 알았기 때문에 그것에 팔리지 않았습니다.객체의 구조를 변경하면 해당 객체의 직렬화된 인스턴스가 중단됩니다.그래서 나는 끔찍한 버전 관리의 악몽처럼 보이는 것에 갇혀 있습니다.

  • XML 직렬화:깨지기 쉬운 것은 아니지만 직접 직렬화하는 것보다 훨씬 느립니다.내 프로그램 외부에서 변환될 수 있습니다.

  • 자바DB:나는 JDBC 애플리케이션 작성에 익숙하기 때문에 이것을 고려했습니다.여기서 차이점은 파일이 열리거나 저장되는 동안에만 데이터베이스 인스턴스가 지속된다는 것입니다.예쁘진 않지만...나중에 필요한 경우 중앙 서버 아키텍처로 마이그레이션하는 데 적합하며 더 간단한 방법으로 데이터 모델을 쿼리할 수 있는 가능성을 제공합니다.

다른 사람들은 어떻게 생각하는지 궁금합니다.그리고 위의 접근 방식보다 분명하고 간단한 접근 방식을 놓쳤기를 바랍니다.


아래 답변에서 추려낸 몇 가지 추가 옵션은 다음과 같습니다.

  • 객체 데이터베이스 - ORM 접근 방식보다 인프라가 훨씬 적고 XML 접근 방식보다 성능이 빠릅니다.고마워요 아쿠
도움이 되었습니까?

해결책

db4객체 최선의 선택이 될 수도 있다

다른 팁

나는 최종 옵션인 JavaDB(Sun의 배포판)를 선택하겠습니다. 더비) 다음과 같은 객체 관계형 레이어를 사용합니다. 최대 절전 모드 또는 아이바티스.처음 세 가지 접근 방식을 사용하면 애플리케이션 기능을 개발하는 것보다 데이터베이스 엔진을 구축하는 데 더 많은 시간을 소비하게 됩니다.

데이터베이스에 인터페이스하는 더 간단한 방법으로 Hibernate를 살펴보십시오.

내 경험에 따르면 내장된 데이터베이스를 사용하는 것이 더 나을 것입니다.SQL은 완벽하지는 않지만 일반적으로 성능이 좋고 신뢰할 수 있는 파일 형식을 설계하는 것보다 훨씬 쉽습니다.

저는 JavaDB를 사용해본 적이 없지만 운이 좋았습니다. H2 그리고 SQLite.SQLite는 배포 측면에서 좀 더 많은 작업을 의미하는 C 라이브러리입니다.그러나 전체 데이터베이스를 단일 크로스 플랫폼 라이브러리에 저장한다는 이점이 있습니다.기본적으로 사전 패키지된 일반 파일 형식입니다.SQLite는 매우 유용해서 스크립트에서 텍스트 파일 대신 SQLite를 사용하기 시작했습니다.

작은 지속성 문제를 가지고 작업하고 있다면 Hibernate를 주의해서 사용하세요.이는 많은 복잡성과 라이브러리 오버헤드를 추가합니다.Hibernate는 많은 수의 테이블로 작업하는 경우에는 정말 좋지만 몇 개의 테이블만 필요한 경우에는 아마도 성가실 것입니다.

codehaus.org의 XStream

대부분 코딩 없이 XML 직렬화/역직렬화.주석을 사용하여 조정할 수 있습니다.내가 일하는 두 프로젝트에서 잘 일하고 있습니다.

내 사용자 그룹 프레젠테이션을 참조하세요. http://cjugaustralia.org/?p=61

나는 그것이 당신이 필요로하는 것에 달려 있다고 생각합니다.옵션을 살펴보겠습니다.

1) 즉시 폐기됩니다!나는 정당화조차하지 않을 것입니다.:)

2) 간단하고 빠른 단일 방법 지속성이 필요하다면 이를 고수하십시오.완전한 데이터 그래프를 그대로 유지합니다!지속형 개체를 얼마나 오랫동안 유지 관리할 것인지 주의하세요.지적했듯이 버전 관리가 문제가 될 수 있습니다.

3) (2)보다 느리고 추가 코드가 필요하며 사용자가 편집할 수 있습니다.나는 데이터가 클라이언트에 의해 다른 언어로 사용될 것으로 예상되는 경우에만 사용할 것입니다.

4) 어쨌든 데이터를 쿼리해야 한다면 DB 솔루션을 사용하세요.

글쎄, 당신은 이미 당신의 질문에 대답했다고 생각합니다 :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top