CMSC828N: Database System Architecture and Implementation
Prof. Daniel Abadi; AVW 3258; Mon-Wed 2:00pm-3:15pm
Office Hours:Immediately after class or by appointment.
Background Expectations:The pre-requisite for this course is an introductory database course such as CMSC 424.
Learning Goals:This course is designed to prepare you for systems architecture innovation, with a particular focus on database systems. This ability to innovate is critical in both academic and industrial research and also in any technical leadership position you may obtain after you graduate. After attending the course, you should be able to read, understand, and hopefully critique proposed systems designs, especially those proposed in published technical whitepapers and research publications (e.g., most papers in database conferences like SIGMOD/VLDB/OSDI/SOSP).
Given a new application domain, you should also be able to ask the right questions to understand the key systems architecture issues, and be able to design/suggest appropriate solutions.
You should also be able to identify flaws (if any) with a proposed design or solution. You should also be able to devise and reason about abstraction (independence) layers and their applicability to the application domain. You should also have enough familiarity with how big data systems are built to be able to easily start using any of them, and reason about the observed performance of a deployed system, if only superficially.
Readings:Many classes will be based on research papers. All papers will be linked to from the course schedule; however, in many cases you will need to access from a UMD IP address for free access to the paper. There is not enough time to cover every part of every reading in class, but you will be responsible for reading and understanding that material outside class.
Assignments:In the first half of the course, there will be 2 or 3 database implementation programming assignments. These assignments are designed to give you experience building parts of database systems. All assignments will be written in C++.
In the second half of the course, you will submit a 1/2 page "reaction" for each paper that we will read in the second half of the course. The purpose of the reviews is to make sure that everyone has read the paper before coming to class (lectures are really boring if nobody has read the paper) and will allow us to avoid having to have a final exam in the course. The reactions should discuss any weaknesses that you found in the paper, or questions that you feel are unanswered. You will be graded based on how "deep" your comments/critisicms/questions are. Basically, the more you demonstrate that you have thought about the paper, the better your grade will be.
Depending on the size of the class, four-six classes will be devoted to student paper presentations (the second half of the course will be taught "seminar-style").
A final project is due at the end of the course. This is designed to be a "mini- research project", something that could theoretically be extended into a publishable research paper if the student is motivated to do a significant amount of additional work after the course finishes. Some suggestions for final projects will be made available from the course Website.
Grades:Programming Assignments: 15%
1/2 paper "reactions": 15%
Class participation: 10%
Paper presentation: 5%
Midterm Exam: 30%
Final project: 25%