메모리에서만 PostgreSQL 실행
우리가 만든 데이터베이스는 하드 디스크 또는 SSD(Solid State Drive)의 영구 메모리에 저장됩니다.
그러나 이 메모리는 RAM(Random Access Memory)보다 느립니다. 그래서 더 효율적이고 빠르게 하기 위해 메모리라는 램에 데이터베이스를 만들어서 사용하기도 합니다.
이 기사에서는 PostgreSQL의 메모리에서 데이터베이스를 사용하는 방법에 대해 설명합니다. 그러나 먼저 메모리에서 데이터베이스를 실행한다는 것이 무엇을 의미하는지, 다른 플랫폼에서는 어떻게 허용하는지 알아보겠습니다.
인메모리 데이터베이스 소개
메모리 내 데이터베이스(IMDB
)는 디스크 드라이브 대신 컴퓨터의 RAM 또는 주 메모리에 저장되고 실행되는 데이터베이스입니다. 주 메모리에서 데이터를 검색하는 데 CPU에서 더 적은 명령이 필요하므로 보다 효율적이고 빠른 성능을 생성하기 위해 수행됩니다.
따라서 이러한 데이터베이스는 빠른 응답 시간이 필요하기 때문에 주로 실시간 시스템 및 게임 응용 프로그램에 사용됩니다.
이 속도는 데이터의 변환 또는 암호화를 수반하지 않기 때문에 보장됩니다. 이러한 방식으로 데이터는 바로 사용할 수 있는 형태로 유지되므로 응답 시간이 빨라집니다.
메모리에서 데이터베이스를 사용할 때의 한 가지 단점은 RAM이 휘발성이라는 것입니다. 또한 RAM은 영구 저장 솔루션이 아니기 때문에 전원이 끊기거나 데이터베이스 또는 서버가 충돌하면 데이터를 잃게 됩니다.
그러나 플래시 메모리 및 NVRAM(Non-Volatile Random Access Memory)과 같은 기술은 메모리 내 데이터베이스의 이러한 변동성에 대응하는 데 사용됩니다. 또한 많은 SQL 플랫폼이 메모리 내 데이터베이스를 지원합니다.
예를 들어 SQL Server는 In-Memory OLTP
가 있기 때문에 메모리에서 데이터베이스 실행을 지원합니다. SQL Server에서 WITH (MEMORY_OPTIMIZED = ON)
또는 이와 유사한 명령을 생성하여 테이블을 메모리에 저장할 수 있습니다.
그러나 주목할만한 점은 PostgreSQL에서 할 수 있습니까? 이 문서에는 이 질문에 대한 답변이 포함되어 있습니다.
메모리에 있는 데이터베이스를 사용하는 PostgreSQL 지원 여부
불행하게도 PostgreSQL은 메모리에서 데이터베이스 또는 그 구성 요소를 사용하는 것을 지원하지 않습니다. 주된 이유는 PostgreSQL이 컴파일 언어인 C로 구현되었기 때문입니다.
그러나 메모리에서 데이터베이스를 실행하는 것은 유익한 품질이며 주로 결과를 빠르게 하기 위해 단위 테스트에 사용됩니다. 메모리 내 데이터베이스 지원이 없는 경우 개발자는 PostgreSQL에서 이를 어떻게 수행합니까?
이 기사에서 몇 가지 대안을 살펴보겠습니다. 이를 수행하는 한 가지 방법은 테이블스페이스를 생성하는 것입니다. 이것이 무엇이며 좋은 대안인지 아닌지 살펴봅시다.
PostgreSQL에서 TABLESPACE
사용
PostgreSQL의 테이블스페이스
는 생성 중에 데이터베이스 관리자가 위치를 정의할 수 있는 데이터베이스 개체입니다. 테이블스페이스
는 데이터의 효율성 요구에 따라 메모리 위치를 할당하는 데 도움이 됩니다.
예를 들어 tablespace
를 사용하여 자주 액세스하는 테이블을 SSD와 같은 빠른 메모리에 저장하고 덜 필요한 데이터는 하드 디스크와 같은 느린 메모리에 저장할 수 있습니다.
마찬가지로 테이블스페이스
를 사용하여 일부 데이터를 RAM에 저장할 수 있으므로 메모리에서 데이터베이스를 사용하는 것과 동일한 효과를 얻을 수 있습니다. 테이블스페이스 생성 구문은 다음과 같습니다.
CREATE TABLESPACE tablespace_name LOCATION '/ssd/postgresql/data';
LOCATION
키워드 뒤에 tablespace
를 생성하려는 주소의 심볼릭 링크를 추가합니다. 그러나 PostgreSQL의 메모리에서 tablespaces
를 사용하는 것은 권장되지 않습니다. 공식 PostgreSQL 문서에 경고로 추가되었습니다.
RAM의 변동성으로 인해 시스템 충돌이나 우발적인 삭제로 인해 테이블스페이스가 손실되면 데이터베이스 클러스터의 모든 데이터를 읽을 수 없게 됩니다. 따라서 메모리에서 테이블스페이스
를 사용하는 것은 좋지 않습니다.
그렇다면 어떤 옵션이 우리에게 남을까요? 먼저 고려할 수 있는 또 다른 대안을 살펴보겠습니다. 더 빠른 응답 시간을 위해 일회용 PostgreSQL 인스턴스를 생성하는 것입니다.
버리기 PostgreSQL 인스턴스 만들기
이 방법을 이해하기 위해 단위 테스트의 예를 살펴보겠습니다.
데이터베이스를 테스트하려면 빠르고 효율적인 성능 속도가 필요합니다. PostgreSQL에서 이를 수행할 수 있는 한 가지 방법은 사용 후 삭제되는 일회용 PostgreSQL 인스턴스를 생성하는 것입니다.
이 방법은 initdb
명령을 사용하여 PostgreSQL에서 새 데이터베이스 클러스터를 생성해야 합니다. 데이터베이스 클러스터는 동일한 서버에서 실행되는 데이터베이스 그룹입니다.
initdb
명령의 구문은 다음과 같습니다.
initdb [option...] [ --pgdata | -D ] directory
이 명령을 사용하는 방법의 예는 다음 쿼리와 같이 새 데이터베이스 클러스터를 생성하는 것입니다.
initdb --auth=trust --username=postgres -D /path/to/temp/datadir
이 명령은 임시 저장소 데이터베이스 클러스터를 만드는 데 도움이 됩니다. 또한 기본 postgres
데이터베이스에 신뢰
를 부여합니다.
이제 위의 쿼리에 지정된 사용자 postgres
로 생성된 데이터베이스 클러스터에 연결해야 합니다. 그런 다음 CREATE USER
또는 CREATE DATABASE
와 같은 생성 명령을 수행한 다음 코드를 단위 테스트에 넘겨야 합니다.
테스트를 완료한 후 pg_ctl
명령을 사용하여 서버를 중지하고 datadir
데이터 디렉토리를 삭제합니다. 이 프로세스는 메모리에서 데이터베이스를 실행하는 것과 유사하게 테스트하는 동안 더 빠른 응답 시간을 허용합니다.
따라서 PostgreSQL은 SQL Server나 MySQL과 달리 메모리에 있는 데이터베이스 사용을 지원하지 않는다는 결론을 내릴 수 있습니다.
RAM에서 위치를 지정하여 인메모리 테이블스페이스
를 생성할 수 있지만 심각한 데이터 손실이 발생할 수 있으므로 되돌리려면 많은 노력이 필요할 수 있으므로 권장하지 않습니다.
테스트를 위한 PostgreSQL의 응답 시간을 단축하기 위해 일회용 PostgreSQL 인스턴스를 생성하고 그에 따라 구성할 수 있습니다. 이러한 개념을 명확하게 이해할 수 있기를 바랍니다. 계속 공부하다!
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub