Introduction et utilisation de la base de données de graphiques de Cayley

(Développeurs Star Python pour améliorer leurs compétences Python)

Auteur: jclian (Cet article de la soumission)

Base de données graphique

  

À l'ère actuelle des chefs de guerre des bases de données, les bases de données non relationnelles (NoSQL) représentent déjà la moitié du pays, et Graph Database est devenu un leader parmi eux.  

La base de données dite de graphes, qui utilise la théorie des graphes pour stocker les attributs pertinents des entités et les informations de relation entre elles. L'exemple le plus courant est la relation entre les personnes sur les réseaux sociaux. Par rapport aux bases de données relationnelles (telles que MySQL, etc.), les bases de données de graphes sont plus capables de cette tâche.  

La base de données Graph a vu le jour de nombreux logiciels exceptionnels, tels que l'article de l'auteur Neo4j Introduction to Chinese Movie Box Office Ranking Analysis of Neo4j, Twitter's FlockDB construit pour l'analyse de données relationnelles, et la base de données de graphes distribués hautement évolutive JanusGraph Et la base de données de graphiques open source de Google Cayley, etc.  

Cet article présentera spécifiquement la base de données de graphes Cayley.


Introduction à la base de données Cayley Graph

640? Wx_fmt = png
Base de données Caylay Graph

  

La base de données de graphiques Cayley est une base de données de graphiques open source de Google, inspirée de la base de données de graphiques derrière Freebase et le graphique de connaissances de Google. Il est écrit en langage Go, et les commandes en cours d'exécution sont simples, généralement seulement 3 à 4 commandes sont nécessaires. En même temps, il dispose d'une API RESTful, d'un éditeur de requêtes intégré et d'une interface visuelle, et prend en charge plusieurs langages de requête, tels que JavaScript, MQL, etc. En outre, il peut également prendre en charge une variété de stockage de base de données back-end, tels que MySQL, MongoDB, LevelDB, etc., avec de bonnes performances, une bonne couverture de test et des fonctions très riches et puissantes.  

Bien sûr, pour nous, la fonctionnalité la plus importante devrait être l'open source. L'adresse officielle Github de la base de données Cayley Graph est: https://github.com/cayleygraph/cayley.  

Ce qui suit présente spécifiquement comment installer et utiliser la base de données de graphiques Cayley.

Installation et instructions

  

Concernant l'installation de la base de données Cayley graph, différents systèmes d'exploitation ont des méthodes d'installation différentes. L'URL de téléchargement est: https://github.com/cayleygraph/cayley/releases, la capture d'écran est la suivante:

640? Wx_fmt = png
Télécharger l'URL

Les lecteurs peuvent télécharger le fichier correspondant en fonction de leur propre système informatique.L'ordinateur de l'auteur est un Mac, alors choisissez le fichier cayley_0.7.5_darwin_amd64.tar.gz. En même temps, vous devez installer une base de données Cayley pour stocker les données back-end sur votre ordinateur.J'ai choisi la base de données MongoDB.  

Bien sûr, Cayley vous fournit également un document d'instructions complet, vous pouvez vous référer au site Web: https://github.com/cayleygraph/cayley/blob/master/docs/Quickstart-As-Application.md, cela peut vous aider à vous familiariser rapidement L'opération de Cayley vous aidera à démarrer rapidement. L'auteur utilisera un moyen plus simple pour vous aider à vous familiariser avec la base de données de graphes. 

Alors, commençons!


préparation des données

  

Afin de mieux comprendre la base de données de graphes de Cayley, nous devons partir des données étape par étape pour construire la base de données de graphes et implémenter la fonction de requête. Les données de cet article proviennent de l'article "Introduction à Neo4j: analyse du classement chinois du cinéma au box-office", qui a analysé les informations sur le box-office du cinéma chinois, comme suit:

640? Wx_fmt = png
Billetterie du cinéma chinois

Et les informations principales de chaque film, comme suit:

640? Wx_fmt = png
Film mettant en vedette des informations

Deux fichiers de table movies.csv et acteur.csv sont obtenus. Le contenu des fichiers est le suivant:

640? Wx_fmt = png

movies.csv

640? Wx_fmt = png
acteurs.csv

Les données sont prêtes. Si les lecteurs ont besoin de télécharger les données, ils peuvent se référer au site Web: https://github.com/percent4/Neo4j_movie_demo.

Fichier triple

La base de données Cayley prend en charge l'importation de fichiers triples. Les triplets font référence au sujet, au prédicat et à l'objet. Chaque triplet est une ligne.  

Les fichiers triples pris en charge par la base de données Cayley portent le suffixe nq et chaque triplet correspond à une ligne. Le sujet, le prédicat et l’objet sont séparés par des espaces. En même temps, vous devez prêter attention aux éléments suivants (expérience personnelle de l’auteur de marcher sur la fosse):

  • Faites attention aux espaces, les espaces sont des signes d'entités qui se divisent;

  • Notez que "," est un mot-clé et ne peut pas apparaître dans l'entité;

  • Aucun saut de ligne (comme \ n) dans l'entité;

  • Il ne peut y avoir de données en double (les entités et les triplets en double ne sont pas acceptables).

  

Ensuite, nous utilisons le programme Python pour traiter les fichiers movies.csv et acteurs.csv en triplets. Nos principes d'extraction sont les suivants:

  • Nom du film, entité du nom de l'acteur;

  • La relation entre le nom du film et le film est ISA, c'est-à-dire le nom du film ISA Movie;

  • La relation entre le nom de l'acteur et le nom du film est ACT_IN, c'est-à-dire le nom de l'acteur ACT_IN nom du film;

  • Le reste du nom du film sont des paires d'attributs, c'est-à-dire le nom d'attribut du nom du film, tel que Wolf Warriors 2 rang 1.

  Le programme Python implémenté est le suivant:

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

Dans China_Movie.nq, il y a un total de 276 triplets. Les premières lignes du fichier sont les suivantes:

<War Wolf 2>. <War Wolf 2> "1". <War Wolf 2> "/ item /% E6% 88% 98% E7% 8B% BC2". <War Wolf 2> "5.683 milliards". <War 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 billion ". <Wandering Earth>" 46 ". <Wandering Earth>" 50 ". < The Wandering Earth> "2019.02.05". <Opération Mer Rouge>.


Importer des données

  

Déplacez le fichier China_Movie.nq dans le répertoire de données de Cayley et configurez le fichier cayley_example.yml avec le contenu suivant:

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

Dans le fichier de configuration, il est déclaré que la base de données principale de Cayley est MongoDB, et l'ip et le port sont également spécifiés.  

Exécutez ensuite la commande:

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

Attendez que les données soient importées, puis accédez à MongoDB pour les afficher. Si une base de données cayley est trouvée dans MongoDB, cela indique que les données ont été importées avec succès.

640? Wx_fmt = png
Données importées avec succès


Utiliser la requête

  

Entrez ensuite la commande:

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

De cette manière, les requêtes dans le navigateur sont prises en charge. Entrez simplement http: // localhost: 64210 / dans le navigateur. L'interface est la suivante:

640? Wx_fmt = png
Interface de requête du navigateur

  

En ce qui concerne l'instruction de requête, c'est l'essence même de la base de données de graphes. Pour Cayley, son instruction de requête est relativement simple et facile à comprendre. Pour des commandes d'instruction de requête spécifiques, veuillez consulter le site officiel: https://github.com/cayleygraph /cayley/blob/master/docs/GizmoAPI.md, cet article illustrera comment interroger la base de données de graphes Cayley à travers quelques instructions de requête simples.

Recherchez le nombre total d'éléments de données

La commande est:

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

Où g représente le graphique, V représente le sommet et g.Emit () renverra le résultat au format JSON. La sortie est la suivante:

{	
    "result": [	
        521	
    ]	
}

Vérifiez tous les films

La commande est:

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

Les résultats renvoyés sont les suivants:

{	
    "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;"	
        ]	
    ]	
}
Interroger toutes les valeurs d'attribut du film "Wandering Earth"

La commande est:

 
  

La sortie est la suivante:

{	
    "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"	
        }	
    ]	
}
Rechercher des films avec Shen Teng

La commande est:

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

La sortie est:

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

La commande est:

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 sortie est:

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

  

Pour résumer

Dans cet article, l'auteur présente une nouvelle base de données de graphes Cayley, et présente sa méthode d'installation, et comment importer des données de triplet pour la requête. J'espère donner aux lecteurs quelques références ~  

Bien qu’il s’agisse de la base de données de graphes open source de Google, il n’existe pas beaucoup d’introductions sur la base de données de graphes Cayley sur Internet et elles n’ont pas été expliquées en profondeur. La plupart d’entre elles copient les explications de documents officiels. Le but de la rédaction de cet article. J'espère que cet article pourra aider les lecteurs ~

[Auteur de cet article]

jclian: Je suis engagé dans Python depuis plus de deux ans. Je suis un passionné de Python. J'aime les algorithmes et j'adore partager. J'espère me faire plus d'amis partageant les mêmes idées et aller plus loin sur la voie de l'apprentissage de Python ensemble!

Lecture recommandée

(Cliquez sur le titre pour sauter pour lire)

Ecrire une base de données NoSQL en Python

Dans l'affaire du meurtre de la suppression accidentelle de la base de données de production, un ingénieur senior de SF Express a été renvoyé

Vous pensez que cet article vous est utile? Veuillez partager avec plus de personnes

Faites attention au "Développeur Python" mis en vedette pour améliorer les compétences Python

640? Wx_fmt = png

Bon article, je lis ❤️

Je suppose que tu aimes

Origine blog.csdn.net/iodjSVf8U1J7KYc/article/details/100436899
conseillé
Classement