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


99

재정 관리를위한 작은 (Java) 애플리케이션을 개발하려고합니다. 임베디드 데이터베이스를 사용해야한다고 생각하지만이 문제에 대한 경험이 없습니다. 사용 가능한 일부 제품 을 살펴 보려고했지만 어떤 제품 이 나에게 더 적합한 지 결정할 수 없습니다. H2 , HSQLDB , Derby 및 Berkeley 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.