SlideShare uma empresa Scribd logo
1 de 34
Baixar para ler offline
IndexedDB
Seu banco de dados no client side
Hello World
github.com/maikenegreiros
twitter.com/maike_negreiros
maike@ciebit.com.br
Maike Negreiros
Armazenamento de dados
no cliente
● Cookies
● Web Storage
● IndexedDB
Cookies
● Inseridos no cabeçalho HTTP
● Menor espaço de armazenamento
● Perda de performance
● Difícil gerenciamento
Cookies
document.cookie = "usuario=Fulano";
document.cookie = "username=John Doe;
expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/";
Web Storage
● localStorage/sessionStorage
● Maior espaço de armazenamento
● Per Domain
● chave/valor
● Armazenamento de strings
● Mais fácil gerenciamento
● Maior segurança
● Necessidade de parsear JSON
Web Storage - Métodos
● setItem(chave, valor)
● getItem(chave)
● removeItem(chave)
● clear()
Web Storage - Exemplo
localStorage.setItem(nome, “João”)
let nome = localStorage.getItem(nome)
Suporte
IndexedDB
● Maior espaço de armazenamento
● Per Domain
● Assíncrona
● chave/valor
● Armazena qualquer tipo de dado
● Modelo Transacional
● Sem necessidade de parsear JSON
Representação visual
Abrindo uma conexão
let pedidoConexao <IDBOpenDBRequest> =
window.indexedDB.open('ValeWebLivre', 1)
IDBOpenDBRequest
● Retorno do método open()
● Armazena um objeto IDBDatabase
● Tríade de Eventos
A tríade
● onupgradeneeded
● onsuccess
● onerror
onupgradeneeded
pedidoConexao.onupgradeneeded = () => {
//Cria as ObjectStores aqui
}
onsuccess
pedidoConexao.onsuccess = () => {
//Aqui é onde manipulamos os dados das objectStore
}
onerror
pedidoConexao.onerror = () => {
//Aqui é onde tratamos os erros
}
IDBDatabase
● Representa uma conexão ao Banco de Dados
● É onde se inicia uma transação
● Possui métodos de criação e exclusão de
objectStores
IDBDataBase
pedidoConexao.onsuccess = () => {
let banco <IDBDataBase> = pedidoConexao.result
}
IDBObjectStore
● Representa um objectStore
● É onde são chamados os métodos de CRUD
IDBObjectStore
pedidoConexao.onupgradeneeded = () => {
let banco <IDBDataBase> =
pedidoConexao.result
–
let objectStore <IDBObjectStore> =
banco.createObjectStore(‘palestras’,
{autoIncrement: true})
}
IDBObjectStore
pedidoConexao.onsuccess = () => {
let banco <IDBDataBase> =
pedidoConexao.result
–
– let transacao <IDBTransaction> =
banco.transaction([‘palestras’], ’readwrite’)
–
– let objectStore <IDBObjectStore> =
transacao.objectStore(‘palestras’)
}
IDBTransaction
● Representa um transação
● Aceita um array de objectStores
● Pode ser readonly ou readwrite
IDBTransaction
pedidoConexao.onsuccess = () => {
let banco <IDBDataBase> = pedidoConexao.result
–
– let transacao <IDBTransaction> =
banco.transaction([‘palestras’], ’readwrite’)
}
IDBRequest
● Dá acesso a resultados de requisições
assíncronas ao BD e a objetos do BD.
● É o retorno de um método de CRUD
● Possui eventos para tratar os dados
IDBRequest
pedidoConexao.onsuccess = () => {
let banco <IDBDataBase> = pedidoConexao.result
–
– let transacao <IDBTransaction> =
banco.transaction([‘palestras’], ’readwrite’)
–
– let objectStore <IDBObjectStore> =
transacao.objectStore(‘palestras’)
–
– let pedidoAdicao <IDBRequest> =
objectStore.add({nome: “IndexedDb: Seu banco de dados
no client-side”, palestrante: “Maike Negreiros”})
}
IDBRequest
pedidoConexao.onsuccess = () => {
//código anterior ocultado
–
– pedidoAdicao.onsuccess () => {
● let key = pedidoAdicao.result
– }
–
– pedidoAdicao.onerror() => {
● pedidoAdicao.error
– }
}
IDBIndex
● Retorno de uma chamada do método createIndex
● Contém informações do index criado
● Assim com o IDBObjectStore, possui o método get
IDBIndex
pedidoConexao.onupgradeneeded = () => {
let banco <IDBDataBase> =
pedidoConexao.result
–
let objectStore <IDBObjectStore> =
banco.createObjectStore(‘palestras’,
{autoIncrement: true})
–
let index <IDBIndex> =
objectStore.createIndex("idx_palestrante",
"palestrante", {unique: false})
}
IDBIndex
pedidoConexao.onsuccess = () => {
let banco <IDBDataBase> = pedidoConexao.result
–
– let transacao <IDBTransaction> =
banco.transaction([‘palestras’], ’readwrite’)
–
– let objectStore <IDBObjectStore> =
transacao.objectStore(‘palestras’)
–
– let index <IDBIndex> =
objectStore.index(“idx_palestras”)
}
Suporte
IndexedDB vs SQL
SQL IndexedDB
CREATE DATABASE ValeWebLivre indexedDB.open('ValeWebLivre',1)
CREATE TABLE palestras; IDBDatabase
.createObjectStore('palestras')
DROP TABLE palestras IDBDatabase
.deleteObjectStore(‘palestras’)
INSERT INTO palestras() VALUES() transaction.store.add(Object)
AUTO_INCREMENT {autoIncrement: true}
PRIMARY KEY {keyPath: ‘id’}
CREATE INDEX idx_palestras ON
palestras(`palestrante`)
objectStore.createIndex("idx_pales
tras", "palestrante", {unique:
false})
Falar é fácil, cadê o
código rodando?
Pollyfills e bibliotecas
● IndexedDB Shim
● IndexedDB Promised
● Localforage
● Dexie.js
● Taffydb

Mais conteúdo relacionado

Semelhante a IndexedDB - Seu Banco de Dados no client-side

Secot banco de dados no sql de código aberto
Secot   banco de dados no sql de código abertoSecot   banco de dados no sql de código aberto
Secot banco de dados no sql de código aberto
Suissa
 
Desenvolvendo com mongodb
Desenvolvendo com mongodbDesenvolvendo com mongodb
Desenvolvendo com mongodb
Thiago Avelino
 
Windows Azure 5/8 - Recursos adicionais do Windows Azure
Windows Azure 5/8 - Recursos adicionais do Windows AzureWindows Azure 5/8 - Recursos adicionais do Windows Azure
Windows Azure 5/8 - Recursos adicionais do Windows Azure
Vitor Ciaramella
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
Terra / Neo
 

Semelhante a IndexedDB - Seu Banco de Dados no client-side (20)

Apresentando o Azure DocumentDB
Apresentando o Azure DocumentDBApresentando o Azure DocumentDB
Apresentando o Azure DocumentDB
 
Apresentação interbase (atualização 2)
Apresentação interbase (atualização 2)Apresentação interbase (atualização 2)
Apresentação interbase (atualização 2)
 
Secot banco de dados no sql de código aberto
Secot   banco de dados no sql de código abertoSecot   banco de dados no sql de código aberto
Secot banco de dados no sql de código aberto
 
Desenvolvendo com mongodb
Desenvolvendo com mongodbDesenvolvendo com mongodb
Desenvolvendo com mongodb
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Desenvolvimento de um CRUD utilizando Stored Procedure
Desenvolvimento de um CRUD utilizando Stored ProcedureDesenvolvimento de um CRUD utilizando Stored Procedure
Desenvolvimento de um CRUD utilizando Stored Procedure
 
Design de APIs REST
Design de APIs RESTDesign de APIs REST
Design de APIs REST
 
Palestra MongoDB
Palestra MongoDBPalestra MongoDB
Palestra MongoDB
 
Programação Web com jQuery
Programação Web com jQueryProgramação Web com jQuery
Programação Web com jQuery
 
Economize o Consumo de Link WAN com o BranchCache
Economize o Consumo de Link WAN com o BranchCacheEconomize o Consumo de Link WAN com o BranchCache
Economize o Consumo de Link WAN com o BranchCache
 
Windows Azure 5/8 - Recursos adicionais do Windows Azure
Windows Azure 5/8 - Recursos adicionais do Windows AzureWindows Azure 5/8 - Recursos adicionais do Windows Azure
Windows Azure 5/8 - Recursos adicionais do Windows Azure
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webapps
 
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenhoBig Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
 
Performance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | FlorianópolisPerformance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | Florianópolis
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day Workshop
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 
Quick Form DataBase (QFDB)
Quick Form DataBase (QFDB)Quick Form DataBase (QFDB)
Quick Form DataBase (QFDB)
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com Ajax
 

IndexedDB - Seu Banco de Dados no client-side