database

    [Database] MySQL InnoDB lock

    MySQL InnoDB 엔진은 상황에 따른 여러가지 lock을 통해 동시성을 제어해준다. 트랜잭션이 획득한 lock들은 해당 트랜잭션이 commit or rollback될 때까지 유효하다. 종류 Shared lock (S) row-level lock select 위한 read lock shared lock이 걸려 있는 동안 다른 트랜잭션이 해당 row에 대해 X lock(exclusive lock) 획득 불가능 S lock 획득 가능 (읽기는 가능) select ... lock in share mode 사용 (MySQL 8.0부터는 select ... for share 사용 가능) Exclusive lock (X) row-level lock update, delete 위한 write lock exclus..

    [Database] 트랜잭션 격리 수준

    [Database] 트랜잭션 격리 수준

    트랜잭션 격리 수준 동시에 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타낸 것이다. → 즉, 특정 트랜잭션이 다른 트랜잭션에서 변경한 데이터를 볼 수 있도록 허용할지 말지를 결정하는 것이다. level이 아래로 내려갈수록 트랜잭션간 고립 정도가 높아지며, 성능이 떨어지는 것이 일반적이다. 동시성 문제 Dirty Read 트랜잭션1에서 A테이블을 SELECT 한 후 트랜잭션2에서 A테이블 내용을 변경하는 상황. 트랜잭션2가 해당 변경사항을 commit 하지도 않았는데, 트랜잭션1에서 다시 A테이블을 SELECT하면 해당 변경사항을 읽어들일 수 있음. Non-repeatable Read (Inconsistent Read) 트랜잭션1에서 A테이블을 SELECT 한 후 트랜잭션2에서 A..

    PK: UUID vs Auto Increment

    UUID UUID는 범용 고유 식별자이다. 물론 무조건 유일을 보장하지는 않지만, UUID는 범위가 10의 38승이기 때문에 실질적으로 거의 유일하다고 볼 수 있다. 장점 분산 시스템에서 적절하다. (auto increment에서 설명) DB 환경에 독립적이다. (어떤 DB를 사용하든 uuid 생성 함수를 사용하면 된다) 단점 성능에 저하를 일으킨다 → 검색의 효율을 위해 id를 정렬한다면? UUID는 엄청 큰 문자열이기 때문에 정렬하는 비용이 생각보다 많이 든다. 사람이 보기 힘들다. Auto Increment 1부터 시작해서 데이터가 추가될 때마다 자동으로 숫자를 늘려가는 방식이다. +) 물론 타입을 조심해야 한다. 데이터가 21억 건이 넘어가면? → Integer로는 부족하다. 장점 빠르다. 눈에 ..

    [Postgresql] PostGIS 설치 - MySQL이 아닌 PostgreSQL을 사용하는 이유

    [Postgresql] PostGIS 설치 - MySQL이 아닌 PostgreSQL을 사용하는 이유

    배경 프로젝트 도중 공간 데이터를 다룰 일이 있었다. 나는 주로 MySQL을 사용하기 때문에 처음에는 MySQL이 지원하는 공간 데이터 타입(Point, LineString, ...)을 사용하기로 했다. 그러나 나는 유클리드 좌표계(좌표평면)가 아닌 WGS84 좌표계(위도, 경도)를 사용해야 했는데, MySQL의 공간 연산 함수는 WGS84 좌표계에 대한 지원이 미흡했다. 예를 들어, MySQL의 공간 연산 함수 중 하나인 ST_Intersection(두 선분의 교차점 계산)은 WGS84 좌표계를 쓰는 것과 관계없이 좌표평면을 기준으로 계산하기 때문에 예상한 값과 다른 값을 반환하게 된다. 여러 레퍼런스를 찾아보면 공간데이터를 다룰 때 MySQL 보다는 PostgreSQL의 PostGIS가 사용성과 성능..

    H2 데이터베이스 설치

    H2 데이터베이스 설치

    H2 데이터베이스는 개발이나 테스트 용도로 가볍고 편리한 DB, 웹 화면을 제공한다. 현재 1.4.200 버전(2019 -10-14)을 사용한다. 다운로드 및 설치 다운로드 링크 https://www.h2database.com 윈도우 유저는 Windows Installer를 설치해서 쉽게 실행할 수 있다. All Platforms는 윈도우를 포함한 다른 OS에서 H2 데이터베이스를 사용할 때 다운로드한다. 다운받아 압축을 풀고 해당 폴더를 원하는 위치에 둔다. 이제 h2/bin/h2.bat(윈도우) or h2.sh(맥)을 실행하면 된다. 데이터베이스 파일 생성 방법 - jdbc:h2:~/[프로젝트 이름] (최초 한번) ~/jpashop.mv.db 파일 생성 확인 (사용자 폴더에서 ls -arlth 했을 ..