Skip to content

Commit

Permalink
Add metadata value index
Browse files Browse the repository at this point in the history
Speeds up pruning orphaned values
  • Loading branch information
inukshuk committed Oct 3, 2017
1 parent 4c58ab8 commit f3d7483
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 19 deletions.
1 change: 1 addition & 0 deletions db/migrate/project/1710032150.add-metadata-value-index.sql
@@ -0,0 +1 @@
CREATE INDEX idx_metadata_value_id ON metadata (value_id);
33 changes: 17 additions & 16 deletions db/schema/project.sql
Expand Up @@ -12,7 +12,7 @@
--

-- Save the current migration number
PRAGMA user_version=1708121306;
PRAGMA user_version=1710032150;

-- Load sqlite3 .dump
PRAGMA foreign_keys=OFF;
Expand Down Expand Up @@ -119,7 +119,7 @@ CREATE TABLE lists (

UNIQUE (parent_list_id, name)
);
INSERT INTO "lists" VALUES(0,'ROOT',NULL,NULL,'2017-01-31 12:00:00','2017-01-31 12:00:00');
INSERT INTO lists VALUES(0,'ROOT',NULL,NULL,'2017-01-31 12:00:00','2017-01-31 12:00:00');
CREATE TABLE list_items (
list_id INTEGER REFERENCES lists ON DELETE CASCADE,
id INTEGER REFERENCES items ON DELETE CASCADE,
Expand Down Expand Up @@ -160,27 +160,27 @@ INSERT INTO sqlite_master(type,name,tbl_name,rootpage,sql)VALUES('table','fts_no
content_rowid = ''note_id'',
tokenize = ''porter unicode61''
)');
CREATE TABLE 'fts_notes_data'(id INTEGER PRIMARY KEY, block BLOB);
INSERT INTO "fts_notes_data" VALUES(1,X'');
INSERT INTO "fts_notes_data" VALUES(10,X'00000000000000');
CREATE TABLE 'fts_notes_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE 'fts_notes_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE 'fts_notes_config'(k PRIMARY KEY, v) WITHOUT ROWID;
INSERT INTO "fts_notes_config" VALUES('version',4);
CREATE TABLE IF NOT EXISTS 'fts_notes_data'(id INTEGER PRIMARY KEY, block BLOB);
INSERT INTO fts_notes_data VALUES(1,X'');
INSERT INTO fts_notes_data VALUES(10,X'00000000000000');
CREATE TABLE IF NOT EXISTS 'fts_notes_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'fts_notes_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'fts_notes_config'(k PRIMARY KEY, v) WITHOUT ROWID;
INSERT INTO fts_notes_config VALUES('version',4);
INSERT INTO sqlite_master(type,name,tbl_name,rootpage,sql)VALUES('table','fts_metadata','fts_metadata',0,'CREATE VIRTUAL TABLE fts_metadata USING fts5(
datatype UNINDEXED,
text,
content = ''metadata_values'',
content_rowid = ''value_id'',
tokenize = ''porter unicode61''
)');
CREATE TABLE 'fts_metadata_data'(id INTEGER PRIMARY KEY, block BLOB);
INSERT INTO "fts_metadata_data" VALUES(1,X'');
INSERT INTO "fts_metadata_data" VALUES(10,X'00000000000000');
CREATE TABLE 'fts_metadata_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE 'fts_metadata_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE 'fts_metadata_config'(k PRIMARY KEY, v) WITHOUT ROWID;
INSERT INTO "fts_metadata_config" VALUES('version',4);
CREATE TABLE IF NOT EXISTS 'fts_metadata_data'(id INTEGER PRIMARY KEY, block BLOB);
INSERT INTO fts_metadata_data VALUES(1,X'');
INSERT INTO fts_metadata_data VALUES(10,X'00000000000000');
CREATE TABLE IF NOT EXISTS 'fts_metadata_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'fts_metadata_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'fts_metadata_config'(k PRIMARY KEY, v) WITHOUT ROWID;
INSERT INTO fts_metadata_config VALUES('version',4);
CREATE TABLE selections (
id INTEGER PRIMARY KEY REFERENCES images ON DELETE CASCADE,
photo_id INTEGER NOT NULL REFERENCES photos ON DELETE CASCADE,
Expand Down Expand Up @@ -286,6 +286,7 @@ CREATE TRIGGER metadata_values_ad_fts
VALUES ('delete', OLD.value_id, OLD.datatype, OLD.text);
END;
CREATE INDEX idx_photos_checksum ON photos (checksum);
CREATE INDEX idx_metadata_value_id ON metadata (value_id);
PRAGMA writable_schema=OFF;
COMMIT;
PRAGMA foreign_keys=ON;
6 changes: 3 additions & 3 deletions src/sagas/project.js
Expand Up @@ -118,9 +118,9 @@ function *close(db, project, access) {
call(storage.persist, 'columns', project.id)
])

//yield call(mod.item.prune, db)
yield call(mod.item.prune, db)
yield call(mod.list.prune, db)
//yiel call(mod.value.prune, db)
yield call(mod.value.prune, db)
yield call(mod.photo.prune, db)
yield call(mod.selection.prune, db)
yield call(mod.note.prune, db)
Expand Down Expand Up @@ -153,7 +153,7 @@ function *main() {
yield cancel(task)
yield race({
closed: take(CLOSED),
timeout: call(delay, 2000)
timeout: call(delay, 8000)
})

task = null
Expand Down

0 comments on commit f3d7483

Please sign in to comment.