데이터가 있으면 UPDATE / 데이터가 없으면 INSERT DB에서 흔히 말하는 upsert 구문을 PostgreSQL에서도 사용해보자. INSERT INTO [TABLE] (COLUMN1, COLUMN2, ...) VALUES (VALUE1, VALUE2, ...) ON CONFLICT ([column_name / ON CONSTRAINT constraint_name/ WHERE predicate]) [DO NOTHING] [DO UPDATE SET column1 = value1, ...] ON CONFLICT column_name : 특정 컬럼명을 기준으로 체크하고, 컬럼을 여러 개 넣을수도 있다. ON CONSTRAINT constraint_name : 테이블 생성할 때 만든 constraint ..
DBMS 검색 결과
Mac환경에서 H2 DataBase 설치 (IntelliJ Proect 연결) 간단한 프로젝트를 생성할 때 많이 사용하는 인-메모리(In-memory) 데이터베이스의 일종인 H2는 가볍다. 오늘은 h2를 설치하면서 프로젝트에 연결까지 해보자. 1. h2 다운로드 https://www.h2database.com/html/main.html Mac 환경에서는 All Platforms 을 클릭하여 다운로드 받으면 된다. 2. 실행 다운로드 받아진 *.zip 파일의 압축을 풀어주고 h2 > bin 으로 이동하여 sh 파일에 권한을 주고 실행한다. # bin 으로 이동 $ cd h2/bin # 실행파일 권한 추가 $ chmod 755 h2.sh # H2 실행 $ ./h2.sh -webAllowOthers 이때 -w..
AWS RDS For PostgreSQL 성능 최적화 사내에서 개발중인 서비스는 PostgreSQL DB를 사용중이다. 아직 베타를 출시한 것은 아니지만 쿼리 하나 날리는데 20초가 걸리는 경우가 있었다. 백엔드 개발자이지만 DB 전문가는 아니라 쿼리를 어떻게 더 튜닝해야할지 몰랐다. 먼저 RDS 인스턴스를 변경해보았다. 1. RDS 인스턴스 db.t3.medium -> db.mg.large 로 변경 기존에 사용하던 DB사양은 위와 같았다. 속도가 느리기도 하고 DB 성능을 높일 때가 된 것 같아 아래와 같은 사양으로 변경하였다. 2. RDS Parameter 변경 RDS -> 데이터베이스 -> 데이터베이스명 -> 구성을 보면 파라미터 그룹이 있다. 그걸 클릭하면 pg_setting에 있던 값들이 나온다..
DB 파티셔닝(Partitioning) 정의 및 예제 배경 회사의 부동산 데이터를 적재하는 과정에서 연도별 데이터가 방대하게 쌓이고 있다. 빅데이터의 수준은 아니지만 추후 10년치 이상의 데이터를 쌓고나서는 용량의 한계와 성능저하를 불러올 수 있을 것이다. 하나의 DBMS에 너무 큰 테이블이 들어오면서 용량 및 성능 측면에서 많은 이슈가 발생할 수 있게 되고, 이런 이슈를 해결하기 위해 혜성처럼 등장한 table을 파티션(partition)이라는 작은 단위로 나누어 관리하는 파티셔닝 기법을 사용해볼 것이다. 파티셔닝 기법을 통해 소프트웨어적으로 데이터베이스를 분산처리하여 성능 저하를 방지하고, 관리를 수월하게 할 수 있을 것이다. 개념 논리적인 데이터들의 element들을 다수의 entity로 쪼개는 것..
공간 인덱스 활용 업무를 하는데 공간 연산을 하는 일이 많다. 특정 주소와 비교하여 가까운 거리에 있는 주소를 추출한다거나 500m 또는 1km 이내의 주소들을 추출하는 경우이다. 이럴 때에는 거리 계산이 필요하다. 거리계산하는 함수로 st_distance 를 사용하였는데, 이 공감함수는 공간 인덱스를 타지 못한다는 걸 깨달았다. 500m 이내 데이터를 추출하는데 34초 가량 걸려 개선해야될 필요성을 느꼈다. PostgreSQL 인덱스 생성 CREATE INDEX [인덱스명] ON [테이블명] USING btree (컬럼1, 컬럼2..); 인덱스를 생성할 때에는 보통 위와 같이 사용한다. geometry 데이터 타입인 경우에도 위와 같이 생성하면 인덱스를 탈 줄 알았는데, 잘못 알고 있었다. 공간 인덱스..
뷰(View) 테이블 생성 및 제어 뷰(View) 데이터베이스에 존재하는 일종의 가상의 테이블을 의미한다. 실제 테이블의 행과 열을 가지고 있고, 동일한 방식으로 조회할 수 있으나 실제로 데이터를 저장하는 것은 아니다. 뷰(View) 테이블을 조회하는 순간 원본 테이블로 가서 해당 테이블의 데이터를 보여주는 역할만 수행하는 것이다. 즉, 뷰(View)를 사용하게 되면 여러 테이블이나 뷰를 하나의 테이블처럼 볼 수 있어 편리하다. 뷰(View)의 장점 1. 특정 사용자에게 테이블 전체가 아닌 필요한 필드만을 보여줄 수 있어 보안적으로 좋다. 2. 복잡한 쿼리를 단순화하여 사용할 수 있다. 3. 쿼리를 재사용할 수 있다. 4. 뷰(View)가 참조하는 원본 테이블의 데이터가 변경되면 뷰(View)의 데이터도..
최근댓글