[MySQL] InnoDB 엔진 (1)
·
Database
MySQL의 스토리지 엔진 중 가장 많이 사용되는 InnoDB 엔진에 대해 공부해보았다. InnoDB는 MySQL에서 사용할 수 있는 스토리지 엔진 중 거의 유일하게 레코드 기반의 잠금을 제공하며,그로인해 높은 동시성 처리가 가능하고, 안정적이며 성능이 뛰어나다. 프라이머리 키에 의한 클러스터링InnoDB의 모든 테이블은 기본적으로 프라이머리 키를 기준으로 클러스터링되어 저장된다.즉 프라이머리 키 값의 순서대로 디스크에 저장된다는 뜻이며, 모든 세컨더리 인덱스는 레코드의 주소 대신 프라이머리 키의 값을 논리적인 주소로 사용한다.(위 내용은 추후 인덱스에서 자세히 다룰 예정) InnoDB와 달리 MyISAM 스토리지 엔진에서는 클러스터링 키를 지원하지 않는다. 따라서 프라이머리 키와 세컨더리 인덱스는 구조..
[MySQL] MyISAM ? InnoDB ?
·
Database
MySQL을 공부하다보니 계속 InnoDB엔진과 MyISAM 엔진이 등장하는데, 궁금해서 간단하게만 정리해보았다.  MySQL 엔진 아키텍처먼저 MySQL 서버는 MySQL 엔진과 스토리지 엔진으로 나뉜다. MySQL엔진은 요청된 SQL 문장을 분석하거나, 최적화하는 등 DBMS의 두뇌 역할을 한다고 보면 되고,스토리지 엔진은, 실제 데이터를 디스크 스토리지에 저장하거나, 디스크 스토리지로부터 읽어오는 역할을 전담한다. InnoDB 엔진이나, MyISAM 엔진은 둘 중 스토리지 엔진에 해당한다.MyISAM엔진과 InnoDB엔진을 간단히 비교하자면,트랜잭션 처리가 필요하고, 대용량의 데이터를 다루기 위해서는 InnoDB트랜잭션 처리가 필요없고, Read only 기능이 많이 필요할수록 MyISAM조회가 많..
[Spring] 동시성 문제 해결
·
Spring
java에서 단일 서버 환경의 동시성 문제를 해결하는 synchronized와 Lock에 대해 학습하였다. Synchronized자바의 synchronized 키워드는 한 개의 쓰레드만 접근이 가능하도록 해준다. 기본적인 이해를 위해 가장 간단한 코드를 보면Thread-safe하지 않은 코드`public class Counter { private int count = 0; public void increment() { count++; } public int getCount() { return count; } } 여러 스레드가 이 코드에 접근하면 문제가 발생할 수 있다. 예를 들어 두 스레드가 동시에 count++ 를 실행하면 두 스레드 모두 ..