자바 임베디드 데이터베이스 비교 [닫기]


99

재정 관리를위한 작은 (Java) 애플리케이션을 개발하려고합니다. 임베디드 데이터베이스를 사용해야한다고 생각하지만이 문제에 대한 경험이 없습니다. 사용 가능한 일부 제품 을 살펴 보려고했지만 어떤 제품 이 나에게 더 적합한 지 결정할 수 없습니다. H2 , HSQLDB , DerbyBerkeley DB 는 좋은 후보 인 것 같지만 서로 어떻게 비교되는지는 모르겠습니다. 그것들을 비교하고 어떤 것을 사용할지 결정하는 데 도움을 주셔서 감사합니다.

DBMS에서 제공하는 API를 사용하도록 권장하지 않는 한 내 애플리케이션에 Hibernate를 사용할 계획이지만 SQL 브라우징 도구 (스키마 수정 및 데이터 변경)를 사용하여 데이터베이스를 쉽게 편집 할 수있는 기능도 갖고 싶습니다.

감사합니다.


무엇을하려고하는지 모르면이 질문에 답할 수 없습니다. 프로젝트의 크기, 테이블 수, 레코드 수 등에 대한 정보로 질문을 업데이트하는 것이 좋습니다.
Outlaw Programmer



5
그런 좋은 질문이 나치에 의해 닫히는 것은 짜증납니다. 물론 일부 모호한 질문은 적합하지 않지만이 질문은 가장 확실합니다. 여기서 "적합하다"는 것은 일부 법적 정의보다는 커뮤니티에 유용하다는 의미입니다.
Tuntable

답변:


60

어느 한 쪽

  • HSQLDB -OpenOffice에서 사용되며 테스트되었으며 안정적입니다. 사용하기 쉽습니다. db-data를 편집하려면 파일을 열고 insert 문을 편집하면됩니다.

또는

  • H2- 더 빠르다고 말함 (원래 hsqldb를 설계 한 개발자에 의해)

어느 것을 사용 하느냐는 성능과 안정성에 따라 달라집니다.

H2 개발자는 멋진 성능 평가를 내놓았습니다 :
http://www.h2database.com/html/performance.html


35

거의 모든 임베디드 데이터베이스 요구 사항에 Apache Derby 를 사용 합니다. Derby를 기반으로 한 Sun의 Java DB를 사용할 수도 있지만 Derby의 최신 버전이 훨씬 더 최신 버전입니다. 상용, 기본 데이터베이스가 지원하는 많은 옵션을 지원하지만 훨씬 작고 포함하기 쉽습니다. 문제가없는 백만 개 이상의 레코드가있는 데이터베이스 테이블이 있습니다.

저는 약 3 년 전에 HSQLDB와 Hypersonic을 사용했습니다. 당시에는 몇 가지 주요 성능 문제가 있으며 이러한 문제로 인해 Derby로 전환했습니다. Derby는 Apache의 인큐베이터에있을 때도 견고했습니다.


버그가 너무 많고 마지막 업데이트가 몇 년 전이라는 사실이 아니었다면 Derby가 좋을 것입니다.
Hooli

2
@Hooli 버그를 증명할 수는 없지만 "... 마지막 업데이트는 몇 년 전입니다"는 올바르지 않습니다. 댓글을 게시 한 시간 ( 2016 년 8 월 )과 관련하여 : 1 년 미만의 릴리스 ( 2015 년 10 월 ), 2 개월 후 ( 2016 년 10 월 ) 릴리스가 있었고, 1 년이 넘은 릴리스가있었습니다 ( 2017 년 10 월-최신 버전). ).
Slaw

다른 사람이 검색에서이 주제를 발견하는 경우이 댓글을 업데이트합니다. Derby의 최신 릴리스는 2019 년 3 월입니다. 그들의 사이트 정보는 다음과 같습니다 : db.apache.org/derby
JavaJd

@Chris Dail 일반 데이터베이스 나 메모리 또는 캐싱으로 백만 개의 레코드에 더비를 사용 했습니까?
Shreyans jain

30

내 프로젝트 중 하나에서 Java 임베디드 데이터베이스를 사용해야했고 각 데이터베이스의 장단점을 이해하는 많은 연구를 수행했습니다. 인기있는 임베디드 자바 데이터베이스 (H2, HSQLDB, Derby, ObjectDB, Neo4j, OrientDB)의 장단점을 나열하는 블로그를 작성했습니다. 살펴볼 수 있습니다. 내 요구 사항에 가장 적합하다고 생각하여 H2를 선택했습니다. 블로그 링크 : http://sayrohan.blogspot.in/2012/12/choosing-light-weight-java-database.html 도움이되기를 바랍니다.



14

HSQLDB 는 좋은 후보입니다 (오픈 오피스에서 사용된다는 사실은 여러분 중 일부를 설득 할 수 있습니다).하지만 이러한 작은 개인 응용 프로그램의 경우 (전통적인 관계형 데이터베이스 대신) 개체 데이터베이스를 사용하지 않는 이유는 무엇입니까?

내 프로젝트 중 하나에서 DB4O 를 사용 했는데 매우 만족합니다. 객체 지향이기 때문에 전체 Hibernate 레이어가 필요하지 않으며 객체를 직접 삽입 / 업데이트 / 삭제 / 쿼리 할 수 ​​있습니다! 또한 스키마에 대해 걱정할 필요가 없습니다. 객체를 직접 작업하면 DB4O가 나머지 작업을 수행합니다!

이 새로운 유형의 데이터베이스에 익숙해지는 데 시간이 걸릴 수 있다는 데 동의하지만 DB40 자습서 를 확인하여 DB 작업이 얼마나 쉬운 지 확인하십시오!

편집 : 주석에서 말했듯이 DB4O는 최신 버전의 클래스를 자동으로 처리합니다. 또한 응용 프로그램 외부에서 데이터베이스를 찾아보고 업데이트하는 도구는 http://code.google.com/p/db4o-om/에서 사용할 수 있습니다.


2
감사. DB4O는 이러한 작은 프로젝트에 적합 해 보이지만 응용 프로그램 외부에서 데이터를 찾아보고 편집하는 기능이 매우 중요하다고 생각합니다. 또한 새로운 버전의 클래스를 처리하는 것도 쉬울까요? (예 : 추가 / 제거 된 필드)
Hosam Aly

내 편집에서 말했듯이 응용 프로그램 외부에서 DB를 찾아보고 편집하는 도구가 있습니다. 그리고 Fabian이 말했듯이 새로운 버전의 클래스는 자동으로 전달됩니다.
Wookai

업데이트 해주셔서 감사합니다. 브라우징 도구를 갖는 것이 저에게 매우 중요했기 때문에 대단히 감사합니다.
Hosam Aly

12

Java DB (Sun의 Apache Derby 배포판)가 이제 JDK 6 에서 제공 됩니다 !

나는 Jason Cohen과 같은 일을하고 싶었고 이것이 JDK 배포판에서 가장 쉬운 방법이라고 생각했습니다. 아니면 그냥 게으르다.


당신 말이 맞아요! Java 1.5에서도 실행해야하는 요구 사항이 있으므로 이것은 우리에게 옵션이 아닙니다.
Jason Cohen

... 나는 당신이 가장 쉬운 방법이라는 것에 대해 옳았다는 것을 의미했습니다. 게으른 것에 대해서는 옳지 않았습니다. :-P
Jason Cohen

Java DB는 JDK의 Sun / Oracle 구현에만 제공됩니다. Java의 표준 부분이 아닙니다.
Basil Bourque

7

우리는 프로덕션에서 HSQLDB를 애플리케이션의 "구성 없음"옵션으로 사용합니다. 사람들이 실제 데이터베이스를 설정하는 번거 로움없이 시험을 볼 수 있습니다.

그러나 정상적인 사용 에는 지원 하지 않습니다 . 그 이유는 다음과 같습니다.

  1. 데이터 크기에 비례하여 느려집니다.
  2. 앱 외부에서 액세스하기 어렵습니다 (예 : 맞춤형 보고서).
  3. 트랜잭션 / 디스크 동기화는 제대로하기 어렵 기 때문에 데이터를 잃기 쉽습니다.

적어도 (2)와 (3)의 경우, 주위에 방법이 있지만 어렵습니다. 예를 들어 MySQL을 설치하는 것이 훨씬 쉽습니다.


7

neo4j 는 다음과 같습니다.

테이블이 아닌 그래프로 구조화 된 데이터를 저장하는 임베디드 디스크 기반의 완전 트랜잭션 Java 지속성 엔진

아직 시도해 보지 못했지만 매우 유망 해 보입니다. 이것은 SQL 데이터베이스가 아닙니다. 개체 그래프가 유지되므로 기존 앱에는 적합하지 않을 수 있습니다.



5

대부분의 내용은 이미 언급되었지만, 몇 가지 애완 동물 프로젝트에서 HSQL, Derby 및 Berkely DB를 사용했으며 모두 잘 작동했다고 덧붙일 수 있습니다. 그래서 솔직히 말하면 그다지 중요하지 않다고 생각합니다. 언급 할 가치가있는 한 가지는 HSQL이 아주 좋은 SQL 문을 사용하여 텍스트 파일로 저장된다는 것입니다. 개발할 때 테스트를 수행하고 데이터를 빠르게 설정하는 것이 정말 쉽습니다. 필요한 경우 빠른 편집도 가능합니다. 변경해야 할 경우 모든 데이터베이스를 쉽게 전송할 수 있다고 생각하십시오. :)


5

HSQLDB는 그다지 안정적이지 않은 대규모 애플리케이션에 문제를 일으킬 수 있습니다.

내가 들어 본 것 중 최고 (그러나 직접 경험이 아님)는 berkleyDB입니다. 그러나 오픈 소스가 아니면 라이센스로 인해 사용하는 데 비용이 많이 듭니다. http://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html 참조 자세한 내용은.

추신. berkleyDB는 모르는 경우를 대비하여 관계형 데이터베이스가 아닙니다.


오, 저는 버클리가 관계형 데이터베이스가 아니라는 것을 몰랐습니다! 감사합니다!
Hosam Aly

좋지 않다는 뜻은 아닙니다. 그러나 나는 그것이 개인적인 것을 고려할 때 당신의 사용에 너무 좋을 것이라고 생각합니다. 또한 sqlite를 살펴보십시오. Java 바인딩이 있다고 생각하지만 atm을 찾을 수 없습니다.
Chii

4

저는 .Net과 Java 모두에 대한 DB4O 의 열렬한 팬입니다 .

초기 릴리스 이후 성능이 훨씬 좋아졌습니다. 라이선스 모델도 나쁘지 않습니다. 특히 개체 쿼리에 사용할 수있는 옵션이 마음에 듭니다. 예제 별 쿼리는 매우 강력하고 익숙해지기 쉽습니다.


4

이를 평가하기 위해 어떤 기준을 사용 하시겠습니까? 아직 모른다면 지금 당장 결정할 필요가 없습니다. 적절한 래퍼, 데이터 액세스 개체 등을 제공하여 가능한 한 데이터베이스 구현에 구애받지 않는 애플리케이션을 만들고, 모든 사실을 파악하고 결정해야 할 때이 결정을 내리십시오.

관계형 데이터베이스와 SQL을 사용하는 경우 위의 내용이 너무 어렵지 않아야합니다 (JDBC 등 사용). 데이터베이스간에 전환 할 때 응용 프로그램의 기능이 동일하게 유지되는지 확인할 수 있도록 주변 테스트가 많이 있는지 확인합니다.

얼마 전에 같은 문제가 발생했습니다. 어떤 데이터베이스로 가야할지 몰랐기 때문에 첫 번째 솔루션은 Derby (또는 HSQLDB?)를 사용했고 나중에 어디서 HSQLDB (또는 Derby? 어떤 솔루션이 작동했는지 기억할 수 없음)로 전환 할 수있었습니다. 성능과 관련하여 문제가 있었고 어떤 솔루션이 실제로 효과가 있는지 확인했습니다.


3

나는 Derby를 사용했고 나는 그것이 데이터 유형 변환 함수, 특히 날짜 / 시간 함수가 정말 싫어요. (숫자 유형) <-> Varchar 변환은 고통 스럽습니다.

따라서 DB 문에서 데이터 유형 변환을 사용할 계획이라면 임베디드 DB의 사용을 고려하면 너무 늦게 배웁니다.

최신 Derby 버전 데이터 유형 변환


3

저는 개인적으로 HSQLDB를 선호하지만 대부분 처음 시도했기 때문입니다.

H2는 더 빠르며 더 좋은 GUI 프론트 엔드를 제공합니다 (일반적이고 모든 JDBC 드라이버에서 작동 함).

적어도 HSQLDB, H2 및 Derby는 애플리케이션과 일부 도구를 사용하여 DB에 동시에 액세스 할 수 있기 때문에 개발에 적합한 서버 모드를 제공합니다 (임베디드 모드는 일반적으로 허용하지 않음).


3

이 게시물에 조금 늦었을 것 같지만 (많은 늦었 음 ;-)) Java 및 .NET 용 오픈 소스 객체 지향 임베디드 데이터베이스 인 Perst를 추가하고 싶습니다. 당신의 고려를 위해. Perst는 Java 용 오픈 소스 / 이중 라이센스 내장 데이터베이스입니다. 이 배포판은 Google의 Android 플랫폼과 호환되며 Java ME 용 Perst Lite도 포함되어 있습니다. 우리는 Android 벤치 마크를 구축하고 주제에 대한 백서를 제작했습니다. 여기에서 살펴볼 수 있습니다. http://www.mcobject.com/index.cfm?fuseaction=download&pageid=581§ionid=133

최선을 다해, Chris


3

내가 맞다면 H2는 HSQLDB를 작성한 같은 사람의 것입니다. 사이트에서 벤치 마크를 신뢰하면 훨씬 좋습니다. 또한 태양 공동체가 Derby로 너무 빨리 뛰어 들었다는 개념이 있습니다.


2
DerbyDB와 관련된 조기 더비 개념은 무엇입니까? 성숙?
simgineer

2

난 당신이 SQL 브라우징을 언급 실현,하지만 귀하의 질문에 다른 모든 날 당신은 또한 고려 제안 할 수 db4o는 이다, 좋은, 단순 객체 DB를 .


감사. DB4O는 이러한 작은 프로젝트에 적합 해 보이지만 응용 프로그램 외부에서 데이터를 찾아보고 편집하는 기능이 매우 중요하다고 생각합니다. 또한 새로운 버전의 클래스를 처리하는 것도 쉬울까요? (예 : 추가 / 제거 된 필드)
Hosam Aly

예, 일부 리팩토링을 자동으로 지원합니다. 여기에서 자세한 내용을 확인할
Fabian Steeg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.