https://github.com/gcv/cupboard
Cupboard — an embedded database for Clojure
https://github.com/gcv/cupboard
Last synced: about 1 year ago
JSON representation
Cupboard — an embedded database for Clojure
- Host: GitHub
- URL: https://github.com/gcv/cupboard
- Owner: gcv
- License: mit
- Created: 2009-10-12T16:56:11.000Z (almost 17 years ago)
- Default Branch: master
- Last Pushed: 2012-12-31T08:14:52.000Z (over 13 years ago)
- Last Synced: 2023-03-10T20:23:03.999Z (over 3 years ago)
- Language: Clojure
- Homepage:
- Size: 479 KB
- Stars: 83
- Watchers: 3
- Forks: 8
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-java - Cupboard
README
Cupboard is an embedded database library for Clojure, intended to make writing
Clojure objects to disk, and retrieving them, a relatively simple task. Cupboard
is almost completely schemaless, supports unique and non-unique indices,
querying by one or more indices, and ACID transactional semantics.
At its lowest level, Cupboard uses Berkeley DB JE, and contains a fairly
complete Clojure wrapper for the JE API. This API is available in the
`cupboard.bdb.je` package; some projects may find this code useful on its
own. The `cupboard.core` package provides a higher-level abstraction.
## Sample Code
This code makes some struct-maps representing books, saves them into a database,
and updates them.
(ns examples.cupboard.simple
(:use clojure.contrib.pprint)
(:require [cupboard.core :as cb])
(:use [cupboard.utils]))
(cb/open-cupboard! "/tmp/books")
(cb/defpersist book
((:isbn :index :unique)
(:title :index :any)
(:author :index :any)))
(cb/make-instance book ["0393039854", "The First Folio", "Shakespeare, William"])
(cb/make-instance book ["0393925870", "The Canterbury Tales", "Chaucer"])
(cb/make-instance book ["143851557X", "Troilus and Criseyde", "Chaucer"])
(cb/make-instance book ["019280619X", "Paradise Lost", "Milton, John"])
(println "this returns maps")
(pprint (cb/query (starts-with :isbn "039")))
(println "this returns struct-map values")
(pprint (cb/query (= :author "Chaucer") :struct book))
(println "this updates the :author slot")
(cb/query (= :author "Chaucer")
:callback #(cb/passoc! % :author "Chaucer, Geoffrey"))
(println "this verifies that the update worked")
(pprint (cb/query (starts-with :author "Chaucer")))
(cb/close-cupboard!)
This example is available in `examples/examples/cupboard/simple.clj`.
`examples/examples/cupboard/gutenberg.clj` uses a few more of Cupboard's features.
## Dependencies
* Clojure 1.4.0
* Leiningen
## Getting Started
Just add `[cupboard "1.0beta1"]` to your `project.clj`. Alternatively, add the
following to your `pom.xml` file:
cupboard
cupboard
1.0beta1
## Documentation
Cupboard's documentation is still a work in progress. Please refer to the `doc`
directory in the source distribution.
## License
Cupboard is distributed under the MIT license, and so has few restrictions
itself. Its Berkeley DB dependency, however, is licensed by Oracle — see
[Oracle's Berkeley DB Licensing Information
page](http://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html)
for details.