1 / 8

Elephant: Easy Persistence

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

zea
Download Presentation

Elephant: Easy Persistence

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