===== 특징 =====
* c, java 모두 지원.
* 클라이언트 서버 모델이 아니고, DB가 파일로 저장됨.
* 따라서 여러 프로세스가 DB를 공유하려면, 파일 레벨의 lock이 필요하기 때문에, 이 DB는 lock이 파일 lock인 DB락으로 처리됨.
* Shared Cache Mode 로 인해 여러 쓰레드 사용 가능하고, 한 쓰레드가 write 하는 동안 다른 쓰레드는 read 가능함
===== 메모리 DB 사용시 문제점 =====
* In most extensions, if you use :memory: or an empty string as the name for the database, it will create the database in RAM. The database will only be accessible to the connection that created it (it cannot be shared with other connections).
* Furthermore, the database will only last for the duration of the connection. It is deleted from memory when the connection closes.
* 즉 다른 커넥션은 사용 못함. DB생성한 커넥션만 사용하며, 이 커넥션이 close 되면, 자료 다 날아감.
===== 메모리 DB를 프로세스간 share 가능한지 =====
* shared memory 사용을 고려해 봤으나, DB를 sqlite에서 자체적으로 관리하므로 쉐어드 메모리의 주소와 매칭시킬 방법이 없음. 즉 제공을 안함. 또한 쉐어드 메모리의 최대 크기는 33M bytes 이므로 한계가 있음.
* mmap 사용할 수 있을것 같으나 이경우 실제 파일IO가 일어나는 경우는 불가피함. 또한 프로세스 관계가 Parent-Child 관계여야만 한다.
* /dev/shm 에 DB를 생성하면 두 프로세스가 쉐어드 파일 시스템을 이용하여 in memory DB 를 사용할 수 있다.
* 쉐어드 파일 시스템을 이용한다면, 당연히 같은 머신에서만 가능함. H2 같은 경우는 다른머신에서 remote 가능.
===== 장점 =====
* SQL을 지원하기 때문에 프로그래밍이 직관적이고 쉽다.
* 백업파일을 두가지로 지원한다.
* SQL 구문으로 백업파일을 지원하기 때문에 다른 DB 에서도 읽어서 DB를 구성할 수 있고, SQL이므로 포터빌리티가 좋다.
* 바이너리 형식도 지원한다.
* JDBC 제공.
* 한 DB에 다른 DB의 테이블들을 넣을 수 있다. 이를 이용하면, 분산 DB환경으로 수집후, 통합하여 한 화면에서 쿼리 가능