This repository has been archived on 2024-12-04. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
Roland Kühn f68724c7b9 Fixed typo and alignment issues on aarch64 2022-04-10 16:28:28 +02:00
include Fixed typo and alignment issues on aarch64 2022-04-10 16:28:28 +02:00
lib Initial commit. 2022-04-04 20:25:01 +02:00
src Fixed typo and alignment issues on aarch64 2022-04-10 16:28:28 +02:00
.clang-format Initial commit. 2022-04-04 20:25:01 +02:00
.gitignore Initial commit. 2022-04-04 20:25:01 +02:00
.pre-commit-hook Initial commit. 2022-04-04 20:25:01 +02:00
CMakeLists.txt Initial commit. 2022-04-04 20:25:01 +02:00
LICENSE Initial commit. 2022-04-04 20:25:01 +02:00
README.md Initial commit. 2022-04-04 20:25:01 +02:00
beedb.ini Initial commit. 2022-04-04 20:25:01 +02:00
logo.png Added logo. 2022-04-04 20:25:49 +02:00

README.md

BeeDB

BeeDB is a software project that teaches students the architecture and implementation of DataBase Management Systems. This project is related to the Basic Module Architecture & Implementation of DBMS. The course is usually teached every summer term, see dbis page of TU Dortmund for more information.

Attention: Please do not publish and share your solution with other students!

Dependencies

  • git
  • cmake (at least version 3.9)
  • build-essential
  • bison and flex

How to build

Option (a): Build into current folder:

  • cmake .
  • make

Option (b): Build into separate build folder:

  • mkdir build && cd build
  • cmake ..
  • make

Switch between Release and Debugmodes

  • Default build is in Debug mode.
  • If you want to build in Release mode use:
    • cmake . -DCMAKE_BUILD_TYPE=Release
    • or set CMAKE_BUILD_TYPE in CMakeLists.txt.

How to use

BeeDB uses a client/server model where the executable beedb starts the server and beedb_client runs a client.

Server

Usage: beedb [options] db-file 

Positional arguments:
db-file                      	File the database is stored in. Default: bee.db

Optional arguments:
-h --help                    	show this help message and exit
-p --port                    	Port of the server
-l --load                    	Load SQL file into database.
-q --query                   	Execute Query.
-cmd --custom_command        	Execute custom command and exit right after.
-k --keep                    	Keep server running after executing query, command or loading a file.
-c --client                  	Start an additional client next to the server
--buffer-manager-frames      	Number of frames within the frame buffer.
--scan-page-limit            	Number of pages the SCAN operator can pin at a time.
--enable-index-scan          	Enable index scan and use whenever possible.
--enable-hash-join           	Enable hash join and use whenever possible.
--enable-predicate-push-down 	Enable predicate push down and use whenever possible.
--stats                      	Print all execution statistics

Client

Usage: beedb_client [options] host 

Positional arguments:
host      	Name or IP of the beedb server

Optional arguments:
-h --help 	show this help message and exit
-p --port 	Port of the server

Please note!

Just stopping the server by killing (or Ctrl-C) crashes the server; you may loose (unflushed) data. To stop the server clean, use :stop command by a client.

Configuration

Some configuration outside the console arguments is stored in the file beedb.ini.

  • The number of pages stored as frames in the buffer manager (buffer manager.frames)
  • The replacement strategy of frames in the buffer manager (buffer manager.strategy)
  • The k parameter for LRU-K replacement strategy (buffer manager.k)
  • The number of how many pages can be pinned by a scan at a time (scan.page-limit)
  • Enable or disable usage of index scan (optimizer.enable-index-scan)
  • Enable or disable usage of hash join (optimizer.enable-hash-join)
  • Enable or disable predicate push down (optimizer.enable-predicate-push-down)

Non-SQL Commands

Despite SQL commands, you can use the following special commands from the client.

  • :explain <query>: prints the query plan, either as a table or a graph (a list of nodes and edges)
  • :get <option-name>: prints either all or the secified option of the database configuration
  • :set <option-name> <numerical-value>: changes the specified option. Only numerical values are valid
  • :show [tables,indices,columns]: A quick way to show available tables, their columns or indices
  • :stop: Stops the server (and flushes all data to the disk).

Examples

Import and SQL file (containing CREATE and INSERT)

./beedb -l movies.sql

Run a single query and terminate

./beedb -q "SELECT * FROM movie;"

Run a query and open console afterwards

./beedb -q "SELECT * FROM movie;" -c

Start the BeeDB server only (connect clients later)

./beedb

Start the BeeDB server and open a client console

./beedb -c

Start a BeeDB client (you can start multiple ones)

./beedb_client

For developers

  • If you want to commit to the repository please make git-hook before commit.

Credits

  • Thanks to p-ranav for argparse (MIT license, See on GitHub).
  • Thanks to antirez for linenoise (BSD license, See on Github).
  • Thanks to nlohmann and further contributors for nlohmann_json (MIT license, See on GitHub).