[ANN] Common Lisp Prevalence
Sven Van Caekenberghe <[email protected]>
| Newsgroups | gmane.lisp.clump |
|---|---|
| Message-ID | <[email protected]> |
Today, I released the first version of 'Common Lisp Prevalence', a proof of concept implementation of Object Prevalence for Common Lisp. See http://homepage.mac.com/svc/prevalence/readme.html Object Prevalence ( http://www.advogato.org/article/398.html ) is a simple but interesting concept first proposed by Klaus Wuestefeld in 2001. Basically, the idea is this: - Most databases are only a couple of hundreds of megabytes big, often even less. - Most computers can easily take a couple of hundreds of megabytes of data in RAM, big servers can hold many gigabytes. - Mapping objects to databases is at least tedious and time consuming, but often also complex and error prone. - Let's throw away the database and just consider the domain model objects as the database. - Let's make sure we can serialize and deserialize our objects to and from a some presistent medium such as a file system. - If we store our complete set of domain model objects to a persistent medium we create a snapshot. - We query by using the data structure manipulation functionality of our programming language, running from RAM, queries will be extremely fast. - Let's agree to only change our object model using transaction objects that combine the data and the functionality to execute the transaction. - 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 transaction log. - 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. - Transactions must be deterministic and re-entrant (so they also need to record the current time if necessary). - In a multi-threaded system, transactions are globally serialized. Sven