Inicio rápido: Recorrido de vértices y bordes con la consola de Gremlin y Azure Cosmos DB for Apache Gremlin

SE APLICA A: Gremlin

Azure Cosmos DB for Apache Gremlin es un servicio de base de datos de grafos totalmente administrado que implementa el conocido Apache Tinkerpop, un marco informático de grafos mediante el lenguaje de consulta Gremlin. La API para Gremlin ofrece una forma sencilla de empezar a usar Gremlin con un servicio que puede aumentar y escalar horizontalmente tanto como necesite con una administración mínima.

En este inicio rápido, usará la consola de Gremlin para conectarse a una cuenta de Azure Cosmos DB for Gremlin recién creada.

Requisitos previos

Azure Cloud Shell

En Azure se hospeda Azure Cloud Shell, un entorno de shell interactivo que puede utilizar mediante el explorador. Puede usar Bash o PowerShell con Cloud Shell para trabajar con los servicios de Azure. Puede usar los comandos preinstalados de Cloud Shell para ejecutar el código de este artículo sin tener que instalar nada en su entorno local.

Para iniciar Azure Cloud Shell:

Opción Ejemplo o vínculo
Seleccione Pruébelo en la esquina superior derecha de un bloque de código o de comandos. Solo con seleccionar Pruébelo no se copia automáticamente el código o comando en Cloud Shell. Screenshot that shows an example of Try It for Azure Cloud Shell.
Vaya a https://shell.azure.com o seleccione el botón Iniciar Cloud Shell para abrir Cloud Shell en el explorador. Button to launch Azure Cloud Shell.
Seleccione el botón Cloud Shell en la barra de menús de la esquina superior derecha de Azure Portal. Screenshot that shows the Cloud Shell button in the Azure portal

Para usar Azure Cloud Shell:

  1. Inicie Cloud Shell.

  2. Seleccione el botón Copiar en un bloque de código (o bloque de comandos) para copiar el código o comando.

  3. Pegue el código o comando en la sesión de Cloud Shell. Para ello, seleccione Ctrl+Mayús+V en Windows y Linux, o bien seleccione Cmd+Mayús+V en macOS.

  4. Seleccione Intro para ejecutar el código o comando.

Creación de una API para una cuenta de Gremlin y recursos pertinentes

La cuenta de API para Gremlin debe crearse antes de usar la consola de Gremlin. Además, ayuda a tener la base de datos y el grafo en su lugar.

  1. Cree variables de shell para accountName, resourceGroupName y location.

    # Variable for resource group name
    resourceGroupName="msdocs-cosmos-gremlin-quickstart"
    location="westus"
    
    # Variable for account name with a randomly generated suffix
    
    let suffix=$RANDOM*$RANDOM
    accountName="msdocs-gremlin-$suffix"
    
  2. Si aún no lo ha hecho, inicie sesión en la CLI de Azure con az login.

  3. Use az group create para crear un nuevo grupo de recursos en la suscripción.

    az group create \
        --name $resourceGroupName \
        --location $location
    
  4. Use az cosmosdb create para crear una nueva cuenta de API para Gremlin con la configuración predeterminada.

    az cosmosdb create \
        --resource-group $resourceGroupName \
        --name $accountName \
        --capabilities "EnableGremlin" \
        --locations regionName=$location \
        --enable-free-tier true
    

    Nota:

    Puede tener una cuenta de Azure Cosmos DB de nivel Gratis por cada suscripción de Azure y debe optar por tenerla al crear la cuenta. Si este comando no consigue aplicar el descuento por nivel gratuito, significa que el nivel Gratis ya se habilitó en otra cuenta de la suscripción.

  5. Obtenga la API para el punto de conexión de Gremlin NAME para la cuenta con az cosmosdb show.

    az cosmosdb show \
        --resource-group $resourceGroupName \
        --name $accountName \
        --query "name"
    
  6. Busque KEY en la lista de claves de la cuenta con az-cosmosdb-keys-list.

    az cosmosdb keys list \
        --resource-group $resourceGroupName \
        --name $accountName \
        --type "keys" \
        --query "primaryMasterKey"
    
  7. Registre los valores NAME y KEY. Necesitará estas credenciales más adelante.

  8. Cree una base de datos denominada cosmicworks con az cosmosdb gremlin database create.

    az cosmosdb gremlin database create \
        --resource-group $resourceGroupName \
        --account-name $accountName \
        --name "cosmicworks"
    
  9. Cree un grafo mediante az cosmosdb gremlin graph create. Asigne un nombre al grafo products, establezca el rendimiento en 400 y, por último, establezca la ruta de acceso de la clave de partición en /category.

    az cosmosdb gremlin graph create \
        --resource-group $resourceGroupName \
        --account-name $accountName \
        --database-name "cosmicworks" \
        --name "products" \
        --partition-key-path "/category" \
        --throughput 400
    

Inicio y configuración de la consola de Gremlin mediante Docker

En la consola de Gremlin, en esta guía de inicio rápido se usa la tinkerpop/gremlin-console imagen de contenedor de Docker Hub. Esta imagen garantiza que usa la versión adecuada de la consola (3.4) para la conexión con la API para Gremlin. Una vez que se ejecuta la consola, conéctese desde el host de Docker local a la API remota para la cuenta de Gremlin.

  1. Extraiga la versión 3.4 de la imagen de contenedor tinkerpop/gremlin-console.

    docker pull tinkerpop/gremlin-console:3.4
    
  2. Cree una carpeta de trabajo vacía. En la carpeta vacía, cree un archivo remote-secure.yaml. Agregue esta configuración de YAML al archivo.

    hosts: [<account-name>.gremlin.cosmos.azure.com]
    port: 443
    username: /dbs/cosmicworks/colls/products
    password: <account-key>
    connectionPool: {
      enableSsl: true,
      sslEnabledProtocols: [TLSv1.2]
    }
    serializer: {
      className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV2d0,
      config: {
        serializeResultToString: true
      }
    }
    

    Nota:

    Reemplace los marcadores de <account-name> y <account-key> por los valores NAME y KEY obtenidos anteriormente en este inicio rápido.

  3. Abra un nuevo terminal en el contexto de la carpeta de trabajo que incluya el archivo remote-secure.yaml.

  4. Ejecute la imagen de contenedor de Docker en modo interactivo (--interactive --tty). Asegúrese de montar la carpeta de trabajo actual en la ruta de acceso /opt/gremlin-console/conf/ dentro del contenedor.

    docker run -it --mount type=bind,source=.,target=/opt/gremlin-console/conf/ tinkerpop/gremlin-console:3.4
    
  5. En el contenedor de la consola de Gremlin, conéctese a la cuenta remota (API para Gremlin) mediante el archivo de configuración remote-secure.yaml.

    :remote connect tinkerpop.server conf/remote-secure.yaml
    

Cree y recorra vértices y bordes

Ahora que la consola está conectada a la cuenta, use la sintaxis estándar de Gremlin para crear y atravesar vértices y bordes.

  1. Agregue un vértice para un producto con las siguientes propiedades:

    Valor
    label product
    id 68719518371
    name Kiama classic surfboard
    price 285.55
    category surfboards
    :> g.addV('product').property('id', '68719518371').property('name', 'Kiama classic surfboard').property('price', 285.55).property('category', 'surfboards')
    

    Importante

    No olvide el prefijo :>. El prefijo THis es necesario para ejecutar el comando de forma remota.

  2. Agregue otro vértice de producto con estas propiedades:

    Valor
    label product
    id 68719518403
    name Montau Turtle Surfboard
    price 600
    category surfboards
    :> g.addV('product').property('id', '68719518403').property('name', 'Montau Turtle Surfboard').property('price', 600).property('category', 'surfboards')
    
  3. Cree un borde denominado replaces para definir una relación entre los dos productos.

    :> g.V(['surfboards', '68719518403']).addE('replaces').to(g.V(['surfboards', '68719518371']))
    
  4. Cuente todos los vértices del gráfico.

    :> g.V().count()
    
  5. Recorra el grafo y busque todos los vértices que reemplazan el Kiama classic surfboard.

    :> g.V().hasLabel('product').has('category', 'surfboards').has('name', 'Kiama classic surfboard').inE('replaces').outV()
    
  6. Recorra el grafo y busque todos los vértices que reemplazan el Montau Turtle Surfboard.

    :> g.V().hasLabel('product').has('category', 'surfboards').has('name', 'Montau Turtle Surfboard').outE('replaces').inV()
    

Limpieza de recursos

Cuando ya no necesite la cuenta de la API para Gremlin, podrá eliminar el grupo de recursos correspondiente.

  1. Cree una variable de shell para resourceGroupName si aún no existe.

    # Variable for resource group name
    resourceGroupName="msdocs-cosmos-gremlin-quickstart"
    
  2. Use az group delete para eliminar el grupo de recursos.

    az group delete \
        --name $resourceGroupName
    

¿Cómo solucionamos el problema?

Azure Cosmos DB for Apache Gremlin resolvió nuestro problema al ofrecer Gremlin como servicio. Con esta oferta, no es necesario que se mantenga sus propias instancias de servidor gremlin ni administre su propia infraestructura. Aún más, puede escalar la solución a medida que sus necesidades crezcan con el tiempo.

Para conectarse a la cuenta de API para Gremlin, usó la imagen de contenedor tinkerpop/gremlin-console para ejecutar la consola de gremlin de una manera que no requería una instalación local. A continuación, ha usado la configuración almacenada en el archivo remote-secure.yaml para conectarse desde el contenedor en ejecución de la API para la cuenta de Gremlin. Desde allí, ha ejecutado varios comandos comunes de Gremlin.

Paso siguiente