Next: Using Cursors, Previous: Using Transactions, Up: Tutorial
The btree
class are to hash-tables as persistent-objects are to
ordinary objects. BTrees have a hash-table-like interface, but store
their keys and values directly as rows in a Sleepycat BTree. Btrees
may be persisted simply by their OID. Hence they have all the nice
properties of persistent objects: identity, fast serialization /
deserialization, no merge conflicts.....
* (defvar *friends-birthdays* (make-btree)) => *FRIENDS-BIRTHDAYS* * (add-to-root "friends-birthdays" *friends-birthdays*) => #<BTREE {4951CF6D}> * (setf (get-value "Andrew" *friends-birthdays*) (encode-universal-time 0 0 0 22 12 1976)) => 2429071200 * (setf (get-value "Ben" *friends-birthdays*) (encode-universal-time 0 0 0 14 4 1976)) => 2407298400 * (get-value "Andrew" *friends-birthdays*) => 2429071200 => T * (decode-universal-time *) => 0 0 0 22 12 1976 2 NIL 6
Because of serialization semantics, BTrees hash on a value, not identity. This is probably ok for strings, numbers, and persistent things, but may be strange for other values.