Introducción y uso de la base de datos de gráficos Cayley

(Desarrolladores estrella de Python para mejorar las habilidades de Python)

Autor: jclian (Este artículo de la presentación)

Base de datos de gráficos

  

En la era actual de los señores de la guerra de bases de datos, las bases de datos no relacionales (NoSQL) ya representan la mitad del país, y Graph Database se ha convertido en un líder entre ellas.  

La denominada base de datos de grafos, que utiliza la teoría de grafos para almacenar los atributos relevantes de las entidades y la información de relación entre ellas. El ejemplo más común es la relación entre personas en las redes sociales. En comparación con las bases de datos relacionales (como MySQL, etc.), las bases de datos de gráficos son más capaces de esta tarea.  

La base de datos de gráficos ha surgido con muchos software sobresalientes, como el artículo del autor Neo4j Introducción al análisis de clasificación de taquilla de películas chinas de Neo4j, FlockDB de Twitter construido para el análisis de datos relacionales y la base de datos de gráficos distribuidos altamente escalable JanusGraph Y la base de datos de gráficos de código abierto de Google, Cayley, etc.  

Este artículo presentará específicamente la base de datos de gráficos Cayley.


Introducción a la base de datos de Cayley Graph

640? Wx_fmt = png
Base de datos de gráficos Caylay

  

La base de datos de gráficos Cayley es una base de datos de gráficos de código abierto de Google, que está inspirada en la base de datos de gráficos detrás de Freebase y el gráfico de conocimiento de Google. Está escrito en lenguaje Go y los comandos en ejecución son simples, generalmente solo se necesitan de 3 a 4 comandos. Al mismo tiempo, tiene una API RESTful, un editor de consultas incorporado y una interfaz visual, y admite múltiples lenguajes de consulta, como JavaScript, MQL, etc. Además, también puede admitir una variedad de almacenamiento de bases de datos back-end, como MySQL, MongoDB, LevelDB, etc., con buen rendimiento, buena cobertura de prueba y funciones muy ricas y poderosas.  

Por supuesto, para nosotros, la característica más importante debería ser el código abierto. La dirección oficial de Github de la base de datos de gráficos de Cayley es: https://github.com/cayleygraph/cayley.  

A continuación, se presentará específicamente cómo instalar y usar la base de datos de gráficos Cayley.

Instalación e instrucciones

  

Con respecto a la instalación de la base de datos de gráficos Cayley, los diferentes sistemas operativos tienen diferentes métodos de instalación. La URL de descarga es: https://github.com/cayleygraph/cayley/releases, la captura de pantalla es la siguiente:

640? Wx_fmt = png
URL de descarga

Los lectores pueden descargar los archivos correspondientes de acuerdo con su propio sistema informático. La computadora del autor es una Mac, así que elija el archivo cayley_0.7.5_darwin_amd64.tar.gz. Al mismo tiempo, necesitas instalar una base de datos Cayley para almacenar datos de back-end en tu computadora. Elegí la base de datos MongoDB.  

Por supuesto, Cayley también le proporciona un documento de instrucciones completo, puede consultar el sitio web: https://github.com/cayleygraph/cayley/blob/master/docs/Quickstart-As-Application.md, puede ayudarlo a familiarizarse rápidamente La operación de Cayley lo ayudará a comenzar rápidamente. El autor utilizará una forma más sencilla de ayudarlo a familiarizarse con la base de datos de gráficos. 

¡Vamos a empezar!


preparación de datos

  

Para comprender mejor la base de datos de gráficos de Cayley, debemos comenzar con los datos para construir la base de datos de gráficos paso a paso e implementar la función de consulta. Los datos de este artículo provienen del artículo "Introducción a Neo4j: Análisis de la clasificación de taquilla de películas chinas", que rastreó la información de taquilla de películas chinas de la siguiente manera:

640? Wx_fmt = png
Taquilla de películas chinas

Y la información protagonista de cada película, de la siguiente manera:

640? Wx_fmt = png
Información de protagonistas de películas

Se obtienen dos archivos de tabla movies.csv y actor.csv. El contenido de los archivos es el siguiente:

640? Wx_fmt = png

peliculas.csv

640? Wx_fmt = png
actores.csv

Los datos están listos. Si los lectores necesitan descargar los datos, pueden consultar el sitio web: https://github.com/percent4/Neo4j_movie_demo.

Archivo triple

La base de datos Cayley admite la importación de archivos de triples. Los llamados triples se refieren al sujeto, predicado y objeto. Cada triple es una línea.  

Los archivos triples admitidos por la base de datos Cayley tienen el sufijo nq, y cada triple es una línea. El sujeto, el predicado y el objeto están separados por espacios. Al mismo tiempo, debe prestar atención a los siguientes elementos (la experiencia personal del autor al pisar el pozo):

  • Preste atención a los espacios, los espacios son signos de entidades divisorias;

  • Tenga en cuenta que "," es una palabra clave y no puede aparecer en la entidad;

  • Sin saltos de línea (como \ n) en la entidad;

  • No puede haber datos duplicados (no se aceptan entidades duplicadas ni triples).

  

Luego usamos el programa Python para procesar los archivos movies.csv y agents.csv en triples. Nuestros principios de extracción son los siguientes:

  • Nombre de la película, entidad del nombre del actor;

  • La relación entre el nombre de la película y la película es ISA, es decir, el nombre de la película ISA Movie;

  • La relación entre el nombre del actor y el nombre de la película es ACT_IN, es decir, el nombre del actor ACT_IN nombre de la película;

  • El resto del nombre de la película son pares de atributos, es decir, el nombre del atributo del nombre de la película, como Wolf Warriors 2, rango 1.

  El programa Python implementado es el siguiente:

# -*- coding: utf-8 -*-	

	
import pandas as pd	

	
# 读取文件	
movies = pd.read_csv('movies.csv')	
actors = pd.read_csv('actors.csv')	
# print(movies.head())	

	
# 处理电影数据为三元组,抽取的三运组如下:	
# 电影名 ISA Movie	
# 电影名 属性 属性值	
with open('China_Movie.nq', 'w') as f:	
    name_df = movies['name']	
    for i in range(name_df.shape[0]):	
        f.write('<%s> <ISA> <Movie> .\n'%name_df[i])	
        for col in movies.columns:	
            if col != 'name':	
                f.write('<%s> <%s> "%s" .\n'%(name_df[i], col, movies[col][i]))	

	

	
# 处理演员数据为三元组,抽取的三运组如下:	
# 演员名 ISA Actor	
# 演员名 ACT_IN 电影名	
with open('China_Movie.nq', 'a') as f:	
    for i in range(actors.shape[0]):	
        for actor in actors['actors'][i].split(','):	
            f.write('<%s> <ACT_IN> <%s> .\n' % (actor, actors['name'][i]))

En China_Movie.nq, hay un total de 276 triples. Las primeras líneas del archivo son las siguientes:

<War Wolf 2>. <War Wolf 2> "1". <War Wolf 2> "/ item /% E6% 88% 98% E7% 8B% BC2". <War Wolf 2> "5.683 billones". <战Wolf 2> "35". <Wolf Warrior 2> "38". <Wolf Warrior 2> "2017.07.27". <Wandering Earth>. <Wandering Earth> "2". <Wandering Earth> "/ item /% E6 % B5% 81% E6% B5% AA% E5% 9C% B0% E7% 90% 83 ". <Tierra errante>" 4.083 billones ". <Tierra errante>" 46 ". <Tierra errante>" 50 ". < La Tierra Errante> "2019.02.05". <Operación Mar Rojo>.


Datos de importacion

  

Mueva el archivo China_Movie.nq al directorio de datos de Cayley y configure el archivo cayley_example.yml con el siguiente contenido:

store:	
  # backend to use	
  backend: mongo	
  # address or path for the database	
  address: "localhost:27017"	
  # open database in read-only mode	
  read_only: false	
  # backend-specific options	
  options:	
    nosync: false	
query:	
  timeout: 30s	
load:	
  ignore_duplicates: false	
  ignore_missing: false	
  batch: 10000

En el archivo de configuración, se declara que la base de datos back-end de Cayley es MongoDB, y también se especifican la ip y el puerto.  

Luego ejecuta el comando:

./cayley load -c cayley_example.yml -i data/China_Movie.nq

Espere a que se importen los datos y luego vaya a MongoDB para verlos. Si se encuentra una base de datos cayley en MongoDB, indica que los datos se importaron correctamente.

640? Wx_fmt = png
Datos importados correctamente


Usar consulta

  

Luego ingrese el comando:

./cayley http -i ./data/China_Movie.nq -d memstore --host=:64210

De esta manera, se admite la consulta en el navegador. Simplemente ingrese http: // localhost: 64210 / en el navegador. La interfaz es la siguiente:

640? Wx_fmt = png
Interfaz de consulta del navegador

  

Con respecto a la declaración de consulta, es la esencia de la base de datos de gráficos. Para Cayley, su declaración de consulta es relativamente simple y fácil de entender. Para comandos de declaración de consulta específicos, consulte el sitio web oficial: https://github.com/cayleygraph /cayley/blob/master/docs/GizmoAPI.md, este artículo ilustrará cómo consultar la base de datos de gráficos de Cayley a través de unas simples declaraciones de consulta.

Consultar cuántos datos hay en total

El comando es:

var n = g.V().Count();	
g.Emit(n);

Donde g representa el gráfico, V representa el vértice y g.Emit () devolverá el resultado en formato JSON. El resultado es el siguiente:

{	
    "result": [	
        521	
    ]	
}

Ver todas las películas

El comando es:

var movies = g.V('&lt;Movie&gt;').In('&lt;ISA&gt;').ToArray();	
g.Emit(movies);

Los resultados devueltos son los siguientes:

{	
    "result": [	
        [	
            "&lt;战狼2&gt;",	
            "&lt;流浪地球&gt;",	
            "&lt;红海行动&gt;",	
            "&lt;唐人街探案2&gt;",	
            "&lt;美人鱼&gt;",	
            "&lt;我不是药神&gt;",	
            "&lt;速度与激情8&gt;",	
            "&lt;西虹市首富&gt;",	
            "&lt;捉妖记&gt;",	
            "&lt;速度与激情7&gt;",	
            "&lt;复仇者联盟3:无限战争&gt;",	
            "&lt;捉妖记2&gt;",	
            "&lt;羞羞的铁拳&gt;",	
            "&lt;海王&gt;",	
            "&lt;变形金刚4:绝迹重生&gt;",	
            "&lt;前任3:再见前任&gt;",	
            "&lt;疯狂的外星人&gt;",	
            "&lt;毒液:致命守护者&gt;",	
            "&lt;功夫瑜伽&gt;",	
            "&lt;侏罗纪世界2&gt;"	
        ]	
    ]	
}
Consultar todos los valores de los atributos de la película "Tierra errante"

El comando es:

 
  

El resultado es el siguiente:

{	
    "result": [	
        {	
            "&lt;ISA&gt;": "&lt;Movie&gt;",	
            "&lt;avg_people&gt;": "50",	
            "&lt;avg_price&gt;": "46",	
            "&lt;begin_date&gt;": "2019.02.05",	
            "&lt;box_office&gt;": "40.83亿",	
            "&lt;rank&gt;": "2",	
            "&lt;src&gt;": "/item/%E6%B5%81%E6%B5%AA%E5%9C%B0%E7%90%83"	
        }	
    ]	
}
Buscar películas protagonizadas por Shen Teng

El comando es:

var movies = g.V('&lt;沈腾&gt;').Out('&lt;ACT_IN&gt;').ToArray();	
g.Emit(movies);

La salida es:

{	
    "result": [	
        [	
            "&lt;西虹市首富&gt;",	
            "&lt;羞羞的铁拳&gt;",	
            "&lt;疯狂的外星人&gt;"	
        ]	
    ]	
}
Buscar co-actores de "Monster Hunt" y "Monster Hunt 2"

El comando es:

var actors1 = g.V('&lt;捉妖记&gt;').In('&lt;ACT_IN&gt;');	
var actors2 = g.V('&lt;捉妖记2&gt;').In('&lt;ACT_IN&gt;');	
var common_actor = actors2.Intersect(actors1).ToArray();//集合交集	
g.Emit(common_actor);

La salida es:

{	
    "result": [	
        [	
            "&lt;白百何&gt;",	
            "&lt;井柏然&gt;",	
            "&lt;曾志伟&gt;",	
            "&lt;吴君如&gt;"	
]	
    ]	
}

  

para resumir

En este artículo, el autor presenta una nueva base de datos de gráficos Cayley, y presenta su método de instalación y cómo importar datos de tripletes para consultas. Espero darles a los lectores alguna referencia ~  

Aunque es la base de datos de gráficos de código abierto de Google, no hay muchas introducciones en la base de datos de gráficos de Cayley en Internet, y no se han explicado en profundidad. La mayoría de ellos copian las explicaciones de documentos oficiales. Espero que la explicación del autor pueda traer algún progreso. Este también es el autor. El propósito de escribir este artículo. Espero que este artículo pueda ayudar a los lectores ~

[Autor de este artículo]

jclian: He trabajado en Python durante más de dos años. Soy un entusiasta de Python. Me gustan los algoritmos y me encanta compartir. ¡Espero hacer más amigos de ideas afines y avanzar en el camino de aprender Python juntos!

Lectura recomendada

(Haga clic en el título para saltar y leer)

Escribe una base de datos NoSQL en Python

El caso de asesinato de eliminar accidentalmente la base de datos de producción, un ingeniero senior de SF Express fue despedido

¿Crees que este artículo te es útil? Comparte con más personas

Preste atención al "Desarrollador de Python" destacado para mejorar las habilidades de Python

640? Wx_fmt = png

Buen articulo, estoy leyendo ❤️

Supongo que te gusta

Origin blog.csdn.net/iodjSVf8U1J7KYc/article/details/100436899
Recomendado
Clasificación