32
Databases on client side tips and tricks Lemekha Denys Web Developer

Databases on Client Side

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Databases on Client Side

Databases on client side tips and tricks

Lemekha Denys Web Developer

Page 2: Databases on Client Side

● Виды сохранения данных на стороне клиента● Базы данных на клиенте, что это такое? ● WebSQL (синтаксис, примеры кода)● IndexedDB (примеры кода)● Вопросы кроссбраузерности баз данных● Применение WebSQL и IndexedDB в

современных веб-проектах

План

Page 3: Databases on Client Side

Куки

WebStorage (Local Storage)

Базы данных

Виды сохранения данных на стороне клиента

Page 4: Databases on Client Side

Данные

Page 5: Databases on Client Side

Куки

Page 6: Databases on Client Side

Куки

Page 7: Databases on Client Side
Page 8: Databases on Client Side

Local Storage

Page 9: Databases on Client Side

Базы данных

Page 10: Databases on Client Side

КукиОграниченность кол-ва на 1 домен и общего

числа, размер кук (4кБ), ограниченное APILocal Storage

Работет синхронно и блокирует браузерБазы данных

● Поддержка работы с сложными структурно и большими объемами данных

● Работают как синхронно так и асинхронно ● Поддерживают транзакции

Отличия хранилищ

Page 11: Databases on Client Side

WebSQL & IndexedDB

Виды клиентских БД

Page 12: Databases on Client Side

Позитивные стороны:● Поддерживается SQL синтаксис - удобство в

разработке. Основана на SQLite технологии● Транзакционность

Негативные стороны:● Не поддерживаются всеми браузерами (Safari,

Opera, Chrome, Android Browser, IE и FF)● Не поддерживается её развитие командой W3C

Working Group

Web SQL Database

Page 13: Databases on Client Side

Проверка, поддерживает ли браузер WebSQL

if (window.openDatabase){ //..операции с базой данных}

WebSQL

Page 14: Databases on Client Side

Создание Базы данных

db = openDatabase('mydb','1.0','Комментарий к базе данных', 2*1024*1024);

WebSQL

Page 15: Databases on Client Side

Создание таблиц

db.transaction(function(tx){ tx.executeSql('CREATE TABLE IF NOT EXISTS tweets (id INTEGER PRIMARY KEY, date, tweet ) ');});

WebSQL

Page 16: Databases on Client Side

Создание таблиц

db.transaction(function(tx){ tx.executeSql('CREATE TABLE IF NOT EXISTS tweets (id INTEGER PRIMARY KEY, date, tweet ) ',[],callback_success, callback_error);});

WebSQL

Page 17: Databases on Client Side

WebSQL

Page 18: Databases on Client Side

Добавление данных в таблицу

db.transaction(function(tx){ tx.executeSql('INSERT INTO tweets (date, tweet) VALUES (?,?)', [(new Date), 'Первое сообщение']) }, callback_error_function );

WebSQL

Page 19: Databases on Client Side

WebSQL

Page 20: Databases on Client Side

Извлечение данных из таблицы

db.transaction(function(tx){ tx.executeSql('SELECT * FROM tweets

WHERE date>("%s", "now", "-5 minutes")', [], function(tx, results){ for (var i=0; i<results.rows.length; i++){ span.textContent = results.rows.item(i).tweet;} } )};);

WebSQL

Page 21: Databases on Client Side

Позитивные стороны:● По скорости быстрее чем WebSQL● Есть API как для синхронной так и для

асинхронной работы ● Транзакционность

Негативные стороны:● Неудобный интерфейс (не поддерживает SQL)● Нет удобств которые есть в SQL - сортировка,

полнотекстовый поиск ● Не поддерживаются всеми браузерами (FireFox,

Chrome, IE-10, Opera и Safari)

IndexedDB

Page 22: Databases on Client Side

Инициализация window.IndexedDB Object

window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction;

IndexedDB

Page 23: Databases on Client Side

Создание индексированной базы данных

var request = window.indexedDB.open("Books"); request.onsuccess = function(event){

db = event.target.result; // обработка контроля версий // создание нового хранилища объектов }; request.onerror = function(event){ console.log('Ошибка инициализации базы данных'); };

IndexedDB

Page 24: Databases on Client Side

Создание хранилища объектов

var store = db.createObjectStore('classic', { keyPath: 'title', autoIncrement: false }); // хранилище объектов готово

IndexedDB

Page 25: Databases on Client Side

Добавление(add) и помещение(put) объектов в хранилище

var book = { title: "Название", author: "Автор", raiting: 10, date: (new Date).getTime(); } READ_WRITE = IDBTransaction.READ_WRITE

IndexedDB

Page 26: Databases on Client Side

Добавление(add) и обновление(put) объектов в хранилище

var transaction = db.transaction(['classic'], READ_WRITE), store = transaction.objectStore('classic'), request = store.put(book);

IndexedDB

Page 27: Databases on Client Side

Извлечение объектов (get)

var transaction = db.transaction(['classic'], READ_WRITE), store = transaction.objectStore('classic'), request = store.get(key);

IndexedDB

Page 28: Databases on Client Side

● Вопросы кроссбраузерности баз данных

● Применение WebSQL и IndexedDB в современных веб-проектах

Общие моменты БД

Page 29: Databases on Client Side

WebSQL кроссбраузерность

Page 30: Databases on Client Side

IndexedDB кроссбраузерность

Page 31: Databases on Client Side

● Сохранение и работа с большими объемами структурированных данных

● Поддержка разных типов ● Большая скорость ● Возможность кеширования

больших объемов данных (работа как веб приложение)

● Транзакционность, асинхронность

Базы данных. Сейчас и завтра