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

09.01.2010 22:10

В дополнение к ранее опубликованной спецификации 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();