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
|
(defn restore-data-from-addr
|
||||||
[db addr]
|
[db addr]
|
||||||
(-> (query db (str "select content from kvs where addr = " addr))
|
(when-let [content (-> (query db (str "select content from kvs where addr = " addr))
|
||||||
first
|
first
|
||||||
(gobj/get "content")))
|
(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
|
(defn new-sqlite-storage
|
||||||
"Creates a datascript storage for sqlite. Should be functionally equivalent to db-worker/new-sqlite-storage"
|
"Creates a datascript storage for sqlite. Should be functionally equivalent to db-worker/new-sqlite-storage"
|
||||||
|
@ -68,13 +75,12 @@
|
||||||
(map
|
(map
|
||||||
(fn [[addr data]]
|
(fn [[addr data]]
|
||||||
#js {:addr addr
|
#js {:addr addr
|
||||||
:content (pr-str data)})
|
:content (sqlite-util/transit-write data)})
|
||||||
addr+data-seq)
|
addr+data-seq)
|
||||||
(to-array))]
|
(to-array))]
|
||||||
(upsert-addr-content! db data delete-addrs)))
|
(upsert-addr-content! db data delete-addrs)))
|
||||||
(-restore [_ addr]
|
(-restore [_ addr]
|
||||||
(let [content (restore-data-from-addr db addr)]
|
(restore-data-from-addr db addr))))
|
||||||
(edn/read-string content)))))
|
|
||||||
|
|
||||||
(defn open-db!
|
(defn open-db!
|
||||||
"For a given database name, opens a sqlite db connection for it, creates
|
"For a given database name, opens a sqlite db connection for it, creates
|
||||||
|
|
|
@ -2,11 +2,23 @@
|
||||||
"Utils fns for backend sqlite db"
|
"Utils fns for backend sqlite db"
|
||||||
(:require [clojure.string :as string]
|
(:require [clojure.string :as string]
|
||||||
[logseq.db.frontend.schema :as db-schema]
|
[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 db-version-prefix "logseq_db_")
|
||||||
(defonce file-version-prefix "logseq_local_")
|
(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?
|
(defn db-based-graph?
|
||||||
[graph-name]
|
[graph-name]
|
||||||
(string/starts-with? graph-name db-version-prefix))
|
(string/starts-with? graph-name db-version-prefix))
|
||||||
|
|
|
@ -99,7 +99,13 @@
|
||||||
:bind #js [addr]
|
:bind #js [addr]
|
||||||
:rowMode "array"})
|
:rowMode "array"})
|
||||||
ffirst)]
|
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
|
(defn new-sqlite-storage
|
||||||
[repo _opts]
|
[repo _opts]
|
||||||
|
@ -108,7 +114,7 @@
|
||||||
(let [data (map
|
(let [data (map
|
||||||
(fn [[addr data]]
|
(fn [[addr data]]
|
||||||
#js {:$addr addr
|
#js {:$addr addr
|
||||||
:$content (pr-str data)})
|
:$content (sqlite-util/transit-write data)})
|
||||||
addr+data-seq)]
|
addr+data-seq)]
|
||||||
(if (worker-state/rtc-downloading-graph?)
|
(if (worker-state/rtc-downloading-graph?)
|
||||||
(upsert-addr-content! repo data delete-addrs) ; sync writes when downloading whole graph
|
(upsert-addr-content! repo data delete-addrs) ; sync writes when downloading whole graph
|
||||||
|
|
Loading…
Reference in New Issue