79 lines
3.1 KiB
Markdown
79 lines
3.1 KiB
Markdown
# 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](http://dbis.cs.tu-dortmund.de/cms/en/teaching/index.html) 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
|
|
* `cmake .`
|
|
* `make`
|
|
|
|
**OR**, if you prefer a separate `build` folder:
|
|
|
|
* `mkdir build && cd build`
|
|
* `cmake ..`
|
|
* `make`
|
|
|
|
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
|
|
|
|
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
|
|
-l --load Load SQL file into database.
|
|
-q --query Execute Query.
|
|
-c --console Run console after loading file or executing query.
|
|
--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.
|
|
--stats Print all execution statistics
|
|
|
|
## 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 (`scan.enable-index-scan`)
|
|
* Enable or disable usage of hash join (`join.enable-hash-join`)
|
|
|
|
## Non-SQL Commands
|
|
|
|
* `:explain [plan,graph]`: 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
|
|
|
|
## Examples
|
|
|
|
##### Import
|
|
`./beedb -l movies.sql`
|
|
|
|
##### Run a single query
|
|
`./beedb -q "SELECT * FROM movie;"`
|
|
|
|
##### Open the BeeDB Console
|
|
`./beedb`
|
|
|
|
##### Run a query and open console afterwards
|
|
`./beedb -q "SELECT * FROM movie;" -c`
|
|
|
|
# For developers
|
|
* If you want to commit to the repository please `make git-hook` before commit.
|
|
|
|
# Credits
|
|
* Thanks to Hyrise for the SQL parser (MIT, [See on GitHub](https://github.com/hyrise/sql-parser))
|
|
* Thanks to p-ranav for argparse (MIT, [See on GitHub](https://github.com/p-ranav/argparse))
|