changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > demo / annotate examples/db/cl-simple-example-raw.lisp

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