mirror of https://github.com/logseq/logseq
perf: use transit instead of edn for db storage
parent
e13ae5fca2
commit
2e29918478
|
@ -55,9 +55,16 @@
|
|||
|
||||
(defn restore-data-from-addr
|
||||
[db addr]
|
||||
(-> (query db (str "select content from kvs where addr = " addr))
|
||||
first
|
||||
(gobj/get "content")))
|
||||
(when-let [content (-> (query db (str "select content from kvs where addr = " addr))
|
||||
first
|
||||
(gobj/get "content"))]
|
||||
(try
|
||||
(let [data (sqlite-util/transit-read content)]
|
||||
(if-let [addresses (:addresses data)]
|
||||
(assoc data :addresses (clj->js addresses))
|
||||
data))
|
||||
(catch :default _e ; TODO: remove this once db goes to test
|
||||
(edn/read-string content)))))
|
||||
|
||||
(defn new-sqlite-storage
|
||||
"Creates a datascript storage for sqlite. Should be functionally equivalent to db-worker/new-sqlite-storage"
|
||||
|
@ -68,13 +75,12 @@
|
|||
(map
|
||||
(fn [[addr data]]
|
||||
#js {:addr addr
|
||||
:content (pr-str data)})
|
||||
:content (sqlite-util/transit-write data)})
|
||||
addr+data-seq)
|
||||
(to-array))]
|
||||
(upsert-addr-content! db data delete-addrs)))
|
||||
(-restore [_ addr]
|
||||
(let [content (restore-data-from-addr db addr)]
|
||||
(edn/read-string content)))))
|
||||
(restore-data-from-addr db addr))))
|
||||
|
||||
(defn open-db!
|
||||
"For a given database name, opens a sqlite db connection for it, creates
|
||||
|
|
|
@ -2,11 +2,23 @@
|
|||
"Utils fns for backend sqlite db"
|
||||
(:require [clojure.string :as string]
|
||||
[logseq.db.frontend.schema :as db-schema]
|
||||
[logseq.common.util :as common-util]))
|
||||
[logseq.common.util :as common-util]
|
||||
[cognitect.transit :as transit]))
|
||||
|
||||
(defonce db-version-prefix "logseq_db_")
|
||||
(defonce file-version-prefix "logseq_local_")
|
||||
|
||||
(def transit-w (transit/writer :json))
|
||||
(def transit-r (transit/reader :json))
|
||||
(defn transit-write
|
||||
[data]
|
||||
(transit/write transit-w data))
|
||||
|
||||
(defn transit-read
|
||||
[str]
|
||||
(transit/read transit-r str))
|
||||
|
||||
|
||||
(defn db-based-graph?
|
||||
[graph-name]
|
||||
(string/starts-with? graph-name db-version-prefix))
|
||||
|
|
|
@ -99,7 +99,13 @@
|
|||
:bind #js [addr]
|
||||
:rowMode "array"})
|
||||
ffirst)]
|
||||
(edn/read-string content))))
|
||||
(try
|
||||
(let [data (sqlite-util/transit-read content)]
|
||||
(if-let [addresses (:addresses data)]
|
||||
(assoc data :addresses (bean/->js addresses))
|
||||
data))
|
||||
(catch :default _e ; TODO: remove this once db goes to test
|
||||
(edn/read-string content))))))
|
||||
|
||||
(defn new-sqlite-storage
|
||||
[repo _opts]
|
||||
|
@ -108,7 +114,7 @@
|
|||
(let [data (map
|
||||
(fn [[addr data]]
|
||||
#js {:$addr addr
|
||||
:$content (pr-str data)})
|
||||
:$content (sqlite-util/transit-write data)})
|
||||
addr+data-seq)]
|
||||
(if (worker-state/rtc-downloading-graph?)
|
||||
(upsert-addr-content! repo data delete-addrs) ; sync writes when downloading whole graph
|
||||
|
|
Loading…
Reference in New Issue