Introdução e uso do banco de dados gráfico Cayley

(Desenvolvedores Star Python para melhorar as habilidades em Python)

Autor: jclian (este artigo da Submissão)

Banco de dados gráfico

  

Na era atual dos senhores da guerra de bancos de dados, os bancos de dados não relacionais (NoSQL) já representam metade do país e o Graph Database se tornou um líder entre eles.  

O chamado banco de dados de gráficos, que usa a Teoria dos Grafos para armazenar os atributos relevantes das entidades e as informações de relacionamento entre eles. O exemplo mais comum é o relacionamento entre pessoas nas redes sociais. Em comparação com os bancos de dados relacionais (como MySQL, etc.), os bancos de dados gráficos são mais capazes dessa tarefa.  

Bancos de dados gráficos já surgiram com muitos softwares excelentes, como o artigo do autor Neo4j Introdução ao filme chinês Box Office Ranking Analysis of Neo4j, FlockDB do Twitter construído para análise de dados relacionais e banco de dados gráfico distribuído altamente escalonável JanusGraph E o banco de dados de gráficos de código aberto do Google, Cayley, etc.  

Este artigo apresentará especificamente o banco de dados de gráficos Cayley.


Introdução ao Cayley Graph Database

640? Wx_fmt = png
Caylay Graph Database

  

O banco de dados gráfico Cayley é um banco de dados gráfico de código aberto do Google, inspirado no banco de dados gráfico por trás do Freebase e no gráfico de conhecimento do Google. Ele é escrito na linguagem Go e os comandos de execução são simples, geralmente apenas 3 a 4 comandos são necessários. Ao mesmo tempo, possui uma API RESTful, um editor de consulta integrado e uma interface visual, e oferece suporte a várias linguagens de consulta, como JavaScript, MQL, etc. Além disso, ele também pode suportar uma variedade de armazenamento de banco de dados back-end, como MySQL, MongoDB, LevelDB, etc., com bom desempenho, boa cobertura de teste e funções muito ricas e poderosas.  

Claro, para nós, o recurso mais importante deve ser o código aberto. O endereço oficial do Github do Cayley Graph Database é: https://github.com/cayleygraph/cayley.  

A seguir apresentamos especificamente como instalar e usar o banco de dados gráfico Cayley.

Instalação e instruções

  

Com relação à instalação do banco de dados gráfico Cayley, diferentes sistemas operacionais possuem diferentes métodos de instalação. O URL de download é: https://github.com/cayleygraph/cayley/releases, a captura de tela é a seguinte:

640? Wx_fmt = png
URL de download

Os leitores podem fazer o download do arquivo correspondente de acordo com seu próprio sistema de computador.O computador do autor é um Mac, então escolha o arquivo cayley_0.7.5_darwin_amd64.tar.gz. Ao mesmo tempo, você precisa instalar um banco de dados Cayley para armazenar dados de back-end em seu computador.Eu escolhi o banco de dados MongoDB.  

Claro, Cayley também fornece um documento de instrução completo, você pode consultar o site: https://github.com/cayleygraph/cayley/blob/master/docs/Quickstart-As-Application.md, pode ajudá-lo a se familiarizar rapidamente A operação de Cayley o ajudará a começar rapidamente. O autor usará uma maneira mais simples para ajudá-lo a se familiarizar com o banco de dados de gráficos. 

Então, vamos começar!


preparação de dados

  

Para entender melhor o banco de dados de gráficos de Cayley, devemos começar com os dados passo a passo para construir o banco de dados de gráficos e implementar a função de consulta. Os dados neste artigo vêm do artigo "Introdução ao Neo4j: Análise da classificação da bilheteria de filmes chineses", que rastreou as informações de bilheteria de filmes chineses da seguinte maneira:

640? Wx_fmt = png
Bilheteria de filmes chineses

E as informações da estrela em cada filme, da seguinte forma:

640? Wx_fmt = png
Informações sobre a estrela do filme

Dois arquivos de tabela movies.csv e actor.csv são obtidos. O conteúdo dos arquivos é o seguinte:

640? Wx_fmt = png

movies.csv

640? Wx_fmt = png
atores.csv

Os dados estão prontos. Se os leitores precisarem baixar os dados, eles podem consultar o site: https://github.com/percent4/Neo4j_movie_demo.

Arquivo triplo

A base de dados Cayley suporta a importação de arquivos triplos. Os chamados triplos referem-se a sujeito, predicado e objeto. Cada triplo é uma linha.  

Os arquivos triplos suportados pelo banco de dados Cayley têm o sufixo nq, e cada triplo é uma linha. O assunto, o predicado e o objeto são separados por espaços. Ao mesmo tempo, você precisa prestar atenção aos seguintes itens (a experiência pessoal do autor ao pisar no fosso):

  • Preste atenção aos espaços, os espaços são sinais de entidades que dividem;

  • Observe que "," é uma palavra-chave e não pode aparecer na entidade;

  • Sem quebras de linha (como \ n) na entidade;

  • Não pode haver dados duplicados (entidades duplicadas e triplas não são aceitáveis).

  

Em seguida, usamos o programa Python para processar os arquivos movies.csv e atores.csv em triplos. Nossos princípios de extração são os seguintes:

  • Nome do filme, entidade do nome do ator;

  • A relação entre o nome do filme e o filme é ISA, ou seja, o nome do filme ISA Movie;

  • A relação entre o nome do ator e o nome do filme é ACT_IN, ou seja, o nome do ator ACT_IN nome do filme;

  • O resto do nome do filme são pares de atributos, ou seja, o nome do atributo do nome do filme, como Wolf Warriors 2 rank 1.

  O programa Python implementado é o seguinte:

# -*- 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]))

Em China_Movie.nq, há um total de 276 triplos. As primeiras linhas do arquivo são as seguintes:

<War Wolf 2>. <War Wolf 2> "1". <War Wolf 2> "/ item /% E6% 88% 98% E7% 8B% BC2". <War Wolf 2> "5,683 bilhões". <战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 ". <Wandering Earth>" 4,083 bilhões ". <Wandering Earth>" 46 ". <Wandering Earth>" 50 ". < The Wandering Earth> "2019.02.05". <Operação Mar Vermelho>.


Importar dados

  

Mova o arquivo China_Movie.nq para o diretório de dados de Cayley e configure o arquivo cayley_example.yml com o seguinte conteúdo:

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

No arquivo de configuração, é declarado que o banco de dados back-end de Cayley é MongoDB, e o ip e a porta também são especificados.  

Em seguida, execute o comando:

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

Aguarde a importação dos dados e vá para o MongoDB para visualizá-los. Se um banco de dados cayley for encontrado no MongoDB, isso indica que os dados foram importados com êxito.

640? Wx_fmt = png
Dados importados com sucesso


Use consulta

  

Em seguida, digite o comando:

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

Desta forma, a consulta no navegador é suportada, basta inserir http: // localhost: 64210 / no navegador, e a interface é a seguinte:

640? Wx_fmt = png
Interface de consulta do navegador

  

Em relação à declaração de consulta, é a essência do banco de dados de gráficos. Para Cayley, sua declaração de consulta é relativamente simples e fácil de entender. Para comandos de declaração de consulta específicos, consulte o site oficial: https://github.com/cayleygraph /cayley/blob/master/docs/GizmoAPI.md, este artigo ilustrará como consultar o banco de dados de gráficos Cayley por meio de algumas instruções de consulta simples.

Consultar quantos dados existem

O comando é:

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

Onde g representa o gráfico, V representa o vértice e g.Emit () retornará o resultado no formato JSON. O resultado é o seguinte:

{	
    "result": [	
        521	
    ]	
}

Confira todos os filmes

O comando é:

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

Os resultados retornados são os seguintes:

{	
    "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;"	
        ]	
    ]	
}
Consulte todos os valores de atributos do filme "Wandering Earth"

O comando é:

 
  

O resultado é o seguinte:

{	
    "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"	
        }	
    ]	
}
Pesquisar filmes estrelados por Shen Teng

O comando é:

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

O resultado é:

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

O comando é:

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);

O resultado é:

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

  

Resumindo

Neste artigo, o autor apresenta um novo banco de dados gráfico Cayley, como instalá-lo e como importar dados triplos para consulta. Espero dar aos leitores alguma referência ~  

Embora seja o banco de dados de gráficos de código aberto do Google, não há muitas introduções sobre o banco de dados de gráficos de Cayley na Internet, e eles não foram explicados em profundidade. A maioria deles copia as explicações de documentos oficiais. Espero que a explicação do autor possa trazer algum progresso. Este também é o autor. O objetivo de escrever este artigo. Espero que este artigo possa ajudar os leitores ~

[Autor deste artigo]

jclian: Trabalho em Python há mais de dois anos. Sou um entusiasta de Python. Gosto de algoritmos e adoro compartilhar. Espero fazer mais amigos que pensam da mesma forma e seguir adiante na estrada de aprender Python juntos!

Leitura recomendada

(Clique no título para pular para ler)

Escreva um banco de dados NoSQL em Python

O caso de assassinato de exclusão acidental do banco de dados de produção, um engenheiro sênior da SF Express foi demitido

Acha que este artigo é útil para você? Por favor, compartilhe com mais pessoas

Preste atenção ao "Desenvolvedor Python" estrelado para melhorar as habilidades do Python

640? Wx_fmt = png

Bom artigo, estou lendo ❤️

Acho que você gosta

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