CS525 - Advanced Database Organization - 2020 Fall

Course webpage for CS525 - 2020 Fall taught by Boris Glavic

Programming Assignments

Organization

There will be several programming assignments during the course. Starting from a storage manager you will be implementing your own tiny database-like system from scratch. You will explore how to implement the concepts and data structures discussed in the lectures and readings. The assignments will require the use of skills learned in this course as well as other skills you have developed throughout your program. Each assignment will build upon the code developed during the previous assignment. In the end there will be an optional assignment for extra credit. Each of the regular assignments will have optional parts that give extra credit. All assignments have to be implemented using C. We will specify test cases for the assignments, but you are encouraged to add additional test cases. Detailed descriptions will be linked on this page once an assignment is handed out. In the end of the semester there will be a programming contest.

  • Assignment 1 - Storage Manager: Implement a storage manager that allows read/writing of blocks to/from a file on disk

  • Assignment 2 - Buffer Manager: Implement a buffer manager that manages a buffer of blocks in memory including reading/flushing to disk and block replacement (flushing blocks to disk to make space for reading new blocks from disk)

  • Assignment 3 - Record Manager: Implement a simple record manager that allows navigation through records, and inserting and deleting records

  • Assignment 4 - B+-Tree Index: Implement a disk-based B+-tree index structure

  • Optional Assignment Ideas - You can implement an optional assignment to get extra credits

Server Account

Every student will get an account on one of our servers (fourier.cs.iit.edu) that runs linux. You should use this account to test your code. The TAs will evaluate the code on this machine.

Docker image

We also provide a docker image for testing your code in a consistent virtualized environment. You can find more information here: https://github.com/IITDBGroup/cs525-docker.

Source Code Management and Handing in Assignments

The assignments will be completed in groups of three students. Groups will be determined in the first day of class.

For each group we create a repository and team on Github. Git is a distributed version control system. Good introductions to git are gitmagic and the official git documentation.

Once groups have been formed, you will receive an invitation to collaborate on a shared Github repository named cs525-f20-group. All your work in this class will be submitted via your shared private group repository on github. We will consider code submitted until midnight of the assignment deadline.

Grading of Assignments

The following criteria will be considered in the grading:

  • Functionality: Does the code do what it is supposed to do? All all tests completing successfully?

  • Documentation: How well documented is the code?

  • Code Organization: Is the structure of the code clear and suits the goal?

  • Inovation: Does the solution use new and innovative ideas?

We will check for plagiarism. Plagiarism will result in zero points for the assignment, potentially academic sanctions, and may result in an E grade.

Late policies:

  • 1-3 days late: -10% points

  • 4-7 days late: -20% points

  • > 7 days late: 0 points

Optional Assignment Ideas

This is not a comprehensive list. Suggest your own topic or contact the instructor for additional topics in a specific area.

  • Implement a standard operator algorithm on top of your record manager

    • nested loop join

    • merge join

    • sorting aggregate

    • hash aggregate

    • union

Stuff to get familiar with

  • See resources page for links to documentation and tutorials

  • *nix operating systems and C standard library

    • OS C-library: system calls for accessing and creating files or alternatively the C standard library file IO API

  • debuggers

    • gdb - gnu debugger and GUIs like DDD

    • LLDB - llvm's debugger

  • valgrind - debug memory errors

  • docker - optionally for testing your code in a virtualized environment