diff --git a/src/dev-cljs/shadow/build_large_graph.cljs b/src/dev-cljs/shadow/build_large_graph.cljs new file mode 100644 index 0000000000..9b8b026660 --- /dev/null +++ b/src/dev-cljs/shadow/build_large_graph.cljs @@ -0,0 +1,59 @@ +(ns shadow.build-large-graph) + +(comment + + (in-ns 'frontend.db-worker) + (def repo "logseq_db_large-db-demo") + (def conn (worker-state/get-datascript-conn repo)) + + (defonce *ids (atom (set (map :v (d/datoms @conn :avet :block/uuid))))) + (defn get-next-id + [] + (let [id (random-uuid)] + (if (@*ids id) + (get-next-id) + (do + (swap! *ids conj id) + id)))) + + (defn pages + [start-idx n] + (let [ids (repeatedly n get-next-id)] + (map-indexed + (fn [idx id] + {:block/uuid id + :block/original-name (str "page-" (+ start-idx idx)) + :block/name (str "page-" (+ start-idx idx)) + :block/format :markdown}) + ids))) + + (defn blocks + [page-id size] + (let [page-id [:block/uuid page-id] + blocks (vec (repeatedly size (fn [] + (let [id (get-next-id)] + {:block/uuid id + :block/content (str id) + :block/format :markdown + :block/page page-id + :block/parent page-id}))))] + (map-indexed + (fn [i b] + (if (zero? i) + (assoc b :block/left page-id) + (let [left (nth blocks (dec i))] + (assoc b :block/left [:block/uuid (:block/uuid left)])))) + blocks))) + + (defn create-graph! + [conn page-size blocks-size start-idx] + (let [pages (pages start-idx page-size) + page-blocks (map (fn [p] + (cons p + (blocks (:block/uuid p) blocks-size))) pages)] + (doseq [data (partition-all 1000 page-blocks)] + (let [tx-data (apply concat data)] + (prn :debug :progressing (:block/name (first tx-data))) + (d/transact! conn tx-data {:new-graph? true}))))) + + (create-graph! conn 10000 20 0)) diff --git a/src/main/frontend/db_worker.cljs b/src/main/frontend/db_worker.cljs index cd615eae24..a29b30de91 100644 --- a/src/main/frontend/db_worker.cljs +++ b/src/main/frontend/db_worker.cljs @@ -30,7 +30,6 @@ (defonce *datascript-conns worker-state/*datascript-conns) (defonce *opfs-pools worker-state/*opfs-pools) (defonce *publishing? (atom false)) -(defonce *store-jobs (atom #{})) (defn- get-pool-name [graph-name] @@ -108,11 +107,8 @@ (fn [[addr data]] #js {:$addr addr :$content (pr-str data)}) - addr+data-seq) - p (p/do! (upsert-addr-content! repo data delete-addrs))] - (swap! *store-jobs conj p) - (p/then p (fn [] (swap! *store-jobs disj p))) - p)) + addr+data-seq)] + (upsert-addr-content! repo data delete-addrs))) (-restore [_ addr] (restore-data-from-addr repo addr)))) @@ -263,13 +259,7 @@ [_this repo & {:keys [close-other-db?] :or {close-other-db? true}}] (p/do! - ;; Store the current db if store jobs not finished yet - (when (seq @*store-jobs) - (-> (p/all @*store-jobs) - (p/then (fn [_] - (reset! *store-jobs #{}) - (println "DB store job finished"))))) - (when close-other-db? + (when close-other-db? (close-other-dbs! repo)) (create-or-open-db! repo))) @@ -374,12 +364,19 @@ (let [data (->> (sqlite-common-db/get-initial-data @conn) pr-str)] (async/go + ;; TODO: after UI db transacted + (async/