Комитет 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