Code Monkey home page Code Monkey logo

studentsdb's Introduction

База данных с соединением клиент-сервер

Данный проект демонстрирует работу трех модулей: база данных (Modules/DB), парсер (Modules/Parse) и сервер (Modules/Server).

Установка

Для работы программы требуются следующие библиотеки: boost (boost::asio), bison и flex. Для сборки используется cmake и make. Используется стандарт c++11. Если вы используете дистрибутив ubuntu или debian, то установка весьма проста:

sudo apt-get install flex bison cmake libboost-all-dev

Далее программу нужно собрать. Перейдите в директорию с проектом и выполните:

mkdir build && cd build
cmake ..
make

Модули

База данных

В качестве примера я использую базу данных студентов. Для хранения используется формат CSV, данные загружаются в память и хранятся в объекте std::set, который представляет из себя самобалансирующееся дерево. У объекта базы данных прописаны основные запросы для работы с ней. Они реализуют обертку над методами объекта std::set. Для хранения данных используется объект Student, который хранит поля first_name (Имя), last_name (Фамилия), group (Группа) и course (Курс), settled (Поселен ли студент), city (Город). Для генерации примера базы данных написан генератор. Для запуска используйте команду:

./generator students.csv

или

./generator students.csv 1000

Число задает количество записей.

Парсер

Парсер выполнен с использованием программ flex и bison и способен распозновать корректные для него скрипты. Скрипт состоит из команд, разделенных точками с запятой. Каждая команда начинается с операции (select, insert, delete), далее идут параметры (first_name, last_name, group, settled, city) со своими значениями указанными через =. То есть для того, чтобы получить всех студентов из группы 210, нужно написать:

select group = 210;

Пробельные символы игнорируются. Для того, чтобы вывести всех, вместо параметров указывается ключевое слово all:

select all;

Insert требует всех параметров, в связи с чем insert all; работать не будет. Delete работает аналогично select.

delete all;
delete group=210 first_name = Изя;

Для того, чтобы запустить парсер, используйте команду:

./parser students.csv test_simple.dbq

Где test_simple.dbq представляет из себя простой скрипт:

select all;

Сервер

Сервер реализован с применением boost::asio. Сервер является асинхронным и способен поддерживать несколько подключений. Для остановки сервера просто напишите stop в консоли. Сервер для каждого подключения создает свой интерпретатор, загружает туда запрос и возвращает клиенту ответ. Клиент подключается к серверу и отправляет запрос (Запрос отправляется только тогда, когда ввод закончен. В консоли это Ctrl+D, для файла это EOF). Как только запрос отправлен, программа ловит ответ и завершает работу. Для того, чтобы протестировать сервер и клиент, запустите сначала сервер:

./server students.csv 4444

А потом клиент:

./client 127.0.0.1 4444

В клиент можно сразу передать файл скрипта:

./client 127.0.0.1 4444 < test_simple.dbq

studentsdb's People

Contributors

andrewche7 avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.