Skip to content

ks2999/DataBase

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

СУБД - Полная интеграция компонентов

Полнофункциональная система управления базами данных с end-to-end пайплайном выполнения SQL-запросов.

🚀 Быстрый запуск

Шаг 1: Запуск сервера

./START.sh

Скрипт автоматически:

  • Соберет проект
  • Запустит сервер на порту 5433
  • Покажет инструкции для подключения

Или вручную:

./gradlew build
java -cp build/classes/java/main com.example.Main 5433 /tmp/db_data

Шаг 2: Подключение клиента

В новом терминале:

java -cp build/classes/java/main com.example.Main client

После подключения вы увидите:

Connected to server (PROTOCOL:1.0)
Server ready. Type SQL queries (exit to quit):

Шаг 3: Выполнение SQL запросов

Введите SQL запросы по одному:

CREATE TABLE users (id INTEGER, name VARCHAR, age INTEGER)
INSERT INTO users VALUES (1, 'Alice', 25)
INSERT INTO users VALUES (2, 'Bob', 30)
SELECT * FROM users
SELECT * FROM users WHERE age > 25
CREATE INDEX users_id_idx ON users(id)
SELECT * FROM users WHERE id = 1

Готовые запросы: Откройте файл SQL_QUERIES.txt и копируйте запросы по одному.

📋 Примеры SQL запросов

Создание таблицы

CREATE TABLE products (id INTEGER, name VARCHAR, price INTEGER)

Вставка данных

INSERT INTO products VALUES (1, 'Laptop', 1000)
INSERT INTO products VALUES (2, 'Phone', 500)

Выборка данных

SELECT * FROM products
SELECT * FROM products WHERE price > 600
SELECT name, price FROM products WHERE id = 1

Создание индекса

CREATE INDEX products_price_idx ON products(price)

✅ Реализованные компоненты

  • Storage Layer: Страницы, файлы таблиц, персистентность
  • Buffer Manager: Пул буферов с LRU вытеснением
  • Индексы: B+Tree с поиском и range-сканами
  • SQL обработка: Lexer → Parser → Semantic → Planner → Optimizer
  • Executors: SeqScan, IndexScan, Filter, Project (Volcano модель)
  • Клиент-Сервер: TCP сервер с формализованным протоколом

📊 Архитектура

CLI / TCP Client
        ↓
Server (socket accept / session)
        ↓
Lexer → List<Token>
        ↓
Parser → AST
        ↓
Semantic Analyzer → QueryTree
        ↓
Planner → Logical Plan
        ↓
Optimizer → Physical Plan
        ↓
ExecutorFactory
        ↓
Volcano Executors (open / next / close)
        ↓
Table / Index / Storage

📝 Поддерживаемые SQL операции

  • CREATE TABLE - создание таблицы
  • DROP TABLE - удаление таблицы (удаляет таблицу, все данные и индексы)
  • CREATE INDEX - создание индекса
  • INSERT INTO ... VALUES - вставка данных
  • SELECT ... FROM ... WHERE - выборка с фильтрацией

🔍 Проверка работы

В логах сервера видны все этапы обработки:

  • Токены запроса
  • AST дерево
  • QueryTree
  • LogicalPlan
  • PhysicalPlan (с IndexScan для запросов с индексом!)

📁 Структура проекта

src/main/java/com/example/
├── storage/          # Хранилище
├── buffer/           # Буферный менеджер
├── index/            # Индексы (B+Tree)
├── sql/
│   ├── lexer/        # Лексер
│   ├── parser/       # Парсер
│   ├── semantic/     # Семантический анализатор
│   ├── planner/      # Планировщик
│   └── optimizer/    # Оптимизатор
├── executor/         # Executors
├── server/           # TCP сервер
├── client/           # CLI клиент
└── Main.java         # Точка входа

⚠️ Важно

  • Выполняйте SQL запросы по одному
  • Можно использовать SQL комментарии (--)
  • Запросы можно разделять точкой с запятой (;)
  • Сервер использует порт 5433 (чтобы не конфликтовать с PostgreSQL на 5432)

🧪 Тестирование

Запуск всех тестов:

./gradlew test

Остановка сервера

Нажмите Ctrl+C в терминале сервера или:

pkill -f "com.example.Main"

About

A database that supports SQL queries

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages