computer science/DB

데이터 중심 애플리케이션 7장(트랜잭션)을 읽다가, 하나의 트랜잭션에서 insert 쿼리후 commit 하지 않고 select로 insert한 결과를 가져올 수 있을까? 하는 궁금증을 가졌다. spring-jpa 에서는 영속성 컨택스트라는 개념이 있기 때문에 가능 할 것 같았지만, DBMS 에서도 가능 할지는 의문이였다. 결론부터 말하면 가져올 수 있다. DB에는 스토리지 엔진이라는 데이터베이스 엔진이 있다. mysql의 innoDB가 스토리지 엔진이다. 이 스토리지 엔진이 트랜잭션을 담당하고 있는데, 버퍼 풀, 로그 버퍼, 리두(redo) 로그, 어댑티브 해쉬 인덱스, 이중 쓰기 버퍼 등의 기능을 제공한다. Log Buffer그중 로그 버퍼의 역할은 트랜잭션의 쓰기 내용을 담고 있다가 commit이 되..
ACID는 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)를 의미한다.이 4가지는 트랜젝션에서 안정성을 보장하는 4가지 원칙이다.오늘은 이 원칙들에 대해서 Applicaiton과 DB 관점에서 책임의 분리에 대해서 학습해 보았다.  원자성(Atomicity) 원자성은 모든 쓰기 작업들이 하나의 트랜젝션에 묶여 모두 동작하거나, 모두 동작하지 않는 것을 의미한다. 트랜잭션에 문제가 생겨 실행이 되지 않는 것을 abort라고 하고, 트랜잭션이 완료되면 commit이라고 한다. abort가 된다면 트랜잭션이 일어나기 전 환경으로 되돌아 가고 이를 rollback이라 한다. abort는 취지는 기본적으로 원 상태로 되 돌아가는 기능보다는, 트..
Data Type Strings 문자열, 숫자, serialized object(JSON string)등 저장 SET name redis → name = "redis" MSET name pencil price 100 → name = "pencil", price = "100" MGET name price → 1) "pencil" 2) "100" redis는 숫자도 문자형으로 저장한다 대신 문자형 숫자는 사칙연산이 가능하다. INCR price → price + 1 INCRBY price 100 → price + 100 redis에서는 변수명에 :을 사용하여 의미별로 구분을 해주면 좋다 SET professor:database:ko mr.kim Strings Commands Lists String을 Doub..
백엔드 서버에서 DB 서버로 연결을 보내는 방식은 크게 매번 DB서버에 연결하여 요청을 보내고 연결을 종료한다. connection pool을 이용한다. 이렇게 나누어진다. 먼저 첫번째를 살펴보면 Connection 백엔드 서버에서 쿼리를 전송하기 위해서 DB서버에 연결을 해야하는데, 이때 TCP/IP 연결(3 way handshake)를 해준다. 이렇게 백엔드 서버와 DB서버가 연결 되었다면 백엔드 서버에서 쿼리를 전송하고 DB서버에서 응답하고, 연결을 종료한다. 이것이 기본적인 백엔드 서버와 DB서버 간의 통신이다. 하지만 이 방식의 경우에는 여러 단점이 존재한다. 매번 쿼리를 전송할때마다 connection을 다시 맺어야 함으로 시간적인 손실이 발생한다. 매번 connection을 realse 해주..
간식타임
'computer science/DB' 카테고리의 글 목록