This repository contains the programming assignments for CS525. Students will implement a simple database-like system from scratch, exploring the implementation of concepts and data structures discussed in lectures and readings.
Each assignment builds upon the previous one, culminating in a comprehensive understanding and a functioning system by the end of the course. The assignments must be implemented using C.
- Assignment 1 - Storage Manager: Create a storage manager for reading/writing blocks to/from a file on disk.
- Assignment 2 - Buffer Manager: Develop a buffer manager to handle blocks in memory, including block replacement strategies.
- Assignment 3 - Record Manager: Implement a record manager for navigating, inserting, and deleting records.
- Assignment 4 - B+-Tree Index: Implement a disk-based B+-tree index structure.
Students may choose to undertake an optional assignment for extra credit. These assignments are designed to expand upon the skills and systems developed in the core assignments.
All students will be provided with an account on fourier.cs.iit.edu
for testing their code. The TAs will use this environment to evaluate submissions.
A docker image is available for creating a consistent testing environment. More details can be found here: cs525-docker.
Students will work in groups of three. Each group will receive a private repository named cs525-s23-group
on GitHub for collaboration and submission. Code must be submitted by midnight on the due date.
Assignments will be graded based on:
- Functionality: Completion of all specified tasks.
- Documentation: Clear and comprehensive documentation.
- Code Organization: Logical structuring of code.
- Innovation: Use of novel ideas and techniques.
Plagiarism will not be tolerated and will result in severe consequences.
- 1-3 days late: 10% deduction
- 4-7 days late: 20% deduction
- More than 7 days late: No credit
Suggestions for optional assignments include, but are not limited to, implementing standard operator algorithms like:
- Nested loop join
- Merge join
- Sorting aggregate
- Hash aggregate
- Union
Students should familiarize themselves with the following:
- *nix operating systems and C standard library
- System calls for file management
- Debugging tools like gdb, LLDB, and valgrind
- Docker for virtualized testing environments
The docker image for testing can be found at cs525-docker.
A resources page will be provided with links to relevant documentation and tutorials.