Thor is an object-oriented database system designed for use in a heterogeneous distributed environment. It provides highly-reliable and highly-available persistent storage for objects, and supports safe sharing of these objects by applications written in different programming languages. Safe heterogeneous sharing of long-lived objects requires encapsulation: the system must guarantee that applications interact with objects only by invoking methods. Although safety concerns are important, most object-oriented databases forgo safety to avoid paying the associated performance costs. This paper gives an overview of Thor's design and implementation. We focus on two areas that set Thor apart from other object-oriented databases. First, we discuss safe sharing and techniques for ensuring it; we also discuss ways of improving application performance without sacrificing safety. Second, we describe our approach to cache management at client machines, including a novel adaptive prefetching strategy. The paper presents performance results for Thor, on several OO7 benchmark traversals. The results show that adaptive prefetching is very effective, improving both the elapsed time of traversals and the amount of space used in the client cache. The results also show that the cost of safe sharing can be negligible; thus it is possible to have both safety and high performance.
Safe sharing is a desirable feature of an object oriented database because it protects valuable database objects from program errors in application code. It is especially desirable in a heterogeneous environment in which applications are written in various programming languages, many of which have unsafe features. However, safe sharing is not without its potential performance costs. This paper explores these costs. It describes a number of techniques that improve performance without sacrificing safety, and presents results of experiments that evaluate their effectiveness. The results show that some of these techniques are very promising, allowing safe sharing to be achieved with essentially no performance penalty.