본문 바로가기

Database

(56)
객체 지향 데이터베이스 (OODB / object-oriented Database) 객체지향 데이터베이스 객체 지향 데이터베이스는 객체 지향 패러다임을 사용하는 객체지향 프로그래밍에서 영향을 받아 생성되었다. 객체지향 프로그래밍과 마찬가지로 실세계의 객체를 DB로 표현하기 위해 만들어졌었다. 객체 표현을 관리하는 데이터베이스 기술, ODMG 2.0 표준으로 기술되어 있다. 객체 모델의 핵심 기능은 다음과 같습니다. 속성 및 관계 개체 속성 개체 작업 (동작) 및 예외 다중 상속 범위 및 키 개체 이름 지정 Atomic, structured and collection literals List, set, bag and array collection classes 동시성 제어 및 객체 잠금 객체 관계 데이터베이스를 위한 데이터 언어 표준으로 ISO에서 제시한 SQL3가 있다. 참고로 객체지향..
LeetCode sql 문제, 유저별 월별 집계 https://leetcode.com/problems/reformat-department-table/ Reformat Department Table - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 쉬운 문제인데, 푸는데 너무 오래 걸렸다. sql은 언제나 수행이 부족하다. 아래와 같이 테이블이 있을 때 Department table: +------+---------+-------+ | id | revenue | month | +------+---------+-..
postGIS 쿼리 튜닝 자체 서버에서 돌고 있던 postgreSQL을 aws의 RDS로 이관하는 작업을 하였다. RDS로 이관 후 CPU가 99%에서 내려오질 않는 현상을 발견했다. 해당 테이블은 데이터도 적을 뿐더러, 기존 자체 서버의 성능이 워낙 좋았던 탓에 누구도 쿼리를 손보지 않고 돌리고 있었던 것으로 판단하였다. (기존 서버에서는 cpu성능이 좋아서 30%을 넘지 않았다) 쿼리 변경전 RDS CPU 모니터링 상황 해당 쿼리는 GIS 관련 쿼리로 하나의 포인트 지점에서 가장 가까운 5곳에 해당하는 데이터를 가져오는 쿼리였다. 테이블 : wstn 테이블내 데이터 갯수 : 1567 공간칼럼이름 : loc 기존 쿼리는 ST_Distance_Sphere를 이용해서 작성되었었다. 1. ST_Distance_Sphere 두 개의 ..
1. redis 설치 & 실행 설치 $ wget http://download.redis.io/redis-stable.tar.gz $ tar xvzf redis-stable.tar.gz $ cd redis-stable $ make install 실행 / 종료 # start $ redis-stable/src/redis-server # stop $ src/redis-cli shutdown 백그라운드 실행 redis.conf의 daemonize no → yes 옵션 변경 필요 $ grep "daemonize" redis.conf daemonize yes $ redis-stable/src/redis-server redis-stable/redis.conf redis 사용량 통계 프로그램 github.com/junegunn/redis-stat
postgreSQL core Oracle, PostgreSQL, MySQL Core Architecture 책 발췌 1. MVCC architecture postgreSQL는 Multi Generation Architecture이다. 이는 update 작업이 발생 시 페이지의 이전 레코드를 overwrite 하는 대신 새로운 레코드를 만드는 구조이다. postgreSQL의 레코드의 헤더는 레코드가 어디에 입력했는지 가르키는 라인 포인터를 가지고 있으며, 실제 레코드의 정보는 튜플의 헤더에 정보를 가지고 있다. - t_xmin : insert 시의 XID - t_xmax : delete 시의 XID - t_cid : insert, delete , command id - t_ctid : 해당 튜플의 현재 버전을 가리키는 포인터 - t_..
DBMS core architecture 2 Buffer manager - 버퍼 캐시를 관리하는 메인 메모리 영역, - Replacement algorithm ( victim frame selection을 위한 dirty bits를 유지 관리 ) == 페이징 교체 알고리즘 1. 페이징 교체 알고리즘 1.1 victim frame selection - 메모리는 프레임(frame) 단위 - 디스크의 페이지가 메모리에 올라오면 free frame에 할당하는데 만일 모든 프레임이 사용 중이라면 비어 있는 프레임 확보 필요. 이 작업을 victim frame selection이라 한다. - 프레임에 있는 페이지가 dirty 상태라면 디스크에 변경된 내역을 저장 - dirty 상태가 아니라면 프레임 clear() Oracle, mysql(innodb) : L..
DBMS core architecture 1 1. MVCC (Multi Version Concurrency Control) DBMS에서 Lock을 사용하지 않고, 데이터의 일기 일관성을 보장해 주는 내부 기법. (Lock은 서버의 동시성을 크게 떨어트린다. ) 객체의 변경사항을 모두 버전을 나누어 저장하고, 데이터 객체는 이 버전을 모두 연속체로서 정의, 관리하게 하여 락을 사용하지 않고 일관된 읽기를 보장. 1.1. MGA - Multi Generation Architecture (PostgreSQL) 데이터를 변경할때 해당 데이터를 변경하는것이 아닌, 새로운 데이터를 추가 후 새로운 데이터를 링크를 연결하는 방식 1.2 Undo 방식 (Oracle, mysql/innodb) Undo 영역을 따로 두고 최신 데이터는 데이터 영역에 두고, 올드 데..
postgreSQL 튜닝 이 글은 postgreSQL의 내부 구조를 어느 정도 안다고 가정하에 진행합니다. 1. shared buffer 튜닝 - DISK I/O를 최소화 함으로써 I/O의 성능을 향상하기 위한 버퍼 - 많은 사용자의 동시 접근할때의 경합 최소화가 목표 - 자주 사용되는 블록은 최대한 버퍼 내에 있어야 한다. 1.1 pg_prewarm() - 해당 테이블을 강제로 buffer로 올린다. (캐시처럼 사용하기 위해 미리 로드) - 테이블의 크기에 따라 buffer가 더 느려질 수도 있다. creste extension pg_prewarm; select pg_prewarm('t1') 1.2 HOT (heap only tuple) - MGA에 의한 단점으로 해당 테이블의 변경이 빈번할 경우 테이블 크기 상승과 해당 데이..