apresentando o azure documentdb
TRANSCRIPT
#GlobalAzure
Apresentando o Azure DocumentDBLuciano Moreira [ Luti ]
http://luticm.blogspot.com
http://www.linkedin.com/in/luticm
@luticm
Patrocinadores
• Roadmap: SQL Server, DB2, Oracle, beyond relational, …
■ Motivação■ Azure DocumentDB
■ Conceitos e recursos■ Indexação, consistência e transações■ Modelagem■ Programação
■ Demonstrações■ Conclusão■ Referências
Agenda
■ SGBDRs vão acabar!
■ OK, mas NoSQL tem seu lugar ao sol...■ Column oriented (Accumulo, Cassandra, HBase, Vertica, ...)
■ Key-value store (MemcacheDB, Redis, Riak, ...)
■ Document store (Apache CouchDB, Couchbase, MongoDB, ...)
■ Graph databases (Neo4j, Allegro, OrientDB, ...)
Motivação
■ Michael Stonebreaker■ Postgre, Ingres, VoltDB
■ Turing award – 25 de março de 2015
Motivação
Motivação
■Existem cenários em que um modelo diferente do relacional tradicional é interessante
■ Flexibilidade de esquema
■ Agilidade no desenvolvimento
■ Mecanismos de escalabilidade nativos
■ Recursos built-in resolvem problemas complexos
Motivação
■ User generated content
■ Catalog data
■ Log data
■ User preferences data
■ Device sensor data (IoT)
■ http://azure.microsoft.com/en-us/documentation/articles/documentdb-use-cases/
Motivação
■ Uma alternativa NoSQL no Azure■ GA em 08 de Abril de 2015
■ Suporte nativo JSON e Javascript
■ Linguagem similar ao SQL
■ Cloud based e diferentes níveis de performance
■ Esquema flexível
■ Estruturado sobre “low-latency, write-optimized, SSD storage”
■ Interface RESTful HTTP
Azure DocumentDB
■ Recursos■ Database account■ Database■ User■ Permission■ Collection■ Document■ Attachment■ Stored procedure, trigger, UDF
Azure DocumentDB
■ Indexação automática de todos os documentos■ “write-optimized, lock-free and log-structured index maintenance techniques”
■ Políticas de indexação■ Definir política padrão (indexar tudo ou não)
■ Excluir documentos específicos (indexingPolicy ou header de requisição [x-ms-indexingdirective])
■ Incluir/excluir paths específicos
■ Síncrono (consistente) ou assíncrono (lazy)
Azure DocumentDB
■ ACID vs BASE
■ Níveis de consistência suportados■ Strong
■ Bounded staleness
■ Session
■ Eventual
■ Transações: garantidas para server-side scripts■ Dentro de uma coleção
Azure DocumentDB
■ Stored procedures
■ Triggers: pré e pós operação
■ User defined functions
■ Internamente todo código é envolto em um BEGIN TRANSACTION e COMMIT TRANSACTION
■ Exceção é tratada como ROLLBACK TRANSACTION
Azure DocumentDB
var createDocumentStoredProc = {
id: "createMyDocument",
body: function createMyDocument(documentToCreate) {
var context = getContext();
var collection = context.getCollection();
var accepted = collection.createDocument(collection.getSelfLink(),
documentToCreate,
function (err, documentCreated) {
if (err) throw new Error('Error' + err.message);
context.getResponse().setBody(documentCreated.id)
});
if (!accepted) return;
}
}
Azure DocumentDB
■ Sim, existe “modelagem” para o JSON■ Embed, FKs, N-N e híbridos
■ Limitações do DocumentDB■ Bancos, usuários, coleções, etc.
■ Maximum Request Units / second per collection
■ Como você irá dividir os documentos entre as coleções?
Azure DocumentDB
Azure DocumentDB
■ RANGE PARTITION
Azure DocumentDB
■ LOOKUP PARTITION
Azure DocumentDB
■ HASH PARTITION
Azure DocumentDB
■ RANGE LOOKUP PARTITION (composto)
■ Bibliotecas■.NET■ Java■ Python■ Javascript■ Node.js
■Integrações■ DocumentDB e Azure Search■ Hadoop job com conector para o DocumentDB
Azure DocumentDB
■ DocumentDB é um banco simples de se trabalhar
■ Escalabilidade e rápido desenvolvimento
■ Transações e modelos de consistências claros, mesmo para mindset relacional
■ Cuidado com modelagem, limitações e políticas
■ “Developer friendly”
■ Donald Feinberg em Maio/2014...
Conclusão
■ Portal DocumentDBhttp://azure.microsoft.com/en-us/services/documentdb/
■ Blog DocumentDBhttp://blogs.msdn.com/b/documentdb/
■ Query playgroundhttp://www.documentdb.com/sql/demo■ Channel 9 Videoshttp://channel9.msdn.com/Series/Developing-Solutions-with-Azure-DocumentDB
Referências
http://luticm.blogspot.com
http://www.linkedin.com/in/luticm