From 4f53a7996e71bc4fcb7e30b19e428018b9e1a2cd Mon Sep 17 00:00:00 2001 From: NatureFreshMilk Date: Tue, 29 Jan 2019 18:00:00 +0100 Subject: [PATCH] sqlite perf/safety tradeoff --- server/mapobjectdb/accessor.go | 4 ++++ server/mapobjectdb/sqlite_migrate.go | 14 ++++++++++++-- server/mapobjectdb/sqlite_new.go | 2 +- server/tilerendererjob/job.go | 13 +++++++++++++ 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/server/mapobjectdb/accessor.go b/server/mapobjectdb/accessor.go index f8f5b06..6d983bb 100644 --- a/server/mapobjectdb/accessor.go +++ b/server/mapobjectdb/accessor.go @@ -53,8 +53,12 @@ type SearchQuery struct { } type DBAccessor interface { + //migrates the database Migrate() error + //true = speed,unsafe / false = safe + EnableSpeedSafetyTradeoff(enableSpeed bool) error + //Generic map objects (poi, etc) GetMapData(q SearchQuery) ([]*MapObject, error) RemoveMapData(pos *coords.MapBlockCoords) error diff --git a/server/mapobjectdb/sqlite_migrate.go b/server/mapobjectdb/sqlite_migrate.go index b68a87e..7161866 100644 --- a/server/mapobjectdb/sqlite_migrate.go +++ b/server/mapobjectdb/sqlite_migrate.go @@ -9,8 +9,6 @@ import ( const migrateScript = ` PRAGMA foreign_keys = ON; --- PRAGMA journal_mode = MEMORY; --- PRAGMA synchronous = OFF; create table if not exists objects( id integer primary key autoincrement, @@ -64,3 +62,15 @@ func (db *Sqlite3Accessor) Migrate() error { return nil } + +func (db *Sqlite3Accessor) EnableSpeedSafetyTradeoff(enableSpeed bool) error { + if enableSpeed { + _, err := db.db.Exec("PRAGMA journal_mode = MEMORY; PRAGMA synchronous = OFF;") + return err + + } else { + _, err := db.db.Exec("PRAGMA journal_mode = TRUNCATE; PRAGMA synchronous = ON;") + return err + + } +} diff --git a/server/mapobjectdb/sqlite_new.go b/server/mapobjectdb/sqlite_new.go index 1f95eeb..c91f4af 100644 --- a/server/mapobjectdb/sqlite_new.go +++ b/server/mapobjectdb/sqlite_new.go @@ -7,7 +7,7 @@ import ( func NewSqliteAccessor(filename string) (*Sqlite3Accessor, error) { //TODO: flag/config for unsafe db access - db, err := sql.Open("sqlite3", filename+"?_timeout=500&_journal_mode=MEMORY&_synchronous=OFF") + db, err := sql.Open("sqlite3", filename+"?_timeout=500") db.SetMaxOpenConns(1) if err != nil { diff --git a/server/tilerendererjob/job.go b/server/tilerendererjob/job.go index 8564a84..7357ea9 100644 --- a/server/tilerendererjob/job.go +++ b/server/tilerendererjob/job.go @@ -15,7 +15,20 @@ func Job(ctx *app.App) { } if rstate.InitialRun { + //fast, unsafe mode + err := ctx.Objectdb.EnableSpeedSafetyTradeoff(true) + if err != nil { + panic(err) + } + initialRender(ctx, jobs) + + //normal, safe mode + err = ctx.Objectdb.EnableSpeedSafetyTradeoff(false) + if err != nil { + panic(err) + } + } incrementalRender(ctx, jobs)