/[cl-prevalence]/public_html/index.html
ViewVC logotype

Contents of /public_html/index.html

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.6 - (show annotations)
Thu Jul 8 19:59:14 2004 UTC (9 years, 9 months ago) by scaekenberghe
Branch: MAIN
CVS Tags: HEAD
Changes since 1.5: +18 -4 lines
File MIME type: text/html
added some personal info
as well as a reference to a paper
1 <?xml version="1.0"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5 <head>
6 <title>CL-PREVALENCE</title>
7 <link rel="stylesheet" type="text/css" href="style.css"/>
8 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
9 </head>
10
11 <body>
12 <div class="header">
13 <h1>CL-PREVALENCE</h1>
14 </div>
15
16 <p>
17 CL-PREVALENCE is an implementation of <a href="http://www.prevayler.org">Object Prevalence</a> for Common Lisp.
18 It was written by and is being maintained by <a href="http://homepage.mac.com/svc">Sven Van Caekenberghe</a>.
19 CL-PREVALENCE is using <a href="http://common-lisp.net/project/s-xml">S-XML</a> for the XML serialization
20 protocol (there is also a more Lisp-like s-expression-based serialization protocol).
21 </p>
22
23 <p>
24 Object Prevalence is a simple but interesting concept first proposed by Klaus Wuestefeld in 2001.
25 IBM developerWorks has a reasonable
26 <a href="http://www-106.ibm.com/developerworks/library/wa-objprev/">Introduction to Object Prevalence</a> article.
27 The main Java implementation is called <a href="http://www.prevayler.org">Prevayler</a>,
28 with a (chaotic) wiki site with lots of information and discussions.
29 The following academic paper seems to describe the most essential features of Object Prevalence, without naming it as such:
30 <a href="http://birrell.org/andrew/papers/024-DatabasesPaper.pdf">A Simple and Efficient Implementation for Small Databases</a>
31 by Birrell, Jones, and Wobber [1987].
32 Basically, the idea is this:
33 </p>
34 <ul>
35 <li>Most databases are only a couple of hundreds of megabytes big, often even less.</li>
36 <li>Most computers can easily take a couple of hundreds of megabytes of data in RAM, big servers can hold many gigabytes.</li>
37 <li>Mapping objects to databases is at least tedious and time consuming, but often also complex and error prone.</li>
38 <li>Let's throw away the database and just consider the domain model objects as the database.</li>
39 <li>Let's make sure we can serialize and deserialize our objects to and from a some presistent medium such as a file system.</li>
40 <li>If we store our complete set of domain model objects to a persistent medium we create a <em>snapshot</em>.</li>
41 <li>We query by using the data structure manipulation functionality of our programming language, running from RAM, queries will be extremely fast.</li>
42 <li>Let's agree to only change our object model using transaction objects that combine the data and the functionality to execute the transaction.</li>
43 <li>In order to preserve the ACID properties of our system, we log each transaction to some persistent medium by serializing it after we execute it. The is called the <em>transaction log</em>.</li>
44 <li>When the system goes down (intentionally or unintentionally) we restore its latest state by first reading in the latest snapshot and by re-executing each transaction from the transaction log.</li>
45 <li>Transactions must be deterministic and re-entrant (so they also need to record the current time if necessary).</li>
46 <li>In a multi-threaded system, transactions are globally serialized.</li>
47 </ul>
48 <p>
49 That is all there is to the concept of object prevalence. Here are some more details as well as some advantages and limitations:
50 </p>
51 <ul>
52 <li>A good implementation on a modern machine can achieve thousands of transactions per second, and recover them at about the same speed.</li>
53 <li>Transactions must be short because they block the system - since everything is in RAM this is not a problem.</li>
54 <li>Queries that need to see a completely consistent system state must also block on the system - other less critical queries could run in parallel.</li>
55 <li>It is practical for a transaction to first check its preconditions, throw an error if necessary, and to only modify the system when everything is consistent. During a transaction you are the sole active thread. Queries are as fast as they can get. In this implementation transactions are logged after succesful execution.</li>
56 <li>In this implementation there is an option to do a rollback (by doing a system restore) when an unexpected error occurs during transaction execution. You can specifiy that a condition doesn't need a rollback when it occurs inside a transaction by implementing the <tt>initiates-rollback</tt> to return false (or by using the <tt>no-rollback-error</tt> condition or inheriting from it).</li>
57 <li>Long running transactions are an open question.</li>
58 <li>Application server techniques are used to offer multiple clients access to the same prevalence system.</li>
59 <li>We can easily do replication (and query load balancing) by distributing the master transaction log stream to replica's that can host queries, execute backups (snapshots) or serve as hot fail-over. This implementation does not yet contain replication.</li>
60 </ul>
61 <p>
62 This code was written by Sven Van Caekenberghe.
63 </p>
64
65 <h3>Download</h3>
66
67 <p>
68 You can download the LLGPL source code and documentation as <a href="cl-prevalence.tgz">cl-prevalence.tgz</a>
69 (signature: <a href="cl-prevalence.tgz.asc">cl-prevalence.tgz.asc</a> for which the public key can be found
70 in the <a href="http://common-lisp.net/keyring.asc">common-lisp.net keyring</a>)
71 (build and/or install with ASDF).
72 There is also <a href="http://common-lisp.net/cgi-bin/viewcvs.cgi/?cvsroot=cl-prevalence">CVS</a> access.
73 </p>
74
75 <h3>API</h3>
76
77 <p>
78 You can consult the LispDoc generated API is the files <a href="CL-PREVALENCE.html">CL-PREVALENCE.html</a>
79 and <a href="S-SERIALIZATION.html">S-SERIALIZATION.html</a>.
80 </p>
81
82 <h3>Release History</h3>
83
84 <ul>
85 <li>release 3, today: move to common-lisp.net, added s-expression based serialization</li>
86 <li>release 2, Januari 13, 2004: added managed-prevalence layer, generic persistent preferences and a blob feature, as well as several useful functions to support development and deployment</li>
87 <li>release 1, June 10, 2003: first public release</li>
88 </ul>
89
90 <h3>Mailing Lists</h3>
91
92 <ul>
93 <li><a href="http://common-lisp.net/mailman/listinfo/cl-prevalence-cvs">CL-PREVALENCE-CVS mailing list info</a></li>
94 <li><a href="http://common-lisp.net/mailman/listinfo/cl-prevalence-devel">CL-PREVALENCE-DEVEL mailing list info</a></li>
95 <li><a href="http://common-lisp.net/mailman/listinfo/cl-prevalence-announce">CL-PREVALENCE-ANNOUNCE mailing list info</a></li>
96 </ul>
97
98 <p>CVS version $Id: index.html,v 1.6 2004/07/08 19:59:14 scaekenberghe Exp $</p>
99
100 <div class="footer">
101 <p>Back to <a href="http://common-lisp.net/">Common-lisp.net</a>.</p>
102 </div>
103
104 <div class="check">
105 <a href="http://validator.w3.org/check/referer">Valid XHTML 1.0 Strict</a>
106 <a href="http://jigsaw.w3.org/css-validator/check/referer">Valid CSS</a>
107 </div>
108 </body>
109 </html>

  ViewVC Help
Powered by ViewVC 1.1.5