diff --git a/web/database/utils/constants.js b/web/database/utils/constants.js
--- a/web/database/utils/constants.js
+++ b/web/database/utils/constants.js
@@ -5,8 +5,6 @@
 
 export const CURRENT_USER_ID_KEY = 'current_user_id';
 
-export const DB_PERSIST_THROTTLE_WAIT_MS = 300;
-
 export const DATABASE_WORKER_PATH = '/worker/database';
 export const SQLJS_FILE_PATH = '/compiled/webworkers';
 
diff --git a/web/database/worker/db-worker.js b/web/database/worker/db-worker.js
--- a/web/database/worker/db-worker.js
+++ b/web/database/worker/db-worker.js
@@ -1,7 +1,6 @@
 // @flow
 
 import localforage from 'localforage';
-import _throttle from 'lodash/throttle.js';
 import initSqlJs, { type SqliteDatabase } from 'sql.js';
 
 import type {
@@ -34,7 +33,6 @@
 } from '../queries/storage-engine-queries.js';
 import {
   CURRENT_USER_ID_KEY,
-  DB_PERSIST_THROTTLE_WAIT_MS,
   SQLITE_CONTENT,
   SQLITE_ENCRYPTION_KEY,
 } from '../utils/constants.js';
@@ -56,6 +54,9 @@
 let sqliteDb: ?SqliteDatabase = null;
 let encryptionKey: ?CryptoKey = null;
 
+let persistNeeded: boolean = false;
+let persistInProgress: boolean = false;
+
 async function initDatabase(sqljsFilePath: string, sqljsFilename: ?string) {
   encryptionKey = await localforage.getItem(SQLITE_ENCRYPTION_KEY);
   if (!encryptionKey) {
@@ -134,7 +135,9 @@
 }
 
 async function persist() {
+  persistInProgress = true;
   if (!sqliteDb) {
+    persistInProgress = false;
     throw new Error('Database not initialized');
   }
 
@@ -142,16 +145,19 @@
     encryptionKey = await localforage.getItem(SQLITE_ENCRYPTION_KEY);
   }
 
-  const dbData = sqliteDb.export();
-  if (!encryptionKey) {
-    throw new Error('Encryption key is missing');
+  while (persistNeeded) {
+    persistNeeded = false;
+    const dbData = sqliteDb.export();
+    if (!encryptionKey) {
+      persistInProgress = false;
+      throw new Error('Encryption key is missing');
+    }
+    const encryptedData = await encryptDatabaseFile(dbData, encryptionKey);
+    await localforage.setItem(SQLITE_CONTENT, encryptedData);
   }
-  const encryptedData = await encryptDatabaseFile(dbData, encryptionKey);
-  await localforage.setItem(SQLITE_CONTENT, encryptedData);
+  persistInProgress = false;
 }
 
-const throttledPersist = _throttle(persist, DB_PERSIST_THROTTLE_WAIT_MS);
-
 async function processAppRequest(
   message: WorkerRequestMessage,
 ): Promise<?WorkerResponseMessage> {
@@ -228,7 +234,11 @@
     removePersistStorageItem(sqliteDb, message.key);
   }
 
-  throttledPersist();
+  persistNeeded = true;
+  if (!persistInProgress) {
+    persist();
+  }
+
   return undefined;
 }