Introducción a Azure Cosmos DB: API de GremlinIntroduction to Azure Cosmos DB: Gremlin API

Azure Cosmos DB  es el servicio de base de datos con varios modelos y distribución global de Microsoft para aplicaciones críticas.Azure Cosmos DB is the globally distributed, multi-model database service from Microsoft for mission-critical applications. Es una base de datos multimodelo que admite modelos de datos de documentos, pares clave-valor, grafos y familias de columnas.It is a multi-model database and supports document, key-value, graph, and column-family data models. La API Gremlin de Azure Cosmos DB se usa para almacenar y operar con datos de grafo en un servicio de base de datos totalmente administrado diseñado para cualquier escala.The Azure Cosmos DB Gremlin API is used to store and operate with graph data on a fully managed database service designed for any scale.

Arquitectura de grafo de Azure Cosmos DB

En este artículo se proporciona una introducción a Gremlin API de Azure Cosmos DB y se explica cómo se puede usar para almacenar grafos grandes con miles de millones de vértices y bordes.This article provides an overview of the Azure Cosmos DB Gremlin API and explains how you can use it to store massive graphs with billions of vertices and edges. Puede consultar los grafos con una latencia de milisegundos y evolucionar la estructura de los grafos con facilidad.You can query the graphs with millisecond latency and evolve the graph structure easily. La API para Gremlin de Azure Cosmos DB se basa en el estándar de base de datos de grafos de Apache TinkerPop  y usa el lenguaje de consulta Gremlin.Azure Cosmos DB's Gremlin API is based on the Apache TinkerPop graph database standard, and uses the Gremlin query language.

La API para Gremlin de Azure Cosmos DB combina la potencia de los algoritmos de base de datos de grafo con una infraestructura administrada altamente escalable para proporcionar una solución única y flexible para los problemas más comunes de datos asociados a la falta de flexibilidad y enfoques relacionales.Azure Cosmos DB's Gremlin API combines the power of graph database algorithms with highly scalable, managed infrastructure to provide a unique, flexible solution to most common data problems associated with lack of flexibility and relational approaches.

Características de la base de datos de grafos de Azure Cosmos DBFeatures of Azure Cosmos DB graph database

Azure Cosmos DB es una base de datos de gráficos totalmente administrada que ofrece una distribución global, escalado elástico de almacenamiento y rendimiento, indexación y consulta automáticas, niveles de coherencia ajustables y compatibilidad con el estándar TinkerPop.Azure Cosmos DB is a fully managed graph database that offers global distribution, elastic scaling of storage and throughput, automatic indexing and query, tunable consistency levels, and support for the TinkerPop standard.

Las siguientes son características diferenciadas que ofrece la API para Gremlin de Azure Cosmos DB:The following are the differentiated features that Azure Cosmos DB Gremlin API offers:

  • Rendimiento y almacenamiento escalables de manera elásticaElastically scalable throughput and storage

    Los gráficos en el mundo real necesitan escalarse más allá de la capacidad de un único servidor.Graphs in the real world need to scale beyond the capacity of a single server. Azure Cosmos DB admite bases de datos de grafos de escalabilidad horizontal que pueden tener un tamaño prácticamente ilimitado en términos de almacenamiento y rendimiento aprovisionado.Azure Cosmos DB supports horizontally scalable graph databases that can have a virtually unlimited size in terms of storage and provisioned throughput. A medida que crece la escala de la base de datos de grafos, los datos se distribuirán automáticamente mediante la creación de particiones de grafos.As the graph database scale grows, the data will be automatically distributed using graph partitioning.

  • Replicación en varias regionesMulti-region replication

    Azure Cosmos DB puede replicar automáticamente los datos de grafo en cualquier región de Azure del mundo.Azure Cosmos DB can automatically replicate your graph data to any Azure region worldwide. La replicación global simplifica el desarrollo de aplicaciones que requieren acceso global a los datos.Global replication simplifies the development of applications that require global access to data. Además de minimizar la latencia de lectura y escritura en cualquier lugar del mundo, Azure Cosmos DB proporciona un mecanismo de conmutación por error regional automático que puede garantizar la continuidad de la aplicación en el caso excepcional de una interrupción del servicio en una región.In addition to minimizing read and write latency anywhere around the world, Azure Cosmos DB provides automatic regional failover mechanism that can ensure the continuity of your application in the rare case of a service interruption in a region.

  • Consultas rápidas y recorridos con el estándar de consulta de grafos más ampliamente adoptadoFast queries and traversals with the most widely adopted graph query standard

    Almacene vértices y bordes heterogéneos, y consúltelos por medio de la sintaxis conocida de Gremlin.Store heterogeneous vertices and edges and query them through a familiar Gremlin syntax. Gremlin es un lenguaje de consulta imperativo y funcional que proporciona una interfaz enriquecida para implementar algoritmos comunes de grafo.Gremlin is an imperative, functional query language that provides a rich interface to implement common graph algorithms.

    Azure Cosmos DB permite realizar consultas y recorridos enriquecidos en tiempo real sin necesidad de especificar sugerencias de esquemas, índices secundarios ni vistas.Azure Cosmos DB enables rich real-time queries and traversals without the need to specify schema hints, secondary indexes, or views. Aprenda más en Compatibilidad de Azure Cosmos DB con grafos Gremlin.Learn more in Query graphs by using Gremlin.

  • Base de datos de grafos totalmente administradaFully managed graph database

    Azure Cosmos DB elimina la necesidad de administrar recursos de bases de datos y máquinas.Azure Cosmos DB eliminates the need to manage database and machine resources. La mayoría de las plataformas de base de datos de grafos existentes están supeditadas a las limitaciones de su infraestructura y a menudo requieren un alto grado de mantenimiento para garantizar su funcionamiento.Most existing graph database platforms are bound to the limitations of their infrastructure and often require a high degree of maintenance to ensure its operation.

    Al ser un servicio totalmente administrado, Cosmos DB evita la necesidad de administrar las máquinas virtuales, actualizar el software del entorno de ejecución, administrar el particionamiento o la replicación o realizar complejas actualizaciones en el nivel de datos.As a fully managed service, Cosmos DB removes the need to manage virtual machines, update runtime software, manage sharding or replication, or deal with complex data-tier upgrades. Se hacen copias de seguridad de todos los grafos, además de protegerlos ante errores regionales.Every graph is automatically backed up and protected against regional failures. Estas garantías permiten a los desarrolladores centrarse en la entrega de valor de la aplicación en lugar de dedicarse a la operación y administración de sus bases de datos de grafos.These guarantees allow developers to focus on delivering application value instead of operating and managing their graph databases.

  • Indexación automáticaAutomatic indexing

    De manera predeterminada, Azure Cosmos DB indexa automáticamente todas las propiedades en los nodos y bordes del grafo, y no espera ni requiere ningún esquema ni la creación de índices secundarios.By default, Azure Cosmos DB automatically indexes all the properties within nodes and edges in the graph and doesn't expect or require any schema or creation of secondary indices. Más información acerca de la indexación de Azure Cosmos DB.Learn more about indexing in Azure Cosmos DB.

  • Compatibilidad con Apache TinkerPopCompatibility with Apache TinkerPop

    Azure Cosmos DB admite el estándar de código abierto Apache TinkerPop.Azure Cosmos DB supports the open-source Apache TinkerPop standard. El estándar Tinkerpop tiene un amplio ecosistema de aplicaciones y bibliotecas que se pueden integrar fácilmente con la API para Gremlin de Azure Cosmos DB.The Tinkerpop standard has an ample ecosystem of applications and libraries that can be easily integrated with Azure Cosmos DB's Gremlin API.

  • Niveles de coherencia ajustablesTunable consistency levels

    Azure Cosmos DB proporciona cinco niveles de coherencia bien definidos para lograr el equilibrio adecuado entre la coherencia y el rendimiento de la aplicación.Azure Cosmos DB provides five well-defined consistency levels to achieve the right tradeoff between consistency and performance for your application. Para las consultas y las operaciones de lectura, Azure Cosmos DB ofrece cinco niveles de coherencia diferentes: segura, obsolescencia limitada, sesión, prefijo coherente y posible.For queries and read operations, Azure Cosmos DB offers five distinct consistency levels: strong, bounded-staleness, session, consistent prefix, and eventual. Estos niveles de coherencia bien definidos y pormenorizados le permiten realizar equilibrios razonables entre la coherencia, la disponibilidad y la latencia.These granular, well-defined consistency levels allow you to make sound tradeoffs among consistency, availability, and latency. Encontrará más información en Niveles de coherencia de datos optimizables en Azure Cosmos DB.Learn more in Tunable data consistency levels in Azure Cosmos DB.

Escenarios que pueden usar Gremlin APIScenarios that can use Gremlin API

Estos son algunos escenarios donde puede resultar útil la compatibilidad con grafos de Azure Cosmos DB:Here are some scenarios where graph support of Azure Cosmos DB can be useful:

  • Redes sociales/Servicio de atención al cliente 365Social networks/Customer 365

    Al combinar datos sobre los clientes y sus interacciones con otras personas, puede desarrollar experiencias personalizadas, predecir el comportamiento de los clientes o conectar a personas con otras que tengan intereses similares.By combining data about your customers and their interactions with other people, you can develop personalized experiences, predict customer behavior, or connect people with others with similar interests. Azure Cosmos DB puede utilizarse para administrar redes sociales y realizar un seguimiento de los datos y las preferencias de los usuarios.Azure Cosmos DB can be used to manage social networks and track customer preferences and data.

  • Motores de recomendacionesRecommendation engines

    Este escenario se usa con frecuencia en el sector minorista.This scenario is commonly used in the retail industry. Al combinar información sobre productos, usuarios e interacciones de usuario, como comprar, examinar o clasificar un artículo, puede generar recomendaciones personalizadas.By combining information about products, users, and user interactions, like purchasing, browsing, or rating an item, you can build customized recommendations. Azure Cosmos DB, con su latencia baja, escalado elástico y compatibilidad nativa con grafos, es ideal para estos escenarios.The low latency, elastic scale, and native graph support of Azure Cosmos DB is ideal for these scenarios.

  • Entorno geoespacialGeospatial

    Muchas aplicaciones en telecomunicaciones, logística y programación de viajes necesitan encontrar una ubicación de interés dentro de un área o localizar la mejor ruta entre dos ubicaciones o la más corta.Many applications in telecommunications, logistics, and travel planning need to find a location of interest within an area or locate the shortest/optimal route between two locations. Azure Cosmos DB es una opción natural para estos problemas.Azure Cosmos DB is a natural fit for these problems.

  • Internet de las cosasInternet of Things

    Con la red y las conexiones entre dispositivos IoT modeladas como un grafo, se puede conocer mejor el estado de los dispositivos y recursos.With the network and connections between IoT devices modeled as a graph, you can build a better understanding of the state of your devices and assets. También se puede ver de qué manera los cambios en una parte de la red pueden afectar a otra.You also can learn how changes in one part of the network can potentially affect another part.

Introducción a las bases de datos de grafosIntroduction to graph databases

Los datos, tal y como aparecen en el mundo real, están conectados naturalmente.Data as it appears in the real world is naturally connected. El modelado de datos tradicional se centra en definir por separado las entidades y calcular sus relaciones en tiempo de ejecución.Traditional data modeling focuses on defining entities separately and computing their relationships at runtime. Aunque este modelo tiene sus ventajas, los datos muy conectados pueden resultar complicados de administrar con sus restricciones.While this model has its advantages, highly connected data can be challenging to manage under its constraints.

Un enfoque de base de datos de grafo se basa en las relaciones persistentes en la capa de almacenamiento en su lugar, lo que da lugar a operaciones de recuperación de grafo muy eficaces.A graph database approach relies on persisting relationships in the storage layer instead, which leads to highly efficient graph retrieval operations. La API para Gremlin de Azure Cosmos DB es compatible con el modelo de grafo de propiedades.Azure Cosmos DB's Gremlin API supports the property graph model.

Objetos de grafos de propiedadProperty graph objects

Un grafo es una estructura que está formada por vértices y bordes.A property graph is a structure that's composed of vertices and edges. Ambos objetos pueden tener un número arbitrario de pares de clave-valor como propiedades.Both objects can have an arbitrary number of key-value pairs as properties.

  • Vértices: denotan entidades discretas, como una persona, un lugar o un evento.Vertices - Vertices denote discrete entities, such as a person, a place, or an event.

  • Bordes: representan las relaciones entre los vértices.Edges - Edges denote relationships between vertices. Por ejemplo, es posible que una persona conozca a otra, haya participado en un evento y recientemente haya estado en una ubicación.For example, a person might know another person, be involved in an event, and recently been at a location.

  • Propiedades: expresan información acerca de los bordes y los vértices.Properties - Properties express information about the vertices and edges. Puede haber cualquier número de propiedades tanto en los vértices como en los bordes, y se pueden usar para describir y filtrar los objetos en una consulta.There can be any number of properties in either vertices or edges, and they can be used to describe and filter the objects in a query. Algunas propiedades de ejemplo incluyen un vértice con un nombre y una edad, o un borde, que tiene una marca de tiempo o un peso.Example properties include a vertex that has name and age, or an edge, which can have a time stamp and/or a weight.

Las bases de datos de grafos suelen incluirse en la categoría de base de datos NoSQL o no relacional, porque no hay ninguna dependencia de un esquema o modelo de datos restringido.Graph databases are often included within the NoSQL or non-relational database category, since there is no dependency on a schema or constrained data model. Esta falta de esquema permite el modelado y almacenamiento de estructuras conectadas de forma natural y eficaz.This lack of schema allows for modeling and storing connected structures naturally and efficiently.

Gremlin con ejemplosGremlin by example

Vamos a usar un grafo de ejemplo para entender cómo se expresan las consultas en Gremlin.Let's use a sample graph to understand how queries can be expressed in Gremlin. La siguiente ilustración muestra una aplicación empresarial que administra datos de usuarios, intereses y dispositivos en forma de grafo.The following figure shows a business application that manages data about users, interests, and devices in the form of a graph.

Base de datos de ejemplo que muestra personas, dispositivos e intereses

Este grafo tiene los siguientes tipos de vértices (llamados "etiquetas" en Gremlin):This graph has the following vertex types (called "label" in Gremlin):

  • Personas: El grafo tiene tres personas, Robin, Thomas y BenPeople: The graph has three people, Robin, Thomas, and Ben
  • Intereses: Sus intereses; en este ejemplo, el fútbolInterests: Their interests, in this example, the game of Football
  • Dispositivos: Los dispositivos que usan las personasDevices: The devices that people use
  • Sistemas operativos: Los sistemas operativos que se ejecutan en los dispositivosOperating Systems: The operating systems that the devices run on

Las relaciones entre estas entidades se representan con las siguientes etiquetas o tipos de arista:We represent the relationships between these entities via the following edge types/labels:

  • Knows: Por ejemplo, "Thomas conoce a Robin"Knows: For example, "Thomas knows Robin"
  • Interested: Permite representar los intereses de las personas de nuestro grafo; por ejemplo, "Ben tiene interés en Fútbol"Interested: To represent the interests of the people in our graph, for example, "Ben is interested in Football"
  • RunsOS: Portátil ejecuta el sistema operativo WindowsRunsOS: Laptop runs the Windows OS
  • Uses: Permite representar el dispositivo que una persona usa.Uses: To represent which device a person uses. Por ejemplo, Robin usa un teléfono Motorola con número de serie 77.For example, Robin uses a Motorola phone with serial number 77

Vamos a ejecutar algunas operaciones en este grafo mediante la consola de Gremlin.Let's run some operations against this graph using the Gremlin Console. También puede realizar estas operaciones mediante controladores de Gremlin en la plataforma que elija (Java, Node.js, Python o .NET).You can also perform these operations using Gremlin drivers in the platform of your choice (Java, Node.js, Python, or .NET). Antes de adentrarnos en lo que se admite en Azure Cosmos DB, veamos algunos ejemplos para familiarizarnos con la sintaxis.Before we look at what's supported in Azure Cosmos DB, let's look at a few examples to get familiar with the syntax.

Primero, echemos un vistazo a CRUD.First let's look at CRUD. La siguiente instrucción de Gremlin inserta el vértice "Thomas" en el grafo:The following Gremlin statement inserts the "Thomas" vertex into the graph:

:> g.addV('person').property('id', 'thomas.1').property('firstName', 'Thomas').property('lastName', 'Andersen').property('age', 44)

La siguiente instrucción de Gremlin inserta un arista "conoce a" entre Thomas y Robin.Next, the following Gremlin statement inserts a "knows" edge between Thomas and Robin.

:> g.V('thomas.1').addE('knows').to(g.V('robin.1'))

La consulta siguiente devuelve los vértices "persona" en orden descendente de sus nombres:The following query returns the "person" vertices in descending order of their first names:

:> g.V().hasLabel('person').order().by('firstName', decr)

En el lugar donde brillan los grafos es donde se necesita responder preguntas como "¿Qué sistemas operativos usan los amigos de Thomas?".Where graphs shine is when you need to answer questions like "What operating systems do friends of Thomas use?". Puede ejecutar este recorrido de Gremlin para obtener esa información del grafo:You can run this Gremlin traversal to get that information from the graph:

:> g.V('thomas.1').out('knows').out('uses').out('runsos').group().by('name').by(count())

Pasos siguientesNext steps

Para aprender más sobre la compatibilidad con grafos en Azure Cosmos DB:To learn more about graph support in Azure Cosmos DB, see: