ComputerScience/Database

시작에 앞서 다중화란?**💡 DB 다중화?- 단일 데이터베이스 구조로 사용할 경우 단일 데이터베이스에 문제가 발생할 경우 계속해서 서비스가 제공되지 못하며, 서버 데이터 분산을 통해 copy본을 만들어놓는 등의 작업을 위해 다중화를 사용한다.💡 다중화시 유의점- 간단히 병렬화해서 대수를 증가시키는 웹 서버나 애플리케이션 서버와 비교하면 다중화에 대해 고민해야할 부분이 많은데 그 이유는 DB 서버가 데이터를 보존하는 영속(Persistence) 계층이기에 별도의 대처가 필요. 💡 DB와 다른 서버의 차이- 데이터베이스는 데이터를 장기간 보존하는 매체가 필요하다. 이 점은 데이터를 일시적으로 처리할 뿐인 웹 / 앱 서버와 다른 점이다.- 결국 DB 서버의 아키텍처는 서버와 저장소를 묶어..
B-Tree 인덱스, 인덱스의 필요성 B-Tree 구조 일반적인 이진트리(자식 2개만을 가지) 형태 일반적으로 인덱스를 저장하는 방식(또는 알고리즘)에 따라 B-Tree 인덱스, Hash 인덱스, Fractal 인덱스 등으로 나눌 수 있으며, 일반적으로는 B-Tree 구조가 사용된다. 좌우 자식 간의 균형이 맞지 않을 경우에는 매우 비효율적이라, 항상 균형을 맞춘다는 의미에서 균형 트리(Balanced Tree)라고 불린다. 구조자체는 루트노드에서 부터 브랜치 노드 부터 리프노드까지 존재한다. 페이지 페이지란, 디스크와 메모리에 데이터를 쓰고 읽는 최소 작업 단위이다. 일반적인 인덱스를 포함하여 PK와 테이블등은 모두 페이지 단위로 관리된다. 따라서 만약 쿼리를 통해 1개의 레코드를 읽고 싶더라도 결국은..
최근 Redis를 사용하는 비즈니스 로직을 작성하는 과정 중 Redis의 키값으로 데이터를 찾아 해당하는 필드 값을 수정해야하는 일이 있었다. 이 과정에서 인 메모리(In-Memory) DB의 특성을 잘이해하지 못하고 로직을 작성하였다. 우선, 현재 환경은 CrudRepository를 상속 구현하여 Redis에 데이터 입출력 및 조회작업을 수행하고 있었다. 그렇기에 Id가 UUID값으로 설정되어 있어, findById()를 통해 Redis Entity를 찾은 후 변경감지를 수행하려 했으나 관계형 데이터베이스가 아니기에 변경감지를 수행할 수 없었다. 그래서 rename으로 변경하는 로직 또한 구성해봤지만, 이는 인메모리 DB의 특성을 전혀 살리지 못한 구조였다. Redis는 모든 데이터를 메모리에 저장한다..
소개 배경 최근 DB에 대해 공부하며, 힌트라는 개념이 약하다고 생각하여, 해당 개념을 정리하고자 포스팅하게 되었다. 우선 DB의 힌트 개념을 알기전 쿼리 실행 계획과, 쿼리 옵티마이저에 대한 개념을 익혀야한다. 쿼리 실행 계획(execution plan) 실행 계획은 DB에서 query를 수행할 때, 어떤 방식으로 데이터를 조회 및 처리할지 나타내는 계획하는 것이다. 이때 실행 계획은 DBMS에 의해 쿼리 옵티마이저가 최적의 방법을 선택하여, 생성한다. 쿼리 옵티마이저(query optimizer) 쿼리 옵티마이저란 쿼리를 처리하는데 있어, 가장 효율적인 방법을 선택하기 위해 여러가지 정보를 고려한다. 해당 정보에는 테이블의 크기, 인덱스의 유무, 통계 정보, 서버 자원 상황 등이 포함된다. 쿼리 옵티..
LEE티씨
'ComputerScience/Database' 카테고리의 글 목록