80 likes | 171 Views
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. Persistent Classes. (defpclass friend () ((name :accessor name :initarg :name) (birthday :initarg :birthday))
E N D
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
Persistent Classes (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>)
User API PersistentSlots PSET ClassIndexing DCM BTree MOP Serializer Memutils/UFFI Data Store Interface and Utilities db-bdb db-postmodern db-clsql db-lisp BerkeleyDB PostgreSQL SQLite 3rd party User API Ready to integrate Internal TBD
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, .....