1 / 8

Elephant: Easy Persistence, Dynamic Indexing, and Flexible Repository Integration

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.

zea
Télécharger la présentation

Elephant: Easy Persistence, Dynamic Indexing, and Flexible Repository Integration

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. 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>)

  3. 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

  4. Multi-platfom • Supported by LISP: SBCL, ACL, LispWorks, OpenMCL • Different Oses: Linux, Mac, Windows • Works on 64 bit architectures • Repository flexibility

  5. 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

  6. 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

  7. Indexing decisions changeable • Don't optimize prematurely...index a slot when you need to • Functional indexes provide lots of power

  8. 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, .....

More Related