Gremlin est un outil de requête de base de données graphique. Notez qu'il s'agit simplement d'un outil similaire à dbeaver, navicat et sqlyog. C'est un outil spécifiquement conçu pour analyser les bases de données graphiques.
télécharger
Adresse de téléchargementMiroirs de téléchargement Apache
Pour éviter les ennuis, vous pouvez directement
wget https://www.apache.org/dyn/closer.lua/tinkerpop/3.5.1/apache-tinkerpop-gremlin-console-3.5.1-bin.zip
décompresser
décompresser apache-tinkerpop-gremlin-console-3.5.1-bin.zip
Modifier le fichier de configuration
Il y a remote-secure.yaml ici lui-même et peut être modifié directement, mais ce n'est pas recommandé. , l'un de ces yaml correspond à une connexion à une base de données. Nous en créons directement une nouvelle et copions le contenu suivant.
vim distant-secure-test.yaml
# hosts L'adresse intranet vip de l'instance KonisGraph de la base de données graphique, telle que 10.xx.xx.107
hosts : [10.xx.xx.107]
# port Port Gremlin de l'instance KonisGraph de la base de données graphique, telle que
Port 8186
: 8186 # nom d'utilisateur/mot de passe Le compte et le mot de passe de l'instance KonisGraph de la base de données graphique, tels que compte : steven, mot de passe : test-pwd-123 nom d'utilisateur : steven mot de passe : test
-
pwd-123
connectionPool : { enableSsl : false , sslEnabledProtocols : [TLSv1.2] } # sérialiseur : { className : org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config : { serializeResultToString : true }} sérialiseur : { className : org.apache.tinkerpop.gremlin. driver.ser.GraphSONMessageSerializerV3d0, configuration : {sérializeResultToString : true, useMapperFromGraph : graph }}
Notez que activateSsl: false, celui que j'ai copié auparavant, est vrai et continue de signaler les erreurs.
Le sérialiseur a également changé.
démarrer
bash ${gremlin_home}/bin/gremlin.sh
Entrée de la console
: connexion à distance tinkerpop.server conf/remote-secure-test.yaml
A cette époque, le démarrage est réussi.
Vous pouvez également utiliser ce package pour window. La seule différence est que gremlin.bat est démarré.
Parce qu'il n'y a pas beaucoup d'articles sur Gremlin, de nombreux grands ignorent les novices. Laissez-moi vous expliquer à quoi vous devez prêter attention.
Par exemple, MySQL, je veux simplement expérimenter quelques expériences de base telles que Select * Where Group Limit. Dois-je télécharger une bibliothèque MySQL, puis télécharger un Navicat ou un Dbeaver.
Gremlin a une bibliothèque intégrée (c'est ce que je comprends, et elle peut être facilement utilisée).
Connectez-vous localement
Utilisation des données intégrées Gremlin
graphique = TinkerFactory.createModern()
g = traversée().withEmbedded(graphique)
À ce stade, vous pouvez simplement expérimenter la syntaxe de Gremlin.
gremlin> gV().elementMap()
gremlin> gE().elementMap()
Connectez-vous à distance
Si vous suivez les étapes en ligne pour créer une galerie. Après l'avoir configuré selon ma configuration précédente, vous pouvez directement
: connexion à distance tinkerpop.server conf/remote-secure-test.yaml
:console distante
Notez que la connexion à un emplacement distant initialisera automatiquement le schéma s et g:graph. Si vous utilisez un schéma local, vous devez initialiser le graphique vous-même.
À ce stade, la simple connexion est OK.
Adresse de l'étude
La différence entre la base de données graphiques et notre base de données relationnelle,
Les graphiques n'ont que le concept de bibliothèque et non de tableau. Toutes les données sont ensemble, comme la table des élèves, la table des enseignants et la table de l'école. Il n'y a pas de concept de tableau, seulement des points et des arêtes. Un graphe de relations composé de sommets et d'arêtes.
L'objectif principal de la base de données graphique est de découvrir la relation entre les points. Par exemple, cette base de données stocke les informations de 1,3 milliard de personnes, soit 1,3 milliard de points. Le bord, c'est qui je connais. Maintenant, il y a un besoin. Quel genre de relation, puis-je connaître Jay Chou ? ?
Le meilleur ami du petit ami du cousin du cousin de la belle-fille de la sœur de mon camarade de lycée est le voisin de l'assistant de Jay Chou.
Si cette relation nécessite que vous utilisiez MySQL pour vérifier les mêmes données et la même relation, c'est vraiment difficile à vérifier.
Mais les données graphiques ne nécessitent qu’une seule ligne de code (ma capacité est limitée et je ne sais pas comment l’optimiser)
gV().hasLabel(person).properties('name','cc').repeat(outE().otherV()).until(has('name','JAY')).path()
facile à comprendre. C'est-à-dire que la personne qui a découvert cc, en fonction du point de la personne, rayonne les bords vers l'extérieur jusqu'à ce qu'il y ait un point =jay
Bon, commençons par l'apprentissage de base. Rappelez-vous l'image ci-dessous, toutes les opérations sont basées sur cette image à titre de tutoriel
gremlin> gV().elementMap()
==>[id:1,label:person,name:marko,age:29]
==>[id:2,label:person,name:vadas,age:27]
= =>[id:3,label:software,name:lop,lang:java]
==>[id:4,label:person,name:josh,age:32]
==>[id:5,label:software ,name:ripple,lang:java]
==>[id:6,label:person,name:peter,age:35]
gremlin> gE().elementMap()
==>[id:7,label:knows, IN:[id:2,label:person],OUT:[id:1,label:person],weight:0.5] ==>[id:8,label:knows,IN:[id:4,label:
person ],OUT:[id:1,label:person],weight:1.0]
==>[id:9,label:created,IN:[id:3,label:software],OUT:[id:1,label :personne],poids:0,4]
==>[id:10,label:created,IN:[id:5,label:software],OUT:[id:4,label:person],weight:1.0]
==>[id:11,label:created,IN:[id:3,label:software],OUT:[id:4,label:person],weight:0.4] ==>[id:12,label
: créé,IN :[id:3,label:software],OUT:[id:6,label:person],weight:0.2]
gremlin>
1. Opérations de base des graphiques
V()
、E()
、id()
、label()
、properties()
、valueMap()
、values(),elementMap()
V()
: Requête des sommets, généralement utilisée comme première étape dans la requête graphique, et il existe de nombreux types d'instructions qui peuvent être poursuivies ultérieurement.
E()
: Arêtes de requête, généralement utilisées comme première étape dans une requête graphique, et il existe de nombreux types d'instructions qui peuvent être poursuivies ultérieurement.
id()
: Obtenez les identifiants des sommets et des arêtes.
label()
: Obtenez les étiquettes des sommets et des arêtes
properties()
: Obtenez les attributs des sommets et des arêtes. De plus properties()
, il peut également être utilisé avec et pour obtenir le nom ou la valeur de l'attribut key()
.value()
valueMap()
: Récupère les attributs des sommets et des arêtes. La différence est que les structures qu'ils renvoient sont différentes . valueMap()
Ce dernier aplatit tous les attributs dans une grande liste, et un élément représente un attribut. Le premier conserve les attributs d'un sommet ou d'une arête. Comme un groupe, chaque groupe est constitué de paires clé-valeur de plusieurs attributs.properties()
values()
: Obtenez les valeurs attributaires des sommets et des arêtes.
elementMap:获取了标签和id 和valueMap properties都不一样
Essai 1
gremlin> g.V() (1) 查所有的点
==>v[1]
==>v[2]
==>v[3]
==>v[4]
==>v[5]
==>v[6]
gremlin> g.V(1) (2) 查id=1的点
==>v[1]
gremlin> g.V(1).values('name') (3) 查id=1的点的名字
==>marko
gremlin> g.V(1).outE('knows') (4) 查id=1的点的know边(不查create边)
==>e[7][1-knows->2]
==>e[8][1-knows->4]
gremlin> g.V(1).outE('knows').inV().values('name') (5)查id=1的konw的箭头指向点的name
==>vadas
==>josh
gremlin> g.V(1).out('knows').values('name') (6) //查id=1的点的know边的点的name
==>vadas
==>josh
gremlin> g.V(1).out('knows').has('age', gt(30)).values('name') (7)
==>josh
Test 2 : Ajouter des arêtes de points
gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 bords:0] //Notez qu'il s'agit d'un nouveau graphe
gremlin> g = traversal().withEmbedded(graph)
==>graphtraversalsource[tinkergraph[vertices : 0 bords:0], standard]
gremlin> v1 = g.addV("person").property(id, 1).property("name", "marko").property("age", 29).next ( )
==>v[1]
gremlin> v2 = g.addV("software").property(id, 3).property("name", "lop").property("lang", "java") . next()
==>v[3]
gremlin> g.addE("created").from(v1).to(v2).property(id, 9).property("weight", 0.4) ==>
e [9][1-created->3]
//Ajout de deux points (1 personne et un soft) et un bord (créé)
2. Le concept de traversée des bords
Voici un conseil pour vous en souvenir,
Si l'objet actuel est un point, alors la méthode suivante sans V et E consiste à vérifier les points, et celle avec E consiste à vérifier les arêtes. Les points peuvent vérifier les points et les arêtes.
Si l'objet actuel est une arête, alors la méthode suivante doit avoir V et l'arête ne peut vérifier que des points.
Comment regarder à l'extérieur et à l'intérieur a->b a est dehors et b est dedans. Regardez la direction de la flèche, quel que soit le côté qui est en V
1. Étapes basées sur le sommet (comme le sommet « 4 » dans la figure ci-dessus) :
out(label) : accédez aux points adjacents de la direction OUT du sommet en fonction du EdgeLabel spécifié (il peut s'agir de zéro EdgeLabel, représentant tous les types d'arêtes ; il peut également s'agir d'un ou plusieurs EdgeLabel, représentant les arêtes d'un EdgeLabel donné, le idem ci-dessous) in
(label) : accédez au bord adjacent dans la direction IN du sommet selon
le EdgeLabel spécifié. Both(label) : accédez au point adjacent bidirectionnel du sommet
outE(label) en fonction du EdgeLabel spécifié : accédez au bord adjacent dans la direction OUT du sommet.
inE(label) : accédez aux arêtes adjacentes dans la direction IN du sommet en fonction du EdgeLabel spécifié.
BothE(label) : accédez aux arêtes adjacentes bidirectionnelles du sommet en fonction du EdgeLabel spécifié.Voici quelques petites démos
gremlin> gV(4).out()
==>v[5]
==>v[3] -- Prenez 4 comme sommet et regardez les flèches extérieures pointant vers 3 et 5 4create3 et 5gremlin> gV(4).in()
==>v[1] --Avec 4 comme sommet, le point de départ de la flèche pointant vers 4 est 1 1knows4
2. Étapes basées sur le bord (telles que le bord « sait » dans la figure ci-dessus) :
outV() : accède au sommet sortant de l'arête (remarque : ceci est basé sur l'arête, et les étapes ci-dessus sont toutes basées sur le sommet). Le sommet sortant fait référence au sommet de départ de l'arête. inV() : accède au sommet sortant de l'arête
. le sommet entrant de l'arête. Le sommet entrant est Désigne le sommet cible , c'est-à-dire le sommet pointé par la flèche
BothV() : accède au sommet bidirectionnel de l'arête
otherV() : accède au sommet partenaire de l'arête. bord, c'est-à-dire le sommet à l'autre extrémité par rapport au sommet de base
3.démo1
gV(4).out().in() Ceci est couramment utilisé pour vérifier les sommets liés à 1, par exemple, ils sont partenaires et aiment la même chanson que 1
gremlin> gV(4).outE().inV().inE().outV().simplePath().path() ==>[v[4],e[
11][4-created->3 ],v[3],e[9][1-créé->3],v[1]]
==>[v[4],e[11][4-créé->3],v[3 ],e[12][6-créé->3],v[6]]4 crée 3, et 1 et 6 créent également 3, donc 16 et 4 sont des relations de coopération.
En fait, c'est le suivant, j'ai aussi trouvé 1 et 6. Quant au 4 supplémentaire, j'en parlerai plus tard.
gremlin> gV(4).out().in()
==>v[4]
==>v[1]
==>v[4]
==>v[6]
3. a un apprentissage par filtre
hasLabel(labels…) : Si l’étiquette de l’objet correspond à l’une des listes d’étiquettes, il peut transmettre
hasId(ids…) : Si l’identifiant de l’objet correspond à l’une des listes d’identifiants, il peut transmettre
has(key, value) : Contient des attributs." L'objet avec l'attribut "key=value" passe et agit sur le sommet ou l'arête
has(label, key, value) : L'objet contenant l'attribut "key=value" et la valeur de l'étiquette correspond passe et agit sur le sommet ou l'arête has
(key, predicate) : contient L'objet dont la clé est key et la valeur correspondante satisfait les passes du prédicat. Il agit sur le sommet ou l'arête hasKey
(keys…) : La clé d'attribut de l'objet doit contenir tous les membres de la liste de clés à passer. Il agit sur l'attribut de sommet
hasValue(values…): object Ce n'est que lorsque la valeur de l'attribut contient tous les membres de la liste de valeurs qu'il peut passer. Il agit sur l'attribut de sommet
has( key) : l'objet contenant l'attribut dont la clé est la clé passe. Il agit sur le sommet ou l'arête.
hasNot(key) : l'objet qui ne contient pas l'attribut dont la clé est la clé. Par, agissant sur les sommets ou les arêtes
gV().has('personne','nom',within('vadas','marko')).values('age').mean()
Trouvez l'âge du point dont l'étiquette est personne et dont le nom est (vadas ou marko), calculez la valeur moyenne et initialisez-la.