changelog shortlog graph tags branches changeset file revisions annotate raw help

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

revision 39: 1ef551e24009
parent 38: 8259376eee11
child 40: 6b652d7d6663
     1.1--- a/examples/db/cl-simple-example.lisp	Fri Dec 29 00:45:44 2023 -0500
     1.2+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3@@ -1,66 +0,0 @@
     1.4-;;; cl-simple-example.lisp --- Common Lisp port of rocksdb/examples/c_simple_example.c
     1.5-
     1.6-;; ref: https://github.com/facebook/rocksdb/blob/main/examples/c_simple_example.c
     1.7-
     1.8-;;; Usage: 
     1.9-
    1.10-;; To compile and run from the shell:
    1.11-#|
    1.12-sbcl --eval '(ql:quickload :rdb)' \
    1.13-     --eval '(ql:quickload :cli)' \
    1.14-     --eval '(compile-file "cl-simple-example.lisp")' \
    1.15-     --eval '(load "cl-simple-example.fasl")' \
    1.16-     --eval "(sb-ext:save-lisp-and-die \"cl-simple-example\" :toplevel #'cl-simple-example::main :executable t)"
    1.17-
    1.18-time ./cl-simple-example
    1.19-
    1.20-# real	0m0.030s
    1.21-# user	0m0.012s
    1.22-# sys	0m0.017s
    1.23-|#
    1.24-
    1.25-;; Compare to C:
    1.26-#|
    1.27-# in rocksdb/examples
    1.28-gcc -lrocksdb c_simple_example.c -oc_simple_example
    1.29-
    1.30-time ./c_simple_example
    1.31-
    1.32-# real	0m0.021s
    1.33-# user	0m0.006s
    1.34-# sys	0m0.015s
    1.35-|#
    1.36-
    1.37-;;; Code:
    1.38-(defpackage :examples/cl-simple-example
    1.39-  (:use :cl :std :cli :rdb :sb-alien :rocksdb)
    1.40-  (:export :main))
    1.41-
    1.42-(in-package :examples/cl-simple-example)
    1.43-(declaim (optimize (speed 3)))
    1.44-
    1.45-(defvar *num-cpus* (alien-funcall (extern-alien "sysconf" (function int int)) sb-unix:sc-nprocessors-onln)
    1.46-  "CPU count.")
    1.47-
    1.48-(defparameter *db-path* "/tmp/rocksdb-cl-simple-example")
    1.49-
    1.50-(defparameter *db-backup-path* "/tmp/rocksdb-cl-simple-example-backup")
    1.51-
    1.52-(defmain ()
    1.53-  ;; open Backup Engine that we will use for backing up our database
    1.54-  (let ((options (make-rocksdb-options 
    1.55-                  (lambda (opt)
    1.56-                    (rocksdb-options-increase-parallelism opt *num-cpus*) ;; set # of online cores
    1.57-                    (rocksdb-options-optimize-level-style-compaction opt 0)
    1.58-                    (rocksdb-options-set-create-if-missing opt 1)))))
    1.59-  (with-open-backup-engine-raw (be *db-backup-path* options)
    1.60-    ;; open DB
    1.61-    (with-open-db-raw (db *db-path* options)
    1.62-      ;; put key-value
    1.63-      (put-kv-str-raw db "key" "value")
    1.64-      ;; get value
    1.65-      (string= (get-kv-str-raw db "key") "value")
    1.66-      ;; create new backup in a directory specified by *db-backup-path*
    1.67-      (create-new-backup-raw be db))
    1.68-    ;; if something is wrong, you might want to restore data from last backup
    1.69-    (restore-from-latest-backup-raw be *db-path* *db-backup-path*))))