elephant: easy persistence no orms at all very easy to use apis: btree, persistent sets, and clos...
TRANSCRIPT
Elephant: Easy Persistence
• No ORMs at all
• Very easy to use APIs: btree, persistent
sets, and CLOS integration
• Dynamic index creation on slots
• Functional indexes
(defpclass friend ()
((name :accessor name :initarg :name)
(birthday :initarg :birthday))
(:index t))
=> #<PERSISTENT-METACLASS FRIEND>
(make-instance 'friend :name "Carlos" :birthday (encode-birthday '(1 1 1972)))
(make-instance 'friend :name "Adriana" :birthday (encode-birthday '(24 4 1980)))
(make-instance 'friend :name "Zaid" :birthday (encode-birthday '(14 8 1976)))
NOW SOMEONE TRIPS OVER THE POWER CORD...
Restart your LISP and do:
(get-instances-by-class 'friends)
=> (#<Carlos> #<Adriana> #<Zaid>)
(mapclass #'(format t " name: ~A birthdate: ~A~%" (name friend) (birthday friend)) 'friend)
name: Carlos birthdate: (1 1 1972)
name: Adriana birthdate: (24 4 1980)
name: Zaid birthdate: (14 8 1976)
=> (#<Carlos> #<Adriana> #<Zaid>)
Persistent Classes
PSETClass
Indexing
Persistent
SlotsBTree
Serializer Memutils/UFFI
MOP
User API
Data Store Interface and Utilities
db-bdb db-postmodern db-clsql db-lisp
BerkeleyDB PostgreSQL SQLite
DCM
User API
Internal
Ready to integrate
TBD
3rd party
Multi-platfom
• Supported by LISP: SBCL, ACL,
LispWorks, OpenMCL
• Different Oses: Linux, Mac, Windows
• Works on 64 bit architectures
• Repository flexibility
Late binding of repository
decisions• Multiple Repositories (3 tested, but more
should be possible via CL-SQL)
• Tested migration between repositories
• Repository usage and migration flexible
enough that engineering decisions about
repos are independent of Elephant
Repositories
• BDB: fast, not free for a website unless
open-source
• Postgres: slower, liberal license, very
solid and well-supported
• SQLite3: fast, good for protyping
• Start on X, move to Y
Indexing decisions changeable
• Don't optimize prematurely...index a slot
when you need to
• Functional indexes provide lots of power
The Future
• Schema changes (changing a persistent classes slots)
should be improved
• Pure-lisp solution would allow prototyping (and maybe
more) with even less installation hassle
• Improving the serializer improves performance on
every repository
• Better postgres usage with postmodern
• Query languages, Prevalence, .....