Skip to content

LEEJaeHyeok97/digging-into-db

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📚 데이터베이스


간단한 로컬 데이터베이스 프로그램을 구현한다.

프로그램 종료 후 다시 실행해도 파일 기반 영속성으로 데이터를 조회할 수 있어야 한다.

🗂 프로젝트 소개

  • 목표: 파일에 저장되는 단일 프로세스 로컬 DB
  • 특징
    • 테이블 정의 및 스키마 관리
    • 파일 기반 저장
    • B+Tree 인덱스로 범위/포인트 조회 가속
    • 트랜잭션(ACID 중 최소 3가지 만족을 목표)
    • 간단한 옵티마이저(인덱스 선택/풀스캔 결정 등)
    • 버퍼 캐시

구현 기능 목록

  • 데이터 CRUD
    • INSERT, SELECT, UPDATE, DELETE 지원
    • 조건절(=, <, <=, >, >=, BETWEEN, IN) 지원
    • 기본키 제약사항 검증
  • 파일 입출력(영속성)
    • 페이지 단위 파일 포맷 설계(4KB/8KB)
    • 레코드 구조 관리
    • 프로그램 재시작 후에도 데이터 유지 가능
  • 테이블과 스키마
    • CREATE TABLE 최소 문법 지원(컬럼명, 타입, PK 지정)
  • B+Tree 자료구조
    • PK 또는 인덱스 키 기준 B+Tree 구현
    • 포인트 조회, 범위 스캔 지원
    • 리밸런싱 및 높이 유지
  • 인덱스
    • CREATE INDEX 지원
    • 옵티마이저/실행기에서 인덱스 스캔 방법 선택 가능
    • INSERT/UPDATE/DELETE 시 트리 업데이트
  • 트랜잭션
    • BEGIN/COMMIT/ROLLBACK 지원
    • 최소한의 격리 보장(SERIALIZABLE)
  • 간단한 옵티마이저
    • 플랜 선택 기능
    • 풀 스캔 VS 인덱스 스캔 선택
  • 캐싱 전략
    • 버퍼 캐시(페이지 캐시) 탑재
    • 교체 알고리즘(LRU/LFU 중 택 1)

📦 프로그램 실행 예시

> CREATE TABLE users (id INT PRIMARY KEY, name TEXT, age INT);
OK

> INSERT INTO users VALUES (1, "Alice", 29);
OK (1 row)

> SELECT id, name FROM users WHERE id = 1;
id | name
---+------
1  | Alice
(1 row)

> BEGIN;
OK
> UPDATE users SET age = 30 WHERE id = 1;
OK (1 row)
> ROLLBACK;
OK

> SELECT * FROM users WHERE id BETWEEN 1 AND 10;

> EXIT
Bye!

🎯 프로그래밍 요구사항

  • 표준 입력/출력을 사용해 CLI 인터페이스 제공한다.
  • 예외 상황 시 에러 메시지를 출력하고 종료된다.([ERROR] …)
  • 함수 길이, 클래스 책임을 작게 유지한다.
  • 도메인 로직 테스트는 필수적으로 한다.

🧪 테스트 가이드

  • 단위 테스트

    B+Tree: 삽입/삭제/검색/범위 스캔/스플릿/머지

    파일/페이지: 페이지 읽기/쓰기

    트랜잭션: 롤백/커밋 후 상태 검증, 크래시 시 복구

    옵티마이저: 조건에 따른 플랜 선택 검증

    캐시: 히트율 변화, 교체 정책 동작

  • 통합 시나리오

    테이블 생성 → 대량 INSERT → 인덱스 생성 → 조회(포인트/범위)

    BEGIN → 업데이트 → 크래시 시뮬레이션 → 재시작 → 복구 결과 확인

    캐시 온/오프 or 사이즈 변화에 따른 성능 차이 측정(간단 지표)

About

데이터베이스 프로그램을 자바코드로 직접 만들기

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages