changeset 273: | 6d56c4950fa2 |
parent: | 4a1a21ff46ee |
child: | 00d1c8afcdbb |
author: | Richard Westhaver <ellis@rwest.io> |
date: | Wed, 10 Apr 2024 22:09:23 -0400 |
permissions: | -rw-r--r-- |
description: | rocksdb iter,metadata,and more |
18 | 1 | ;;; rocksdb.lisp --- low-level bindings to the RocksDB C API |
2 | ||
3 | ;; for the high-level interface, see rdb.lisp. |
|
4 | ||
5 | ;;; Commentary: |
|
6 | ||
7 | ;; if ur on archlinux and installed rocksdb via AUR you may receive an error from |
|
8 | ;; jemalloc: cannot allocate memory in static TLS block: |
|
9 | ||
10 | ;; https://github.com/veer66/cl-rocksdb/issues/1 |
|
11 | ||
12 | ;; for best results, you should compile rocksdb from source - use j0ni's snippet as a |
|
13 | ;; starting point. |
|
14 | ||
15 | ;; make shared_lib DISABLE_JEMALLOC=1 && |
|
16 | ;; sudo cp librocksdb.so.* /usr/local/lib/ && |
|
17 | ;; sudo cp -rf include/* /usr/local/include/ |
|
18 | ||
19 | ;; https://github.com/facebook/rocksdb/blob/main/Makefile |
|
20 | ||
21 | ;; check /usr/local/include/rocksdb/c.h for the C API header, the source is under |
|
22 | ;; db/c.cc |
|
23 | ||
24 | ;; here are some important notes to keepin mind (from the API header): |
|
25 | #| |
|
47 | 26 | C bindings for rocksdb. May be useful as a stable ABI that can be |
27 | used by programs that keep rocksdb in a shared library, or for |
|
28 | a JNI api. |
|
18 | 29 | |
47 | 30 | Does not support: |
31 | . getters for the option types |
|
32 | . custom comparators that implement key shortening |
|
33 | . capturing post-write-snapshot |
|
34 | . custom iter, db, env, cache implementations using just the C bindings |
|
18 | 35 | |
47 | 36 | Some conventions: |
18 | 37 | |
47 | 38 | (1) We expose just opaque struct pointers and functions to clients. |
39 | This allows us to change internal representations without having to |
|
40 | recompile clients. |
|
18 | 41 | |
47 | 42 | (2) For simplicity, there is no equivalent to the Slice type. Instead, |
43 | the caller has to pass the pointer and length as separate |
|
44 | arguments. |
|
18 | 45 | |
47 | 46 | (3) Errors are represented by a null-terminated c string. NULL |
47 | means no error. All operations that can raise an error are passed |
|
48 | a "char** errptr" as the last argument. One of the following must |
|
49 | be true on entry: |
|
50 | *errptr == NULL |
|
51 | *errptr points to a malloc()ed null-terminated error message |
|
52 | On success, a leveldb routine leaves *errptr unchanged. |
|
53 | On failure, leveldb frees the old value of *errptr and |
|
54 | set *errptr to a malloc()ed error message. |
|
18 | 55 | |
47 | 56 | (4) Bools have the type unsigned char (0 == false; rest == true) |
18 | 57 | |
47 | 58 | (5) All of the pointer arguments must be non-NULL.|# |
18 | 59 | |
60 | ;;; Code: |
|
85 | 61 | (defpackage :rocksdb |
96 | 62 | (:use :cl :std :sb-alien) |
18 | 63 | (:export |
113
afcb1f02bb66
removed obj/uri. may add back new impl later. new file obj/db.lisp and RDB stuff - (sst)
ellis <ellis@rwest.io>
parents:
112
diff
changeset
|
64 | ;; vars |
94 | 65 | :*rocksdb-options* |
110
cae8da4b1415
rocksdb macrofication, fixes for RDB (C Strings will be the death of me), removed PWN - quicklisp package conflict, smh.
ellis <ellis@rwest.io>
parents:
101
diff
changeset
|
66 | :*rocksdb-compaction-levels* |
cae8da4b1415
rocksdb macrofication, fixes for RDB (C Strings will be the death of me), removed PWN - quicklisp package conflict, smh.
ellis <ellis@rwest.io>
parents:
101
diff
changeset
|
67 | :*rocksdb-compression-backends* |
269 | 68 | :rocksdb-compression-backend |
110
cae8da4b1415
rocksdb macrofication, fixes for RDB (C Strings will be the death of me), removed PWN - quicklisp package conflict, smh.
ellis <ellis@rwest.io>
parents:
101
diff
changeset
|
69 | :*rocksdb-perf-metrics* |
269 | 70 | :*rocksdb-perf-levels* |
71 | :*rocksdb-statistics-levels* |
|
273
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
271
diff
changeset
|
72 | :rocksdb-statistics-level |
271
4a1a21ff46ee
metadata,props,merge-ops
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
73 | :rocksdb-perf-level |
273
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
271
diff
changeset
|
74 | :*rocksdb-column-family-metadata* |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
271
diff
changeset
|
75 | :*rocksdb-level-metadata* |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
271
diff
changeset
|
76 | :*rocksdb-sst-file-metadata* |
271
4a1a21ff46ee
metadata,props,merge-ops
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
77 | :*rocksdb-properties* |
4a1a21ff46ee
metadata,props,merge-ops
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
78 | :rocksdb-num-files-at-level |
4a1a21ff46ee
metadata,props,merge-ops
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
79 | :rocksdb-compression-ratio-at-level |
4a1a21ff46ee
metadata,props,merge-ops
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
80 | :rocksdb-aggregated-table-properties-at-level)) |
18 | 81 | |
82 | (in-package :rocksdb) |
|
83 | ||
155 | 84 | (define-alien-loader "rocksdb" t) |