80 likes | 172 Vues
Elephant is a user-friendly and robust persistence solution in Lisp that offers dynamic indexing, functional indexes, and seamless integration with various repositories like BDB, PostgreSQL, and SQLite3. It provides a simple API with powerful features such as schema changes and multi-platform compatibility. Elephant supports different operating systems and architectures, enabling smooth migration between repositories and flexible repository decisions. The future enhancements aim to enhance schema changes, improve serialization for better performance, and optimize PostgreSQL usage with postmodern. Start using Elephant for hassle-free persistence management in your Lisp projects.
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, .....