introducción a azure documentdb

105

Upload: jose-redondo

Post on 06-Aug-2015

264 views

Category:

Technology


4 download

TRANSCRIPT

Microsoft Data PlatformAvanet

Jose RedondoMicrosoft SQL Server MVP | CEO EntornoDB | DPA SolidQ

[email protected] | @redondoj | redondoj.wordpress.com

Introducción a Azure DocumentDB

Expositor

• Data Architect• BI Expert, Data Analysis & Big Data• Dev Client, Web & Database .NET - Java• Dev – DBA Microsoft, SyBase, IBM &

Oracle• Speaker Latam “Microsoft, Avanet,

FirstCloud, ShareCol” & USA “ITProCamp”

• SQL Server MCP – MSTS – MTA• Contributing Technical Reviewer Packt

Publishing

Microsoft SQL Server MVP | CEO EntornoDB | DPA SolidQ

Introducción aAzure DocumentDB

Agenda

• Introducción• Configuración• Creando Bases de Datos, Documentos y Colecciones• Trabajando con Documentos• Desarrollo con .NET• Procedimientos Almacenados, Triggers y Funciones• Demos• Conclusiones

Introducción

Introducción

• Que es Azure DocumentDB?• NoSQL… ? Porque… ?• NoSQL… ? Porque no… ?• Microsoft Databases en Azure• Características y Beneficios de DocumentDB• Modelo de Recursos• Modelo de Recursos DocumentDB• Resumen

Que es Azure DocumentDB?

• Orientado a Documentos• Almacén de datos NoSQL libre de

Schema• Base de datos completamente

administrable como un servicio• Disponible para suscriptores de Microsoft

Azure

NoSQL… ? Porque… ?

• Simplicidad de diseño• Habilidad de escalar horizontalmente• Ejecución de aplicaciones de entorno

web en tiempo real y Big Data

NoSQL… ? Porque no… ?

• Consistencia de compromiso con la tecnología actual• Uso de lenguajes de consulta de

bajo nivel• Algunas interfaces

estandarizadas• Numerosas inversiones de SQL

en la actualidad

Microsoft Databases en Azure

• Relacional• SQL Database (PaaS – Platform as a Services)• SQL Server (IaaS – Infrastructure as a Service)

• NoSQL• Azure Tables – Almacén de valores claves • Azure DocumentDB – Base de datos de documentos

Características y Beneficios de DocumentDB

• Consultas Ad hoc con sintaxis SQL• Ejecución de JavaScript dentro

de la base de datos• Niveles de consistencia

regulables• Completamente administrable• Almacenamiento y rendimiento

elásticamente escalable• Abierto al Diseño de

Aplicaciones de bases de datos

Características y Beneficios de DocumentDB

• Base de datos documental NoSQL, Poca aplicación en Schema• Totalmente gestionable,

con capacidad aprovisionada• Las entidades almacenadas

son documentos JSON• Consistencia ajustable• Diseñado para su

escalamiento en Petabytes

Modelo de Recursos

Database AccountDatabase

CollectionDocument

AttachmentStored ProcedureTriggerUser-defined functionsUser

PermissionMedia

Modelo de Recursos DocumentDB

Modelo de Recursos DocumentDB

• Database Account• Una o más unidades de capacidad• Único DNS

• Database• Contenedor lógico de usuarios y colecciones• Particiones a través colecciones

Modelo de Recursos DocumentDB

• Collection• Contenedor de documentos JSON• Alcance de las transacciones y

consultas• Unidad más pequeña de la

Escalación

• Document• Objetos CRUD (Acrónimo: Create,

Read, Update y Delete) habilitados en una colección

• No hay forzamiento de esquema o tipos de datos especializados

Modelo de Recursos DocumentDB

• Users• Namespace lógico para

alcances de permisos• Pueden representar

Personas o Funciones

• Permissions• Token de autorización

asociada a un usuario• Controla el acceso a

recursos específicos

Modelo de Recursos DocumentDB

• Stored Procedures, Triggers y User-Defined-Functions• Lógica en la aplicación para

ejecutarse directamente en la transacción de la base de datos• Escrito completamente en

JavaScript

• Attachments y Media• Permite el almacenamiento de

blobs / medios binarios • Puede ser en DocumentDB o en

una tienda de medios remoto (Adjunto)

Recursos del Sistema vs.Recursos Definidos por el Usuario

Propiedad Configurables por el usuario o generado por el sistema? Proposito

_rid Generado por el Sistema Generados por el sistema, identificador único y jerárquico de los recursos

_etag Generado por el Sistema etag de los recursos necesarios para el control de simultaneidad optimista

_ts Generado por el Sistema Última actualización Timestamp del recurso

_self Generado por el Sistema Direccionamiento único URI del recurso

id Configurado por el Usuario Nombre único definido por el usuario del recurso

Resumen

• Libre de Schema• JSON Document• Estándar del mercado para pasar datos entre un servidor y

una aplicación web• Reemplazo para XML• Jerárquico• Abreviado• Tipos de datos simples

Resumen

• Collections• Unidad de escala, Transacciones y Consultas• DocumentDB escalable mediante la adición de colecciones

adicionales• Respaldado por almacenamiento SSD flexible• Indexación automática

• Por defecto, los documentos están indexados como cuando son agregados a la colección

• Habilitado para la optimización de escritura siendo libre de bloqueo así como técnicas de mantenimiento de indexación de registros estructurados

• Énfasis en las rápidas escrituras mientras servía consultas consistentes• Políticas pueden ser configuradas a nivel de colección

Resumen

• Desarrollo contra DocumentDB - Diferentes APIs• Python• REST API• Node.js• SQL• .NET/LINQ• JavaScript

Configuración

Configuración

• Crear una Cuenta• Costo actuales• Disponibilidad Geográfica• Qué es un CU?• Límites y aplicaciones de cuotas para DocumentDB• Configuración de las políticas de indexación de

Collection

Crear una Cuenta

• Actualmente solo disponible en el nuevo portal en versión Preview

http://portal.azure.com

Crear una Cuenta

• Actualmente solo disponible en el nuevo portal en versión Preview

http://portal.azure.com

Crear una Cuenta

Crear una Cuenta

Crear una Cuenta

Crear una Cuenta

Crear una Cuenta

Crear una Cuenta

Costo actuales

• Solamente en edición Estándar

Disponibilidad Geográfica

Qué es un CU?

• CU = Unidad de Capacidad

• Unidad de Escalabilidad para DocumentDB

• 1 CU de ejecución por segundo

• 2,000 lecturas de documentos simples

• 500 inserciones/actualizaciones/eliminaciones de documentos simples

• 1,000 consultas de documentos simples

• 20 procedimientos almacenados (Asumiendo la inserción / ejecución de un procedimiento almacenado de 50 documentos)

• Si llegamos a necesitar escalar nuestro escenario de ejecución, añadimos otra CU!

Límites y aplicaciones de cuotas para DocumentDB

ENTIDAD (OFERTA ESTÁNDAR PARA

LA VERSIÓN PRELIMINAR)

Cuentas de la base de datos 5

Número de bases de datos por cuenta de base de datos 100

Número de usuarios por cuenta de base de datos en todas las bases de datos 500.000

Número de permisos por cuenta de base de datos en todas las bases de datos 2.000.000

Almacenamiento anexo por cuenta de base de datos 2 GB

Número máximo de unidades de capacidad por cuenta de base de datos 50

Número de colecciones por unidad de capacidad 3

Límites y aplicaciones de cuotas para DocumentDB

ENTIDAD (OFERTA ESTÁNDAR PARALA VERSIÓN PRELIMINAR)

Almacenamiento asignado mínimo por colección con 1 documento como mínimo 3,3 GB

Rendimiento asignado mínimo por colección con 1 documento como mínimo

667 unidades de solicitud (RU)

Elasticidad de una colección 0-10 GB

Unidades de solicitud/s máximos por colección 2000

Número de procedimientos almacenados, desencadenadores y UDF por colección 25 cada uno

Tiempo de ejecución máximo para el procedimiento almacenado y desencadenador 5 segundos

Almacenamiento de documentos/unidad de capacidad aprovisionados 10 GB

Límites y aplicaciones de cuotas para DocumentDB

ENTIDAD (OFERTA ESTÁNDAR PARA

LA VERSIÓN PRELIMINAR)

Unidades de solicitud/s/unidad de capacidad aprovisionadas 2000

Almacenamiento de documentos máximo por base de datos (5 unidades de capacidad) 500 GB

Longitud máxima de la propiedad de identificador 255 caracteres

Número predeterminado de elementos por página 100

Elementos máximos por página 1000

Tamaño de solicitud máximo del documento y el adjunto 512KB

Tamaño de solicitud máximo del procedimiento almacenado, desencadenador y UDF 256KB

Tamaño máximo de respuesta 1MB

Límites y aplicaciones de cuotas para DocumentDB

ENTIDAD (OFERTA ESTÁNDAR PARALA VERSIÓN PRELIMINAR)

Número máximo de rutas exclusivas por colección 100

String

Todas las cadenas se deben ajustar a la codificación UTF-8. Dado que UTF-8 es una

codificación de ancho variable, los tamaños de las cadenas se determinan mediante los bytes

UTF-8

Longitud máxima de propiedad o valor Sin límite práctico

Número máximo de UDF por consulta 1

Número máximo de JOIN por consulta 2

Número máximo de cláusulas AND por consulta 5

Número máximo de cláusulas OR por consulta 5

Configuración de las políticas de indexación de Collection

• Indexación automática• Puedes activarlo o desactivarlo• Puedes escoger el incluir o excluir documentos específicos (x-ms-indexingdirective)

Configuración de las políticas de indexación de Collection

• Incluir o excluir rutas especificas dentro de los documentos• Indexación Sincrónica vs. Indexación Asincrónica• Indexación Sincrónica es predeterminada en el sistema• Indexación divagada ideal para escenarios de ejecución de

inserciones masivas en colecciones de densa lectura

Creando Bases de Datos, Documentos y Colecciones

Creando Bases de Datos, Documentos y Colecciones• Estableciendo la conexión• Modelando datos RDBMS• Modelando datos en DocumentDB• Creando una Base de Datos• Creando un Documento

Estableciendo la conexión

• Cuenta Endpoint de DocumentDB• Clave de acceso Primaria y Secundaria• Proporcionar acceso administrativo a la cuenta• Puede recuperar las claves con acceso limitado según

permisos

Recomendación (Buenas Practicas): No almacenar tokens de acceso a la aplicación en el código fuente (o en las demos)

Estableciendo la conexión

Modelando datos RDBMS

Modelando datos RDBMS

Modelando datos en DocumentDBLa

Lect

ura

es

un

a o

pera

ción

La E

scri

tura

es

un

a o

pera

ción

Nin

n a

ssem

blie

s es

ap

licab

le

Creando una Base de Datos

Creando un Documento

Requiere la propiedad

DocumentsLink del

Collection donde se

almacenara el documento

Trabajando con Documentos

Trabajando con Documentos

• Descargando un Documento• Eliminando un Documento• Operaciones• Escenarios• Performance - Targets de Escalabilidad• Escenarios integrados• Errores

Descargando un Documento

• Las actualizaciones se realizan a través del reemplazo de un documento

Eliminando un Documento

Operaciones

• Para cada recurso:• Create• Replace• Delete• Read• Query

• Read es una operación GET en un ID de recurso especificado, devolviendo un único recurso.

• Query es una operación POST sobre una colección con un Requests en el body conteniendo el texto DocumentDB SQL, retornando una posible colección empty de recursos.

• Query puede ser filtrado solamente en propiedades indexadas

Escenarios

DocumentDB SQL

• SELECT <select-list> FROM <from-specification> WHERE <filter-condition>• Similar al SQL normal• Sólo apoyado con Self-Join• Capacidad para llegar al árbol de JSON:

• Valores accesible para condiciones de filtrado• Lista de selección de Shape

• Funciones definidas por el usuario• Soporte de LINQ-to-SQL para .NET

Escenarios

LINQ

Escenarios

LINQ Lambda

Performance - Targets de Escalabilidad• Unidad de Capacidad

• Cantidad especificada de capacidad de almacenamiento y rendimiento operacional

• Cuota del Collection por cada unidad de capacidad• Unidad de aprovisionamiento para la escala de rendimiento y

almacenamiento• Configurado a nivel de cuenta de base de datos• Compartible entre todas las bases de datos y Collections en la

cuenta de base de datos

• Almacenamiento es SSD respaldado• Microsoft ha estado usando las bases de datos con terabytes

de almacenamiento (Diseñado para Petabytes)

Performance - Targets de EscalabilidadHipótesis:• Documento de 1 KB con 10 propiedades• Nivel de consistencia de sesión• Indexación automática

Operación de Base de DatosOperaciones / Segundos

(Unidades de Solicitudes)

Read por documento 2000

Insert, Replace, Update por documento 500

Consulta simple (Retornando un documento)

1000

Procedimiento Almacenado con 50 Inserts

20

Solicitudes son neutralizadas si el consumo excede al objetivo que posee la unidad de capacidad total

Escenarios integrados

• Hay se encuentran las relaciones entre entidades.

• Hay se albergan algunas relaciones entre entidades.

• No hay datos integrados que cambia con poca frecuencia.

• Hay datos integrados que no va a crecer sin límite.

• Hay datos integrados que son esenciales para datos en un documento.

Ejemplos de cuándo no integrar• Como un blog publicar comentarios o pedidos

de los clientes para la empresa

Errores

Importante: Reloj local no está sincronizado con Azure

Desarrollo con .NET

Desarrollo con .NET

• RESTful API• Download• Class: DocumentClient• Class: Resource• Class: Database• Class: DocumentCollection

Desarrollo con .NET

• Data Model• Class: Document• Class:

ResourceResponse<T>• Read• Delete• Replace

Desarrollo con .NET

• Read From a Feed• DocumentDB Queries• SQL Query• LINQ Query• LINQ Lambda With Paging

RESTful API

• Interfaz base en DocumentDB• Utilizado por todas las bibliotecas

cliente

• Operaciones estándar con todos los recursos DocumentDB:• CREATE, DELETE, PUT, GET, POST• Devuelve la URL del recurso

permanente en su creación

• Autenticación HMAC utilizando la clave de gestión o de recursos• Headers de petición

DocumentDB

Download

• NET API alojados en NuGet• Paquete de instalación

Microsoft.Azure.Documents.Client (Preview)

• Instala los paquetes DocumentDB y JSON.NET

Class: DocumentClient

• Construido con Endpoint URL y la key de gestión para la cuenta de la base de datos

• Proporciona métodos de Async/Await para las operaciones CRUD (Create, Read, Update & Delete) sobre recursos DocumentDB

• Gestiona la conexión a DocumentDB

// Create DocumentClientString documentDbAddress = "https://{account}.documents.azure.com";String authorizationKey = "key==";Uri documentDbUri = new Uri(documentDbAddress);DocumentClient documentClient = new DocumentClient(documentDbUri, authorizationKey);

Class: Resource

• Clase base para todas las clases de recursos de DocumentDB• Expone lo siguiente:

• ETag - Utilizada para la concurrencia optimista

• SelfLink – Ruta URL para recursos

• ResourceID – ID interno (Base64 encoded) para recursos

• ID – ID de los recursos, proporcionada o generada

Class: Database

• Derivado desde los recursos• Agrega propiedades exponiendo Collections y

Users

// Create databaseDatabase database = new Database { Id = databaseId };

ResourceResponse<Database> response = await documentClient.CreateDatabaseAsync(database);database = response;String selfLink = database.SelfLink;String collections = database.CollectionsLink;String users = database.UsersLink;

Class: DocumentCollection

• Derivado desde los recursos• Agrega propiedades exponiendo DocumentsLink,

StoredProceduresLink, TriggersLink, UserDefinedFunctionsLink

// Create document collectionDocumentCollection documentCollection = new DocumentCollection { Id = "SomeId" };ResourceResponse<DocumentCollection> response = await documentClient.CreateDocumentCollectionAsync( database.SelfLink, documentCollection);documentCollection = response;

Data Model

• Utiliza librería JSON.NET para la serialización• Clase simple

• Ninguna clase especial base• Todas las propiedades públicas se

serializan en JSON

• Evidente asignación de .NET a JSON• IList, etc. -> Array• Int32, etc. -> Integer• Float, etc. -> Float• DateTime -> String• Byte[] -> String

Class: Document

• Derivado desde los recursos• Agrega la propiedad a exponer

AttachmentsLink

// Insert documentResourceResponse<Document> response = await documentClient.CreateDocumentAsync( documentCollection.SelfLink, someDocumentEntity);Document document = response;

Class: ResourceResponse<T>

• Encapsula la respuesta de una operación de recurso DocumentDB• Provee información de cuotas

y uso dependiendo de los recursos• Contiene los Headers de

respuesta incluyendo HTTP StatusCode• Expone implícitamente el

recurso escrito desde el response

Read

• Una operación de lectura devuelve un solo documento

ResourceResponse<Document> response = await documentClient.ReadDocumentAsync(documentLink);Album album =JsonConvert.DeserializeObject<Album>(response.Resource.ToString());

Delete

Album album = new Album() { AlbumName = "Let It Bleed", BandName = "Rolling Stones", ReleaseYear = "1969“};Document document = await documentClient.CreateDocumentAsync( documentCollection.SelfLink, album);ResourceResponse<Document> secondResponse = await documentClient.DeleteDocumentAsync( document.SelfLink);

Replace

dynamic readResponse = await documentClient.ReadDocumentAsync(documentLink);RequestOptions requestOptions = new RequestOptions() { AccessCondition = new AccessCondition() { Type = AccessConditionType.IfMatch, Condition = readResponse.Resource.ETag }};Album album = (Album)readResponse.Resource;album.ReleaseYear = "1990";ResourceResponse<Document> replaceResponse = await documentClient.ReplaceDocumentAsync( documentLink, album, requestOptions);

Read From a Feed

• La API de .NET puede devolver todos los recursos en una colección como paginada "Feed."

String continuation = String.Empty;Do { FeedOptions feedOptions = new FeedOptions { MaxItemCount = 10, RequestContinuation = continuation }; FeedResponse<dynamic> response = await documentClient.ReadDocumentFeedAsync( documentCollectionLink, feedOptions); continuation = response.ResponseContinuation;} while (!String.IsNullOrEmpty(continuation));

DocumentDB Queries

• DocumentDB soporta consultas en todos los niveles de recursos, incluyendo:• Database, DocumentCollection, and

Document

• .NET API soporta los siguientes tipos de consultas:• SQL• LINQ SQL• LINQ Lambda

La clase DocumentQueryable expone métodos de extensión helper para crear varios tipos de consulta

SQL Query

foreach (var album in documentClient.CreateDocumentQuery<Album>( documentCollection.SelfLink, "SELECT * FROM albums a WHERE a.bandName = 'Radiohead'")) { Console.WriteLine("Album name: {0}", album.AlbumName);}

Tenga en cuenta que "albums" es el nombre del DocumentDB Collection

LINQ Query

IQueryable<Album> albums = from a in documentClient.CreateDocumentQuery<Album>( documentCollection.SelfLink) where a.BandName == "Radiohead" select a;

foreach (var album in albums) { Console.WriteLine("Album name: {0}", album.AlbumName)}

LINQ Lambda With Paging

FeedOptions feedOptions = new FeedOptions() { MaxItemCount = 10};

var query = documentClient.CreateDocumentQuery<Album>( documentCollection.SelfLink, feedOptions) .Where(a => a.BandName == "Radiohead") .AsDocumentQuery();do { foreach (Album album in await query.ExecuteNextAsync()) { Console.WriteLine("Album name: {0}", album.AlbumName); }} while (query.HasMoreResults);

Procedimientos Almacenados, Triggers y Funciones

Procedimientos Almacenados, Triggers y Funciones• Creando un Procedimiento Almacenado• Registrando un Procedimiento Almacenado• Ejecutando un Procedimiento Almacenado• Consistencia• Niveles de Consistencia• Indexando

• JavaScript como un día moderno de T-SQL• Lenguaje de programación

de alto nivel• Transacciones atómicas• JavaScript permite

optimización cuando se trata de documentos JSON• Procesamiento por lotes• Compilación previa• Secuencia

• Lógica de negocio encapsulada• 5 segundo de timout

Creando un Procedimiento Almacenado

Registrando un Procedimiento Almacenado

Ejecutando un Procedimiento Almacenado

ConsistenciaTra

de-o

ff en

tre la

tencia

, d

ispon

ibilid

ad

y co

nsiste

ncia

Niveles de Consistencia

• Strong• Write es visible sólo después

de que se ha comprometido de forma duradera por la mayoría de las réplicas de quórum

• Menor nivel de rendimiento de Read/Write

• Bounded Staleness• Garantiza el fin de la

propagación de Writes• Reads podría retrasarse detrás

o más allá de las Writes

Niveles de Consistencia

• Session• Tu puedes ver tus Writes• Latencia de Writes bajo

• Eventual• NoSQL clásico• Consistencia débil• Rendimiento rápido, Baja

latencia

Indexando• Especificado en el nivel del

Collection• Soporta indexación lenta• Todo es indexado por defecto• Soporta dos modos:

• Automatic Indexing:• Esto es tunable para documentos

individuales y rutas dentro de un documento, aplicando inclusión o exclusión de una ruta establecida

• Los Índices de precisión pueden especificarse para cadenas y números

Indexando

• Indexing Mode:• Consistent - Por índices

predeterminados sincrónicamente actualización en Insertn Replace o Delete

• Lazy - Actualización del índice asíncrono (Dirigido a los escenarios de Bulk Ingestion)

• Opcional In o Out en la creación de los objetos Collection

Indexando

• Alcance - Es apropiado para los números que necesitan filtrarse con >=, >, <, <=• Hash - Excelente para los

cadenas

Demos

http://www.documentdb.com/sql/demo

Conclusiones

Conclusiones

• Base de datos documental totalmente gestionado para almacenar entidades JSON• Alta escalabilidad y

performance• Gran variedad de bibliotecas

de desarrollo cliente• .Net, Node.js, JavaScript,

Python• Soportado sólo en el nuevo

portal de Azure

Preguntas & Respuestas

Recursos

www.documentDB.com/sql/demo

https://social.msdn.microsoft.com/forums/azure/en-US/home?forum=AzureDocumentDB

http://feedback.azure.com/forums/263030-documentdb

https://github.com/mingaliu/DocumentDBStudio

 

Documentación: http://documentdb.com

 

Azure Portal: http://portal.azure.com

 

Channel 9: http://channel9.msdn.com/Shows/Data-Exposed/Introduction-to-Azure-DocumentDB

Jose RedondoMicrosoft SQL Server MVP | CEO EntornoDB | DPA [email protected] | @redondoj | redondoj.wordpress.com