emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: sqlite3


From: Qiantan Hong
Subject: Re: sqlite3
Date: Mon, 6 Dec 2021 19:59:05 +0000

As for key value store, if you really want a persistent
kv store with O(1) insert, couldn’t we just use something like 
the following super simple (skeleton) code?

(defvar kv-store-table)
(cl-defstruct (kv-store (:constructor make-kv-store-1)) path table)
(defun make-kv-store (path)
  (let* ((kv-store (make-kv-store-1 :path path))
         (kv-store-table (make-hash-table :test 'equal)))
    (when (file-exists-p path)
      (load-file path)
      ;; and some error handling to ignore clear trailing un-balanced form
      ;; just in case Emacs crash in the middle of a kv-put
      )
    (setf (kv-store-table kv-store) kv-store-table)
    kv-store))
(defun compact-kv-store (kv-store)
  ;; dump the full content of kv-store-table at once
  ;; to compress the log and speed up loading
  )
(defun kv-put (key value kv-store)
  (with-temp-buffer
    (print `(puthash ',key ',value kv-store-table) (current-buffer))
    (append-to-file nil nil (kv-store-path kv-store)))
  (puthash key value (kv-store-table kv-store)))
(defun kv-get (key kv-store)
  (gethash key (kv-store-table kv-store)))

reply via email to

[Prev in Thread] Current Thread [Next in Thread]