H2(DBMS)

H2 (DBMS)
H2 데이터베이스 엔진
H2-logo.png
초기 릴리즈2005년 12월, 16년 전(2005-12년)
안정된 릴리스
2.1.210 / 2022년 1월 17일, 6개월 전(2022-01-17)
저장소
기입처자바
운영 체제크로스 플랫폼
유형릴레이셔널 데이터베이스 관리 시스템
면허증.Eclipse Public License 또는 Mozilla Public License 2.0
웹 사이트h2database.com

H2는 Java로 작성관계형 데이터베이스 관리 시스템입니다.Java 응용 프로그램에 포함되거나 클라이언트-서버 [1]모드로 실행될 수 있습니다.

이 소프트웨어는 오픈 소스 소프트웨어 Mozilla Public License 2.0 또는 원본 Eclipse Public License로 사용할 수 있습니다.

역사

H2 데이터베이스 엔진의 개발은 2004년 5월에 시작되어 2005년 12월에 처음 발표되었습니다.데이터베이스 엔진은 Thomas Mueller에 의해 작성되었습니다.그는 Java 데이터베이스 엔진인 Hypersonic SQL도 [2]개발했습니다.2001년에는 극초음속 SQL 프로젝트가 중단되고 극초음속 SQL 코드 작업을 계속하기 위해 HSQLDB 그룹이 결성되었습니다.H2는 Hypersonic 2의 약자이지만 H2는 Hypersonic SQL 또는 HSQLDB와 코드를 공유하지 않습니다.H2는 처음부터 [3]구축되어 있습니다.

주요 기능

SQL 사용

SQL(Structured Query Language) 표준의 서브셋이 지원됩니다.주요 프로그래밍 API는 SQL과 JDBC이지만 데이터베이스에서는 Postgre를 사용할 수도 있습니다.Postgre처럼 동작하는 SQL ODBC 드라이버SQL [4]서버

테이블 타입

메모리 내 테이블과 디스크 기반 테이블을 모두 생성할 수 있습니다.테이블은 영속적일 수도 있고 일시적일 수도 있습니다.인덱스 유형은 메모리 내 테이블의 해시 테이블과 트리, 디스크 기반 테이블의 b-tree입니다.모든 데이터 조작 작업은 트랜잭션 처리입니다.테이블 레벨 잠금 및 다중 버전 동시성 제어가 구현됩니다.2단계 커밋 프로토콜도 지원되지만 분산 트랜잭션에 대한 표준 API는 구현되지 않습니다.

보안 기능

데이터베이스의 보안 기능은 역할 기반 액세스 권한, SHA-256을 사용한 암호 암호화 및 AES 또는 Tiny Encryption Algorithm, XTEA를 사용한 데이터입니다.암호화 기능은 데이터베이스 내부에서도 사용할 수 있습니다.SSL/TLS 연결은 콘솔응용 프로그램을 사용하는 경우뿐만 아니라 클라이언트-서버 모드에서 지원됩니다.

데이터베이스는 매개 변수화된 문을 사용하여 SQL 주입에 대한 보호를 지원합니다.H2에서는 이 기능을 '리터럴 비활성화'[5]라고 부릅니다.

풀 텍스트 검색 기능

네이티브 구현과 Lucene 사용의 2가지 풀텍스트 검색 구현이 포함되어 있습니다.

하이 어베이러빌리티

단순한 형태의 하이 어베이러빌리티가 실장되어 있습니다.클라이언트 서버 모드에서 사용하는 경우 데이터베이스 엔진은 핫페일오버(일반적으로 클러스터링이라고 불립니다)를 서포트합니다.그러나 장애 발생 [6]후 클러스터링 모드를 수동으로 활성화해야 합니다.

클라우드 버전

버전 1.1.111 이후 H2 인메모리 데이터베이스는 Google App [7]Engine 에서 실행할 수 있습니다.

관계형 데이터베이스의 내구성에 영향을 미치는 과제

H2 문서에서는 기본 하드웨어 및 특정 전원 시스템의 문제가 관계형 데이터베이스의 내구성에 영향을 미칠 수 있는 여러 가지 방법을 자세히 설명합니다.

H2 문서에 따르면 이러한 문제는 DB 엔진 설계뿐만 아니라 스토리지 캐싱 메커니즘과도 관련이 있습니다.스토리지 디바이스는 속도를 높이기 위해 쓰기 캐시를 사용하므로 정전 시 디바이스 캐시의 데이터가 손실됩니다.관리자는 비즈니스 요건에 따라 속도와 데이터 손실 리스크의 공통적인 균형을 평가하고 중요한 서버의 전원장치와 UPS 설계를 신중하게 검토해야 합니다.

스토리지에 캐시를 자주 쓰도록 강요하거나 fsync를 사용하여 쓰기 프로세스를 지연시키거나 장치 버퍼의 캐싱이 정전 시 데이터 손실 위험을 발생시키는 경우가 있습니다.fsync의 유효성은 많은 HDD가 공장 출하 시 디폴트로 쓰기 캐시를 유효하게 하고 있기 때문에 제한됩니다.이 경우 데이터베이스의 설계나 설정이나 OS 레벨의 명령어는 갑작스런 전원 장애 발생 시 데이터가 손실되거나 일관되지 않을 가능성을 배제할 수 없습니다.OS 및 하드웨어 설정을 사용하여 데이터를 실시간으로 쓰기 위해 모든 캐싱을 비활성화하면 회전식 디스크를 사용할 때 초당 약 100회의 쓰기 작업만 수행된다는 점에서 성능에 큰 영향을 미칠 수 있습니다.

H2 문서에서는 정전커밋된 트랜잭션의 잠재적 데이터 손실로 인해 발생할 수 있는 내구성(ACID의 일부)에 대한 잠재적인 문제를 자세히 설명하려고 합니다.

갑작스러운 정전 시의 데이터 유지에 관한 하드웨어 제한 및 이러한 종류의 손실을 방지하기 위해 개발자가 일반적으로 사용하는 접근방식의 비효율성을 고려하여 많은 데이터베이스 엔진은 기본적으로 FileDescriptor.sync() 또는 FileChannel을 호출하지 않습니다.모든 커밋에 대해 force()나 fsync 또는 동등한 명령어를 사용합니다.이는 시스템퍼포먼스가 대폭 저하되고 내구성이 대폭 향상되지 않기 때문입니다.

HSQLDB 매뉴얼에서는 [9]회피책과 유사한 문제를 참조하고 있습니다.

Microsoft 기술 자료에서는 이러한 문제, 전원 장애, 쓰기 캐싱 등이 성능과 내구성에 미치는 영향에 [10]대해 설명합니다.Knowledge Base에서는 디스크 쓰기 캐시의 퍼포먼스와 취약성 간의 트레이드오프 및 관리자가 이러한 균형을 맞추기 위해 사용할 수 있는 설정에 대해 설명합니다.

유틸리티

브라우저 기반의 콘솔 어플리케이션을 갖춘 임베디드 웹 서버, 서버를 기동 및 정지하기 위한 명령줄 도구, 데이터베이스 백업 및 복원, 명령줄 셸 도구를 포함한다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Presentation and use of H2 Database Engine".
  2. ^ SourceForge극초음속 SQL 프로젝트 페이지
  3. ^ "Write Your Own Database, Again". thecodist.com.
  4. ^ "H2 Database supports PostgreSQL ODBC driver". Archived from the original on 2016-12-09. Retrieved 2010-08-24.
  5. ^ "SQL Injections: How Not To Get Stuck".
  6. ^ "H2 Clustering". Archived from the original on 2010-09-24.
  7. ^ "H2 Database on GAE". gaevfs.
  8. ^ "Advanced". Retrieved 30 October 2014.
  9. ^ "Chapter 9. SQL Syntax". Archived from the original on 19 May 2018. Retrieved 30 October 2014.
  10. ^ "Slow Disk Performance When Write Caching Is Enabled". Archived from the original on 31 December 2014. Retrieved 21 December 2014.

외부 링크