changeset 44: | 99d4ab4f8d53 |
parent: | 1ef551e24009 |
author: | Richard Westhaver <ellis@rwest.io> |
date: | Sun, 11 Aug 2024 01:50:18 -0400 |
permissions: | -rw-r--r-- |
description: | update |
39
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
1 | ;;; cl-simple-example.lisp --- Common Lisp port of rocksdb/examples/c_simple_example.c |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
2 | |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
3 | ;; ref: https://github.com/facebook/rocksdb/blob/main/examples/c_simple_example.c |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
4 | |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
5 | ;;; Usage: |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
6 | |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
7 | ;; To compile and run from the shell: |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
8 | #| |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
9 | sbcl --eval '(ql:quickload :rdb)' \ |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
10 | --eval '(ql:quickload :cli)' \ |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
11 | --eval '(compile-file "cl-simple-example.lisp")' \ |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
12 | --eval '(load "cl-simple-example.fasl")' \ |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
13 | --eval "(sb-ext:save-lisp-and-die \"cl-simple-example\" :toplevel #'cl-simple-example::main :executable t)" |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
14 | |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
15 | time ./cl-simple-example |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
16 | |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
17 | # real 0m0.030s |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
18 | # user 0m0.012s |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
19 | # sys 0m0.017s |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
20 | |# |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
21 | |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
22 | ;; Compare to C: |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
23 | #| |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
24 | # in rocksdb/examples |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
25 | gcc -lrocksdb c_simple_example.c -oc_simple_example |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
26 | |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
27 | time ./c_simple_example |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
28 | |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
29 | # real 0m0.021s |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
30 | # user 0m0.006s |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
31 | # sys 0m0.015s |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
32 | |# |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
33 | |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
34 | ;;; Code: |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
35 | (defpackage :examples/cl-simple-example-raw |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
36 | (:use :cl :std :cli :rdb :sb-alien :rocksdb) |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
37 | (:export :main)) |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
38 | |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
39 | (in-package :examples/cl-simple-example-raw) |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
40 | (declaim (optimize (speed 3))) |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
41 | |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
42 | (defparameter *num-cpus* (num-cpus) |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
43 | "CPU count.") |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
44 | |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
45 | (defparameter *db-path* "/tmp/rocksdb-cl-simple-example-raw") |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
46 | |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
47 | (defparameter *db-backup-path* "/tmp/rocksdb-cl-simple-example-backup-raw") |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
48 | |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
49 | (defmain () |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
50 | ;; open Backup Engine that we will use for backing up our database |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
51 | (let ((options (make-rocksdb-options |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
52 | (lambda (opt) |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
53 | (rocksdb-options-increase-parallelism opt *num-cpus*) ;; set # of online cores |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
54 | (rocksdb-options-optimize-level-style-compaction opt 0) |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
55 | (rocksdb-options-set-create-if-missing opt 1))))) |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
56 | (with-open-backup-engine-raw (be *db-backup-path* options) |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
57 | ;; open DB |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
58 | (with-open-db-raw (db *db-path* options) |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
59 | ;; put key-value |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
60 | (put-kv-str-raw db "key" "value") |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
61 | ;; get value |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
62 | (string= (get-kv-str-raw db "key") "value") |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
63 | ;; create new backup in a directory specified by *db-backup-path* |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
64 | (create-new-backup-raw be db)) |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
65 | ;; if something is wrong, you might want to restore data from last backup |
1ef551e24009
added musicbrainz db example
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
66 | (restore-from-latest-backup-raw be *db-path* *db-backup-path*)))) |