Theory and Practice of Transactional Method Caching
<|reference_start|>Theory and Practice of Transactional Method Caching: Nowadays, tiered architectures are widely accepted for constructing large scale information systems. In this context application servers often form the bottleneck for a system's efficiency. An application server exposes an object oriented interface consisting of set of methods which are accessed by potentially remote clients. The idea of method caching is to store results of read-only method invocations with respect to the application server's interface on the client side. If the client invokes the same method with the same arguments again, the corresponding result can be taken from the cache without contacting the server. It has been shown that this approach can considerably improve a real world system's efficiency.   This paper extends the concept of method caching by addressing the case where clients wrap related method invocations in ACID transactions. Demarcating sequences of method calls in this way is supported by many important application server standards. In this context the paper presents an architecture, a theory and an efficient protocol for maintaining full transactional consistency and in particular serializability when using a method cache on the client side. In order to create a protocol for scheduling cached method results, the paper extends a classical transaction formalism. Based on this extension, a recovery protocol and an optimistic serializability protocol are derived. The latter one differs from traditional transactional cache protocols in many essential ways. An efficiency experiment validates the approach: Using the cache a system's performance and scalability are considerably improved.<|reference_end|>
@article{pfeifer2005theory,
    title={Theory and Practice of Transactional Method Caching},
    author={Daniel Pfeifer and Peter C. Lockemann},
    journal={arXiv preprint arXiv:cs/0503022},
    year={2005},
    number={2005-9},
    archivePrefix={arXiv},
    eprint={cs/0503022},
    primaryClass={cs.DB}
}