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

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 UTC