I recently started reading Transactional Information Systems: Theory, Algorithms, and the Practice of Concurrency Control by Gerhard Weikum and Gottfried Vossen, and I've been enjoying it very much. I'm not in the practice of writing transactional engines, but as a developer, transactions are one of the core concepts I need to use and apply effectively in order to write correct systems. With the emphasis today in writing distributed n-tier applications, this is a topic that is even more important in my opinion.
A couple of years ago I read Transaction Processing: Principles and Techniques by Jim Gray and Andreas Reuter, which I also enjoyed quite a bit, particularly the historical notes at the end of each chapter, which for me put a lot of things into perspective and makes for a really nice review of the history of transactions and transaction monitors and databases.
There are two basic things, to me, that difference the two books:
- The Gray/Reuter book is, in a sense, more practically oriented, in the sense that feels a lot like a book aimed at writing transaction monitors and database engines: it is full of actual code examples (in good ol' C and SQL). It is, to me, one of the appealing aspects of the book, and it makes it much easier to understand some of the deeper concepts presented in the book. The Weikum/Vossen, on the othe other hand, gives, I believe, more focus on presenting algorithms for transaction processing systems in a more abstract fashion. For example, the first few chapters focus a lot on presenting a theoretical, mathematical model for transactions.
- The Gray/Reuter book, for obvious historical reasons, focuses a lot on the kinds of transactional systems that were in use at the time, including big discussions on database systems primarily and things like transactions from terminals. The Weikum/Vossen book presents a much wider perspective, including discussions not only on databases, but also on other applications of transaction concepts, such as transactional object systems, workflows and long running transactions in a more practical setting.