Explorar o código

perf: reduce disk writes

Tienson Qin %!s(int64=2) %!d(string=hai) anos
pai
achega
5b13fe6df4

+ 1 - 1
deps.edn

@@ -4,7 +4,7 @@
   rum/rum                               {:mvn/version "0.12.9"}
 
   datascript/datascript                 {:git/url "https://github.com/logseq/datascript" ;; fork
-                                         :sha     "6d9b5f0db22d960ddf4870503bc181bff9a50c5d"}
+                                         :sha     "21fc7880c7042fb1d9086135d162ea7a91681f89"}
 
   datascript-transit/datascript-transit {:mvn/version "0.3.0"}
   borkdude/rewrite-edn                  {:mvn/version "0.4.7"}

+ 1 - 1
deps/db/deps.edn

@@ -1,7 +1,7 @@
 {:deps
  ;; External deps should be kept in sync with https://github.com/logseq/nbb-logseq/blob/main/bb.edn
  {datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork
-                         :sha     "6d9b5f0db22d960ddf4870503bc181bff9a50c5d"}
+                         :sha     "21fc7880c7042fb1d9086135d162ea7a91681f89"}
   com.cognitect/transit-cljs   {:mvn/version "0.8.280"}
   cljs-bean/cljs-bean          {:mvn/version "1.5.0"}}
 

+ 1 - 1
deps/outliner/deps.edn

@@ -1,7 +1,7 @@
 {:deps
  ;; External deps should be kept in sync with https://github.com/logseq/nbb-logseq/blob/main/bb.edn
  {datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork
-                         :sha     "6d9b5f0db22d960ddf4870503bc181bff9a50c5d"}
+                         :sha     "21fc7880c7042fb1d9086135d162ea7a91681f89"}
   logseq/db             {:local/root "../db"}
   com.cognitect/transit-cljs {:mvn/version "0.8.280"}}
  :aliases

+ 9 - 6
src/main/frontend/db_worker.cljs

@@ -270,16 +270,19 @@
        (let [tx-data (edn/read-string tx-data)
              tx-meta (edn/read-string tx-meta)
              context (edn/read-string context)
-             tx-report (d/transact! conn tx-data tx-meta)
+             tx-meta' (if (or (:from-disk? tx-meta) (:new-graph? tx-meta))
+                        tx-meta
+                        (assoc tx-meta :skip-store? true))
+             tx-report (d/transact! conn tx-data tx-meta')
              result (pipeline/invoke-hooks conn tx-report context)
              ;; TODO: delay search indice so that UI can be refreshed earlier
              search-indice (search/sync-search-indice repo (:tx-report result))
              data (merge
-                     {:repo repo
-                      :search-indice search-indice
-                      :tx-data tx-data
-                      :tx-meta tx-meta}
-                     (dissoc result :tx-report))]
+                   {:repo repo
+                    :search-indice search-indice
+                    :tx-data tx-data
+                    :tx-meta tx-meta}
+                   (dissoc result :tx-report))]
          (pr-str data))
        (catch :default e
          (prn :debug :error)

+ 2 - 1
src/main/frontend/persist_db.cljs

@@ -51,4 +51,5 @@
 
 (defn transact-db->worker!
   [repo tx-report]
-  (<transact-data repo (:tx-data tx-report) (:tx-meta tx-report)))
+  (when-not (:pipeline-replace? (:tx-meta tx-report))
+    (<transact-data repo (:tx-data tx-report) (:tx-meta tx-report))))

+ 15 - 19
src/main/frontend/worker/pipeline.cljs

@@ -42,34 +42,30 @@
 (defn invoke-hooks
   [conn tx-report context]
   (let [tx-meta (:tx-meta tx-report)
-        {:keys [from-disk? new-graph? pipeline-replace?]} tx-meta]
+        {:keys [from-disk? new-graph?]} tx-meta]
     (if (or from-disk? new-graph?)
       {:tx-report tx-report}
       (let [{:keys [pages blocks]} (ds-report/get-blocks-and-pages tx-report)
             deleted-block-uuids (set (outliner-pipeline/filter-deleted-blocks (:tx-data tx-report)))
-            replace-tx (when-not pipeline-replace?
-                         (concat
+            replace-tx (concat
                           ;; block path refs
-                          (set (compute-block-path-refs-tx tx-report blocks))
+                        (set (compute-block-path-refs-tx tx-report blocks))
 
                           ;; delete empty property parent block
-                          (when (seq deleted-block-uuids)
-                            (delete-property-parent-block-if-empty tx-report deleted-block-uuids))
+                        (when (seq deleted-block-uuids)
+                          (delete-property-parent-block-if-empty tx-report deleted-block-uuids))
 
                           ;; update block/tx-id
-                          (let [updated-blocks (remove (fn [b] (contains? (set deleted-block-uuids)  (:block/uuid b))) blocks)
-                                tx-id (get-in tx-report [:tempids :db/current-tx])]
-                            (->>
-                             (map (fn [b]
-                                    (when-let [db-id (:db/id b)]
-                                      {:db/id db-id
-                                       :block/tx-id tx-id})) updated-blocks)
-                             (remove nil?)))))
-            tx-report' (or
-                        (when-not pipeline-replace?
-                          (d/transact! conn replace-tx {:replace? true
-                                                        :pipeline-replace? true}))
-                        tx-report)
+                        (let [updated-blocks (remove (fn [b] (contains? (set deleted-block-uuids)  (:block/uuid b))) blocks)
+                              tx-id (get-in tx-report [:tempids :db/current-tx])]
+                          (->>
+                           (map (fn [b]
+                                  (when-let [db-id (:db/id b)]
+                                    {:db/id db-id
+                                     :block/tx-id tx-id})) updated-blocks)
+                           (remove nil?))))
+            tx-report' (d/transact! conn replace-tx {:replace? true
+                                                     :pipeline-replace? true})
             full-tx-data (concat (:tx-data tx-report) (:tx-data tx-report'))
             final-tx-report (assoc tx-report' :tx-data full-tx-data)
             affected-query-keys (when-not (:importing? context)