본문 바로가기
반응형

CS/DataBase11

[DataBase] 인덱스란? 인덱스란 테이블의 특정 컬럼을 빠르게 조회할 수 있도록 만든 자료구조이다. 보통 B-Tree(Balanced Tree) 구조를 사용하여 빠른 탐색이 가능하다. 데이터를 직접 읽는 게 아니라 색인을 먼저 보고 해당 데이터 위치를 찾아가게 된다. 예제blog 테이블에서 blog_category = 1인 데이터를 찾는 쿼리SELECT * FROM blog WHERE blog_category = 1; 인덱스가 없으면데이터 전체를 처음부터 끝까지 풀 스캔(Full Table Scan)100만 개 중에서 10개만 필요해도 전부 읽어야 하기 때문에 느리다. 인덱스를 추가하면?인덱스 = 책의 목차 같은 역할CREATE INDEX idx_blog_category ON blog (blog_category);이제 blog_.. 2025. 3. 26.
[DB] MVCC(다중 버전 동시성 제어) 동시정 제어(Concurrency Control)동시성 제어란 DBMS가 다수의 사용자 사이에서 동시에 작용하는 다중 트랜잭션의 상호간섭 작용에서 데이터베이스를 보호하는 것을 의미한다. 일반적으로 동시성을 허용하면 일관성이 낮아지게 된다.  다수 사용자의 동시 접속을 위해 DBMS는 동시성 제어를 할 수 있도록 Lock 기능과 SET TRANSACTION 명령어를 이용해 트랜잭션의 격리성 수준을 조정할 수 있는 기능도 제공한다. 이렇게 동시성을 제어하는 방법에는 낙관적 동시성 제어와 비관적 동시성 제어가 있다. 낙관적 동시성 제어(Optimistic Concurrency Control)사용자들이 같은 데이터를 동시에 수정하지 않을 것이라고 가정데이터를 읽는 시점에 Lock을 걸지 않는 대신 수정 시점에 .. 2025. 3. 26.
[SQL] SQL 실행 순서에 대해서 SQL 쿼리를 작성할 때 아무 생각 없이 짜다가 문득 실행 순서에 대해 어떻게 되는지 궁금해졌다. SQL 쿼리가 실행될 때는 작성한 순서대로가 아니라 내부적으로 정해진 순서에 따라 처리된다.가장 일반적인 실행 순서는 아래와 같다 SELECT ... FROM ... JOIN ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT ...; 실제 실행 순서FROM테이블을 선택하고 원시 데이터를 가져온다.JOIN이 있다면 JOIN 조건에 따라 테이블 결합WHERE조건에 따라 행(Row) 필터링GROUP BY 전에 실행되므로 집계(Aggregation)에 영향을 줌GROUP BY같은 값끼리 그룹화집계 함수 (SUM,AVG,COUNT 등)가 사용될 때만 필요Having.. 2025. 2. 18.
[Redis] redis,docker로 멀티서버에서 pub/sub 실습해보기 어떤 하나의 서비스를 할 때 하나의 서버를 두는 것이 아닌 여러 대의 서버를 두는 경우가 있다. 해당 서비스가 소켓 통신을 통한 채팅 서비스를 제공한다고 생각해보자. A와 B 두 사람이 채팅을 한다고 할 때 서버가 한대라면 문제가 없다. 그런데 서버가 여러 대이고 각자 다른 서버에 연결이 되어 있다면? 그럴 때는 채팅을 어떻게 할 수 있을까? 이럴 때 redis의 pub/sub 기능을 사용해 이를 해결할 수 있다. Redisredis는 인메모리 데이터 베이스로 거대한 맵 데이터 저장소 형태를 가지고 데이터를 메모리에 저장하여 빠른 읽기와 쓰기를 지원한다. 싱글 스레드로 동시성 이슈가 발생하지 않고 해시 테이블을 사용하기 때문에 매우 빠른 속도로 데이터 검색이 가능하다. 이러한 특징으로 캐시 서버로 많이 .. 2025. 2. 9.
반응형