Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introducción a Azure DocumentDB

921 views

Published on

Una sencilla y simple exposición rápida de lo que es el servicio de las bases de datos NoSQL en Microsoft Azure "Azure DocumentDB" yéndonos desde las conceptualizaciones y cimientos conceptuales básicos hasta entender y validar como trabajar con modelo de datos JSON document para la creación de documentos repositorios así como de procedimientos almacenados en JavaScript como plataforma de servicio en Azure para con ellos, aplicarlos en las empresas de hoy. Estan tod@s cordialmente invitados a la misma.

Published in: Technology
  • Be the first to comment

Introducción a Azure DocumentDB

  1. 1. Microsoft Data Platform Avanet Jose Redondo Microsoft SQL Server MVP | CEO EntornoDB | DPA SolidQ redondoj@gmail.com | @redondoj | redondoj.wordpress.com Introducción a Azure DocumentDB
  2. 2. 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
  3. 3. Introducción a Azure DocumentDB
  4. 4. 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
  5. 5. Introducción
  6. 6. 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
  7. 7. 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
  8. 8. NoSQL… ? Porque… ? • Simplicidad de diseño • Habilidad de escalar horizontalmente • Ejecución de aplicaciones de entorno web en tiempo real y Big Data
  9. 9. 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
  10. 10. 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
  11. 11. 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
  12. 12. 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
  13. 13. Modelo de Recursos Database Account Database Collection Document Attachment Stored Procedure Trigger User-defined functions User Permission Media
  14. 14. Modelo de Recursos DocumentDB
  15. 15. 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
  16. 16. 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
  17. 17. 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
  18. 18. 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)
  19. 19. 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
  20. 20. 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
  21. 21. 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
  22. 22. Resumen • Desarrollo contra DocumentDB - Diferentes APIs • Python • REST API • Node.js • SQL • .NET/LINQ • JavaScript
  23. 23. Configuración
  24. 24. 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
  25. 25. Crear una Cuenta • Actualmente solo disponible en el nuevo portal en versión Preview http://portal.azure.com
  26. 26. Crear una Cuenta • Actualmente solo disponible en el nuevo portal en versión Preview http://portal.azure.com
  27. 27. Crear una Cuenta
  28. 28. Crear una Cuenta
  29. 29. Crear una Cuenta
  30. 30. Crear una Cuenta
  31. 31. Crear una Cuenta
  32. 32. Crear una Cuenta
  33. 33. Costo actuales • Solamente en edición Estándar
  34. 34. Disponibilidad Geográfica
  35. 35. 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!
  36. 36. 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
  37. 37. Límites y aplicaciones de cuotas para DocumentDB ENTIDAD (OFERTA ESTÁNDAR PARA LA 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
  38. 38. 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
  39. 39. Límites y aplicaciones de cuotas para DocumentDB ENTIDAD (OFERTA ESTÁNDAR PARA LA 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
  40. 40. 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)
  41. 41. 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
  42. 42. Creando Bases de Datos, Documentos y Colecciones
  43. 43. 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
  44. 44. 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)
  45. 45. Estableciendo la conexión
  46. 46. Modelando datos RDBMS
  47. 47. Modelando datos RDBMS
  48. 48. Modelando datos en DocumentDBLaLecturaesunaoperación LaEscrituraesunaoperación Ningúnassembliesesaplicable
  49. 49. Creando una Base de Datos
  50. 50. Creando un Documento Requierelapropiedad DocumentsLinkdelCollection dondesealmacenarael documento
  51. 51. Trabajando con Documentos
  52. 52. Trabajando con Documentos • Descargando un Documento • Eliminando un Documento • Operaciones • Escenarios • Performance - Targets de Escalabilidad • Escenarios integrados • Errores
  53. 53. Descargando un Documento • Las actualizaciones se realizan a través del reemplazo de un documento
  54. 54. Eliminando un Documento
  55. 55. 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
  56. 56. 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
  57. 57. Escenarios LINQ
  58. 58. Escenarios LINQ Lambda
  59. 59. 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)
  60. 60. Performance - Targets de Escalabilidad Hipótesis: • Documento de 1 KB con 10 propiedades • Nivel de consistencia de sesión • Indexación automática Operación de Base de Datos Operaciones / 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
  61. 61. 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
  62. 62. Errores Importante: Reloj local no está sincronizado con Azure
  63. 63. Desarrollo con .NET
  64. 64. Desarrollo con .NET • RESTful API • Download • Class: DocumentClient • Class: Resource • Class: Database • Class: DocumentCollection
  65. 65. Desarrollo con .NET • Data Model • Class: Document • Class: ResourceResponse<T> • Read • Delete • Replace
  66. 66. Desarrollo con .NET • Read From a Feed • DocumentDB Queries • SQL Query • LINQ Query • LINQ Lambda With Paging
  67. 67. 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
  68. 68. Download • NET API alojados en NuGet • Paquete de instalación Microsoft.Azure.Documents.Client (Preview) • Instala los paquetes DocumentDB y JSON.NET
  69. 69. 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 DocumentClient String documentDbAddress = "https://{account}.documents.azure.com"; String authorizationKey = "key=="; Uri documentDbUri = new Uri(documentDbAddress); DocumentClient documentClient = new DocumentClient(documentDbUri, authorizationKey);
  70. 70. 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
  71. 71. Class: Database • Derivado desde los recursos • Agrega propiedades exponiendo Collections y Users // Create database Database 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;
  72. 72. Class: DocumentCollection • Derivado desde los recursos • Agrega propiedades exponiendo DocumentsLink, StoredProceduresLink, TriggersLink, UserDefinedFunctionsLink // Create document collection DocumentCollection documentCollection = new DocumentCollection { Id = "SomeId" }; ResourceResponse<DocumentCollection> response = await documentClient.CreateDocumentCollectionAsync( database.SelfLink, documentCollection); documentCollection = response;
  73. 73. 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
  74. 74. Class: Document • Derivado desde los recursos • Agrega la propiedad a exponer AttachmentsLink // Insert document ResourceResponse<Document> response = await documentClient.CreateDocumentAsync( documentCollection.SelfLink, someDocumentEntity); Document document = response;
  75. 75. 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
  76. 76. Read • Una operación de lectura devuelve un solo documento ResourceResponse<Document> response = await documentClient.ReadDocumentAs ync(documentLink); Album album = JsonConvert.DeserializeObject<Alb um>(response.Resource.ToString());
  77. 77. 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);
  78. 78. 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);
  79. 79. 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));
  80. 80. 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
  81. 81. 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
  82. 82. 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) }
  83. 83. 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);
  84. 84. Procedimientos Almacenados, Triggers y Funciones
  85. 85. Procedimientos Almacenados, Triggers y Funciones • Creando un Procedimiento Almacenado • Registrando un Procedimiento Almacenado • Ejecutando un Procedimiento Almacenado • Consistencia • Niveles de Consistencia • Indexando
  86. 86. • 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
  87. 87. Creando un Procedimiento Almacenado
  88. 88. Registrando un Procedimiento Almacenado
  89. 89. Ejecutando un Procedimiento Almacenado
  90. 90. Consistencia Trade-offentrelatencia, disponibilidadyconsistencia
  91. 91. 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
  92. 92. 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
  93. 93. 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
  94. 94. 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
  95. 95. Indexando • Alcance - Es apropiado para los números que necesitan filtrarse con >=, >, <, <= • Hash - Excelente para los cadenas
  96. 96. Demos
  97. 97. http://www.documentdb.com/sql/demo
  98. 98. Conclusiones
  99. 99. 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
  100. 100. Preguntas & Respuestas
  101. 101. 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
  102. 102. Jose Redondo Microsoft SQL Server MVP | CEO EntornoDB | DPA SolidQ redondoj@gmail.com | @redondoj | redondoj.wordpress.com

×