This project is based on SimpleDB, a multi-user transactional database server written in Java. SimpleDB is developed by Edward Sciore (Boston College), and the code is an integral part of a textbook Database Design and Implementation (Second Edition) he published with Springer. You should be able to access an e-copy from the NUS Library.
Unlike a full-fledged DBMS like MySQL or PostgreSQL, SimpleDB is intended as a teaching tool to facilitate the learning experience of a database system internal course. As such, the system implements only the basic functionalities of a “complete” database system. For example, it supports a very limited subset of SQL (and JDBC) and algorithms, offers little or no error checking, and is not designed for optimal performance/efficiency. However, the code is very well structured so that it is relatively easy to learn, use and extend SimpleDB.
This project will focus primarily on query processing (and related topics, e.g., parser, indexing, etc) for a single user. Disk/memory management, transaction management (concurrency control and logging), failures (recovery management), multi-user setting are not considered.
This is an implementation of a simple SPJ (Select-Project-Join) query engine to illustrate query processing in a modern relational database management system. The link to our full report can be found here.
- Block Nested Loop Join
- Sort Merge Join based on Sort
- Distinct based on Sort
- GroupBy based on Sort
- OrderBy based on Sort
- Identified and fixed the following bugs/limitations in the SPJ engine given:
- If the table's tuple size is bigger than the buffer size, SPJ goes to infinity loop.
- If the query does not involve join, the SPJ does not require the user to input the number of buffers.
- If a join query involves more than one join condition on two same tables, the number of tuples is higher than expected.
Click here for more details regarding the project requirement.