To get a truly cross-platform, cross-browser relational solution that will work offline and have the required amount of memory, I would suggest: SequelSphere
Since this is a 100% JavaScript solution, it should be used in each of your configurations, without requiring any other code base. In addition, it uses IndexedDB (if available, then LocalStorage) to store its data in relational tables. I believe that most browsers do not have a limit on the size of the IndexedDB storage. I think Firefox may have an initial limit of 50 MB for the following: Maximum size in IndexedDB .
In addition, there is a new feature called “Change Tracking”, which greatly helps in the process of data synchronization, tracking changes (inserts / updates / deletes) in tables, and then reports them when you want.
As an added bonus, unlike WebSQL, SequelSphere is very VERY JSON. Creating tables couldn't be simpler:
db.catalog.createTable({ tableName: "EMPL", columns: [ "EMPL_ID", "NAME", "AGE", "DEPT_ID" ], primaryKey: [ "EMPL_ID" ], data: [ [0,"Bob",32,0], [1,"John",37,2], [2,"Fred",28,1] ] });
The data request is simple:
var res = db.query("SELECT name, age, dept_id FROM empl WHERE Dept_ID = 2");
Inserting / updating / deleting data is very simple:
db.insertRow("empl", [3, "Sue", 26, 2]); db.updateRow("empl", [3, "Suzy", 26, 2]); db.deleteRow("empl", [3, "Suzy", 26, 2]);
One thing to be aware of: since this will be used in a standalone application, make sure that you set the "Storage Area" of the entire Directory or each table as "SCOPE_LOCAL":
db.catalog.setPersistenceScope(db.SCOPE_LOCAL); // -or- db.catalog.getTable("empl").setPersistenceScope(db.SCOPE_LOCAL);
If you have questions, just email SequelSphere support.
For complete transparency, I am part of SequelSphere and it seems to answer your question very well ...;)