Комитет W3C опубликовал черновик API для создания индексируемых БД в браузере

В дополнение к ранее опубликованной спецификации WebSimpleDB API, определяющей возможность использования в web-приложениях API для доступа к интегрированной в web-браузер БД, работающей в режиме ключ/значение, комитет W3C представил черновой вариант стандарта IndexedDB API. Главное отличие новой спецификации - реализация возможности упорядоченной выборки данных, если в WebSimpleDB API можно было получить только заданные определенными ключами значения, то в IndexedDB API появилась возможность совершения операций по запросу ключей из базы, отсортированных в определенном порядке.

Кроме того, в IndexedDB API добавлены средства для гибкого поиска значений по маскам и диапазонам, реализована поддержка хранения нескольких значений, привязанных к одному ключу, включая возможность присвоения одному ключу одинаковых дублирующихся значений. Для организации работы индексов могут использоваться структуры данных, формируемые с использованием алгоритма B-tree. Индексы могут создаваться и удаляться для существующих хранилищ объектов в произвольном порядке, в зависимости от желания разработчика.

API предусматривает два метода совершения выборки: синхронный (с ожиданием завершения выборки и поддержкой курсоров) и асинхронный (после выполнения запроса работа скрипта сразу продолжается, после завершения выборки вызывается callback-функция).

Пример скрипта, поясняющего основную суть нового API:

         // Открываем БД     var db = indexedDB.open('AddressBook', 'Address Book');     if (db.version === '1') {        // Если БД версии без поддержки индексации, создаем индекс и преобразуем в новый формат.        var olddb = indexedDB.open('AddressBook', 'Address Book');        olddb.createObjectStore('Contact', 'id', true);        olddb.createIndex('ContactName', 'Contact', 'name', false);        olddb.setVersion('2');     }       // Пример сохранения данных.     var store = db.openObjectStore('Contact');     var lincoln = {name: 'Lincoln', number: '7012'};     var contact = store.put(lincoln);       // Пример выборки из индекса.     var index = db.openIndex('ContactName');     var id = index.get('Lincoln');     if (id)       report(id.name);     else       report(null);       // пример выборки по диапазону значний.     var range = new KeyRange.bound('L', 'M'); //выборка значений с  первыми буквами от L до M     var cursor = index.openCursor(range);     cursor.continue();    

©  OpenNet