W3C home > Mailing lists > Public > www-tag@w3.org > February 2013

Re: IndexedDB, what were the issues? How do we stop it from happening again?

From: Kyaw Tun <kyawtun@yathit.com>
Date: Tue, 12 Feb 2013 13:02:32 +0800
Message-ID: <CAFPCW964tcvGp_FrOk=oMTFa-Q72+xb+nvgpo_SxHSc4trkudQ@mail.gmail.com>
To: www-tag@w3.org
The criticisms on IndexedDB API by pointing out IndexedDB suck links is
unfair. If they have enough time to play around it, they will love it.
There are a lot of beauty in IndexedDB API like composite index,
element-wise indexing, auto commit transaction, powerful serialisation and
full reflection. Arms with these it is very possible to write butter smooth
database library.

I would like to point out my own open source library as an example:
https://bitbucket.org/ytkyaw/ydn-db
.
The library features:


   - Support *all* features of asynchronous IndexedDB API.
   - Well tested closure library module.
   - Fixed schema, auto versioning, on-the-fly schema generation while
   maintaining multiple connections (on tabs, or worker).
   - Low-level cursor iteration, high level query and key joining
   algorithms.
   - Each method call is an atomic transaction, while supporting
   transaction and advance transaction
*workflow*<http://dev.yathit.com/ydn-db/starting/transaction.html>
   .


CRUD operations :
var db = new ydn.db.Storage('test-store');
db.put('store1', {test: 'Hello World!'}, 123);
var req = db.get('store1', 123).done(function(record) {

   1. console.log(record);
   2. });



Basic query


   1. var lower = + new Date(1942, 1, 1); // 1942 February 1
   2. var upper = + new Date(1942, 2, 1); // 1942 March 1
   3. var iter = ydn.db.IndexValueCursors.where('author', 'born', '>=',lower
   , '<', upper);
   4. db.values(iter).done(function(records) {
   5. console.log(records);
   6. records.map(function(x) {
   7. console.log(x.first + ' ' + x.last + ' ' + new Date(x.born));
   8. });
   9. });


Advanced query for: SELECT * FROM article WHERE license = 'SA' AND
publisher = 'Nature' ORDER BY 'title'


   1. var license_sa_iter = ydn.db.Cursors.where('article', 'license, title'
   , '^', ['SA']);
   2. var publisher_nature_iter = ydn.db.Cursors.where('article', 'publisher,
   title', '^', ['Nature']);
   3. var match_keys = [];
   4. var solver = new ydn.db.algo.ZigzagMerge(match_keys);
   5. var req = db.scan([license_sa_iter, publisher_nature_iter], solver);
   6. req.then(function() {
   7. db.list('article', match_keys).done(function(results) {
   8. console.log(results);
   9. });
   10. }, function(e) {
   11. throw e;
   12. });
Received on Tuesday, 12 February 2013 05:03:00 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 12 February 2013 05:03:00 GMT