"메모리 모드"인 H2 데이터베이스의 다음 코드는 연결이 열려 있거나 VM이 실행될 때까지 완벽하게 실행됩니다. 그러나 H2 db는 연결이 닫히거나 VM 종료가 발생할 때 데이터를 손실합니다. 여러 시작 - 종료/온라인 - 오프라인주기에서 데이터를 유지하는 다른 방법이 있습니까?H2 데이터베이스 인 메모리 모드 트랜잭션을 지속하기위한 아이디어가 있습니까?
한 가지 방법은 디스크 및 메모리의 데이터 무결성을 검사하는 백그라운드에서 응용 프로그램과 동기화 프로세스에서 발행 된 DDL과 DML을 추적하여 디스크 기반 복제본을 작성하는 것입니다. 디스크 기반 DML은 매번 시작할 때마다 디스크 데이터를 메모리에 복사 /로드하는 데 소요되는 느린 오버 헤드 + 추가 오버 헤드가있을 수 있지만, 어느 정도까지는 지속성을 유지할 수 있습니다. 에서-memeory 모드 또는 다른 해결 방법과 지속성 문제에 대한 H2에서 제공하는 다른 방법
이 있습니까?
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class H2InMemoryModeTest {
public static void main(String[] args)
{
try
{
Class.forName("org.h2.Driver");
DriverManager.getConnection("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1","sa","sa");
Statement stmt = con.createStatement();
//stmt.executeUpdate("DROP TABLE table1");
stmt.executeUpdate("CREATE TABLE table1 (user varchar(50))");
stmt.executeUpdate("INSERT INTO table1 (user) VALUES ('John')");
stmt.executeUpdate("INSERT INTO table1 (user) VALUES ('Smith')");
ResultSet rs = stmt.executeQuery("SELECT * FROM table1");
while(rs.next())
{
String name = rs.getString("user");
System.out.println(name);
}
stmt.close();
con.close();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}
친절하게 도움. 감사.
당신이 [큰 캐시]와 [지속 모드] (http://h2database.com/html/features.html#embedded_databases) (HTTP를 사용 할 수 없습니다 생성합니다 : //h2database.com/html/grammar.html#set_cache_size)? 메모리 내 데이터베이스를 유지하는 것과 관련하여 [SCRIPT TO] (http://h2database.com/html/grammar.html#script) 명령을 고려 했습니까? –
대형 캐시는 좋은 옵션이지만 집계 쿼리 나 인덱스가없는 경우 전체 테이블 검색이 필요한 캐시에는 적합하지 않습니다. 명시 적으로 캐싱 인덱스를 추가하는 것도 좋은 전략이 될 것입니다. 스크립트에 유망 보이지만 모든 시스템 고장/전원 차단/아웃의 메모리의 경우 최신 DB 상태로 복구를 극대화하기 위해 DB의주기적인 스냅 샷을 검사 점 동기화와 같은 트리거 할 수 있습니다. 토마스 뮐러는 뭐라 구요? – Dhwanit