LowlaDB Performance

A database for mobile applications

Introduction

Our performance target with LowlaDB is for most local datastore operations to complete in less than 750ms. The tables below list our current progress towards that goal.

We measure performance with three different datasets:

Dataset One
Ten thousand records, each containing around 100 bytes of alphanumeric data. The total dataset is around 2.5Mb.
Dataset Two
One thousand records, each containing a small amount of alphanumeric data and a 10k thumbnail image. The total dataset is around 15Mb.
Dataset Three
One hundred records, each containing a small amount of alphanumeric data and a 1Mb image. The total dataset is around 135Mb.

For each dataset, we measure

  • load: the time to load the data from a dump file
  • count: the time to count the number of documents in the database
  • id: the time to locate a single document using the indexed _id identifier property
  • seek: the time to locate a single document using a non-indexed property

Finally, we measure each dataset using both the IndexedDB and Memory datastores.

All results are reported in milliseconds, rounded to the nearest whole number.

Platforms

All testing is performed using lowladb-benchmark with version 0.1.0 of LowlaDB. The tested platforms are

Safari
Safari 8.0.2 running on OS X 10.1.1 using a 2.6 GHz Core i7 MacBook Pro with 16Gb RAM.
Chrome
Chrome 39.0.2171.95 running on OS X 10.1.1 using a 2.6 GHz Core i7 MacBook Pro with 16Gb RAM.
iPhone 6
Mobile Safari on an iPhone 6 running iOS 8.1.2.
BlackBerry Z30
Built-in browser on a BlackBerry Z30 running OS 10.2.1.2102
Nexus 7
Chrome on a first-generation Nexus 7 running Android 4.4.4. This shows LowlaDB performance on an older, lower-spec Android device.
OnePlus One
Chrome on a current-generation Android device.
Lumia 530
Internet Explorer on a Nokia Lumia 530 running Windows Phone 8.1. Although IndexedDB is available on this configuration, it is subject to quotas that prevent the benchmark from executing successfully.

Results

Dataset One

PlatformIndexedDBMemory
loadcountidseekloadcountidseek
Safari607392751953478155533634
Chrome8962191663575655454
iPhone 62514291055507608722149168480
BB Z3033593396113974896627282270
Nexus 78495022662523544534404425
OnePlus One8115614753086732520379222
Lumia 530----1225723236236

Dataset Two

PlatformIndexedDBMemory
loadcountidseekloadcountidseek
Safari445510324479241166
Chrome18412011601213188
iPhone 6323311636539657496211412
BB Z30264711188162960453755544
Nexus 722237236171271124096967
OnePlus One115011459773101393336
Lumia 530----3166355255

Dataset Three

PlatformIndexedDBMemory
loadcountidseekloadcountidseek
Safari363860544164461302625
Chrome4096159471000392703332