From a5ec51a3d160bdd884603a37d1a6b8ecb8c378d4 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Wed, 10 Apr 2024 20:49:08 +0800 Subject: [PATCH 1/2] :zap: Reduce disk reads when editing documents https://github.com/siyuan-note/siyuan/issues/10961 --- kernel/sql/database.go | 43 +++++++++++++++++++++--------------------- kernel/sql/upsert.go | 6 +++--- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/kernel/sql/database.go b/kernel/sql/database.go index 15db0723e..1e752d864 100644 --- a/kernel/sql/database.go +++ b/kernel/sql/database.go @@ -166,6 +166,10 @@ func initDBTables() { if nil != err { logging.LogFatalf(logging.ExitCodeReadOnlyDatabase, "create table [spans] failed: %s", err) } + _, err = db.Exec("CREATE INDEX idx_spans_root_id ON spans(root_id)") + if nil != err { + logging.LogFatalf(logging.ExitCodeReadOnlyDatabase, "create index [idx_spans_root_id] failed: %s", err) + } _, err = db.Exec("DROP TABLE IF EXISTS assets") if nil != err { @@ -175,6 +179,10 @@ func initDBTables() { if nil != err { logging.LogFatalf(logging.ExitCodeReadOnlyDatabase, "create table [assets] failed: %s", err) } + _, err = db.Exec("CREATE INDEX idx_assets_root_id ON assets(root_id)") + if nil != err { + logging.LogFatalf(logging.ExitCodeReadOnlyDatabase, "create index [idx_assets_root_id] failed: %s", err) + } _, err = db.Exec("DROP TABLE IF EXISTS attributes") if nil != err { @@ -184,6 +192,10 @@ func initDBTables() { if nil != err { logging.LogFatalf(logging.ExitCodeReadOnlyDatabase, "create table [attributes] failed: %s", err) } + _, err = db.Exec("CREATE INDEX idx_attributes_root_id ON attributes(root_id)") + if nil != err { + logging.LogFatalf(logging.ExitCodeReadOnlyDatabase, "create index [idx_attributes_root_id] failed: %s", err) + } _, err = db.Exec("DROP TABLE IF EXISTS refs") if nil != err { @@ -1008,12 +1020,6 @@ func deleteBlocksByBoxTx(tx *sql.Tx, box string) (err error) { return } -func deleteSpansByPathTx(tx *sql.Tx, box, path string) (err error) { - stmt := "DELETE FROM spans WHERE box = ? AND path = ?" - err = execStmtTx(tx, stmt, box, path) - return -} - func deleteSpansByRootID(tx *sql.Tx, rootID string) (err error) { stmt := "DELETE FROM spans WHERE root_id =?" err = execStmtTx(tx, stmt, rootID) @@ -1026,21 +1032,9 @@ func deleteSpansByBoxTx(tx *sql.Tx, box string) (err error) { return } -func deleteAssetsByPathTx(tx *sql.Tx, box, path string) (err error) { - stmt := "DELETE FROM assets WHERE box = ? AND docpath = ?" - err = execStmtTx(tx, stmt, box, path) - return -} - -func deleteAttributeByBlockID(tx *sql.Tx, blockID string) (err error) { - stmt := "DELETE FROM attributes WHERE block_id = ?" - err = execStmtTx(tx, stmt, blockID) - return -} - -func deleteAttributesByPathTx(tx *sql.Tx, box, path string) (err error) { - stmt := "DELETE FROM attributes WHERE box = ? AND path = ?" - err = execStmtTx(tx, stmt, box, path) +func deleteAssetsByRootID(tx *sql.Tx, rootID string) (err error) { + stmt := "DELETE FROM assets WHERE root_id = ?" + err = execStmtTx(tx, stmt, rootID) return } @@ -1050,6 +1044,13 @@ func deleteAssetsByBoxTx(tx *sql.Tx, box string) (err error) { return } +func deleteAttributesByRootID(tx *sql.Tx, rootID string) (err error) { + stmt := "DELETE FROM attributes WHERE root_id = ?" + err = execStmtTx(tx, stmt, rootID) + return + +} + func deleteAttributesByBoxTx(tx *sql.Tx, box string) (err error) { stmt := "DELETE FROM attributes WHERE box = ?" err = execStmtTx(tx, stmt, box) diff --git a/kernel/sql/upsert.go b/kernel/sql/upsert.go index 33c93b309..06c5c37cf 100644 --- a/kernel/sql/upsert.go +++ b/kernel/sql/upsert.go @@ -440,13 +440,13 @@ func upsertTree(tx *sql.Tx, tree *parse.Tree, context map[string]interface{}) (e return } - if err = deleteSpansByPathTx(tx, tree.Box, tree.Path); nil != err { + if err = deleteSpansByRootID(tx, tree.ID); nil != err { return } - if err = deleteAssetsByPathTx(tx, tree.Box, tree.Path); nil != err { + if err = deleteAssetsByRootID(tx, tree.ID); nil != err { return } - if err = deleteAttributesByPathTx(tx, tree.Box, tree.Path); nil != err { + if err = deleteAttributesByRootID(tx, tree.ID); nil != err { return } if err = deleteRefsByPathTx(tx, tree.Box, tree.Path); nil != err { From 4033b15ee82c905ac0d07984c45c0a196f482ae7 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Wed, 10 Apr 2024 21:32:08 +0800 Subject: [PATCH 2/2] :art: Improve notification https://ld246.com/article/1712750404715 --- kernel/model/cloud_service.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/model/cloud_service.go b/kernel/model/cloud_service.go index 612aa87e5..dcbe38dd8 100644 --- a/kernel/model/cloud_service.go +++ b/kernel/model/cloud_service.go @@ -246,7 +246,7 @@ func refreshSubscriptionExpirationRemind() { if 0 < remains && expireDay > remains { util.WaitForUILoaded() - time.Sleep(time.Second * 3) + time.Sleep(time.Second * 7) util.PushErrMsg(fmt.Sprintf(Conf.Language(127), remains), 0) return }