introducción a azure documentdb
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
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
• 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
• 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
• 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
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• 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)
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
gú
n a
ssem
blie
s es
ap
licab
le
Creando un Documento
Requiere la propiedad
DocumentsLink del
Collection donde se
almacenara el documento
Trabajando con Documentos
• Descargando un Documento• Eliminando un Documento• Operaciones• Escenarios• Performance - Targets de Escalabilidad• Escenarios integrados• Errores
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
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
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• 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
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
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
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