This textbook examines database systems from the viewpoint of a software developer. This perspective makes it possible to investigate why database systems are the way they are. It is of course important to be able to write queries, but it is equally important to know how they are processed. We e.g. don’t want to just use JDBC; we also want to know why the API contains the classes and methods that it does. We need a sense of how hard is it to write a disk cache or logging facility. And what exactly is a database driver, anyway? The first two chapters provide a brief overview of database systems and their use. Chapter 1 discusses the purpose and features of a database system and introduces the Derby and SimpleDB systems. Chapter 2 explains how to write a database application using Java. It presents the basics of JDBC, which is the fundamental API for Java programs that interact with a database. In turn, Chapters 3-11 examine the internals of a typical database engine. Each chapter covers a different database component, starting with the lowest level of abstraction (the disk and file manager) and ending with the highest (the JDBC client interface); further, the respective chapter explains the main issues concerning the component, and considers possible design decisions. As a result, the reader can see exactly what services each component provides and how it interacts with the other components in the system. By the end of this part, s/he will have witnessed the gradual development of a simple but completely functional system. The remaining four chapters then focus on efficient query processing, and focus on the sophisticated techniques and algorithms that can replace the simple design choices described earlier. Topics include indexing, sorting, intelligent buffer usage, and query optimization. This text is intended for upper-level undergraduate or beginning graduate courses in Computer Science. It assumes that the reader is comfortable with basic Java programming; advanced Java concepts (such as RMI and JDBC) are fully explained in the text. The respective chapters are complemented by “end-of-chapter readings” that discuss interesting ideas and research directions that went unmentioned in the text, and provide references to relevant web pages, research articles, reference manuals, and books. Conceptual and programming exercises are also included at the end of each chapter. Students can apply their conceptual knowledge by examining the SimpleDB (a simple but fully functional database system created by the author and provided online) code and modifying it.
Great book if you're following along with either your own implementation or the Java codebase from the book. Read this as part of Phil Eaton's software internals book club: https://eatonphil.com/bookclub.html
It was cool to have the author himself as part of the book club, thanks Edward Sciore.
The material is definitely not holistic nor up to date with what is going on in the world of database engineering, but I think as a pedagogical tool for getting acquainted with DB's as a first brush it is fantastic. Each chapter gives you just enough on the topic to get some basic grounding and a basic API design to go along with that part of the DB. I think the code is meant to be intentionally naive, it is really just there to provide the building blocks for composing a simple DB, and you can extend it/redesign it as you like when you do your own coding.
TL;DR maybe not the best if you already know a lot about DB internals, but for a newcomer I think it was great.
Most comprehensive and detailed book I found so far on relational database design and implementation. All the way from theory to actual running code in java. The other books mostly lack the details code and software engineering perspective in implementation which this one provided. Recommended.
The depth of the topics covered makes this a challenging read to fully grasp in a single pass. The book demands—and deserves—repeated readings to truly absorb its insights. A compelling choice for anyone serious about understanding the fundamental mechanics of database systems.