Cette section introduit des méthodes sur un objet Connection
pour insérer des nodes et des edges dans le graph ou supprimer des nodes et des edges du graphset.
Chaque exemple se concentre uniquement sur l'utilisation de la méthode. Pour un exemple de code complet, veuillez vous référer à l'exemple complet.
Modèle de Données Graph d'Exemple
Les exemples ci-dessous montrent comment insérer ou supprimer des nodes ou des edges d'un graphset avec les définitions de schema et de property suivantes :
Mappage des Types de Properties
Lors de l'insertion de nodes ou d'edges, vous devrez peut-être spécifier des valeurs de property de différents types. Le mappage entre les types de property Ultipa et les types de données Java/Driver est le suivant :
Type de Property Ultipa | Type Java/Driver |
---|---|
int32 | int |
uint32 | long |
int64 | long |
uint64 | long |
float | float |
double | double |
decimal | BigDecimal , prend en charge divers types numériques (Integer , Float , Double , Long , etc.) et String |
string | String |
text | String |
datetime | String [1], prend également en charge java.util.Date et LocalDateTime lors de l'insertion en batch |
timestamp | String [1], prend également en charge java.util.Date lors de l'insertion en batch |
point | Point (type Driver) |
blob | byte[] , String |
list | List |
set | Set |
[1] Les formats de date prise en charge lors de l'insertion en batch incluent [AA]AA-MM-JJ HH:MM:SS
, [AA]AA-MM-JJ HH:MM:SSZ
, [AA]AA-MM-JJTTHH:MM:SSZ
, [AA]AA-MM-JJTTHH:MM:SSXX
, [AA]AA-MM-JJTTHH:MM:SSXXX
, [AA]AA-MM-JJ HH:MM:SS.SSS
et leurs variantes.
Insertion
insertNodes()
Insère de nouveaux nodes d'un schema dans le graph actuel.
Paramètres :
String
: Nom du schema.List<Node>
: La liste des objetsNode
à insérer.InsertRequestConfig
(Optionnel): Paramètres de configuration pour la requête.
Renvoie :
Response
: Résultat de la requête. L'objetResponse
contient un aliasnodes
qui contient tous les nodes insérés lorsqueInsertRequestConfig.silent
est défini à faux.
// Inserts two nodes into schema 'user' in graphset 'lcc', prints error code and information of the inserted nodes
InsertRequestConfig insertRequestConfig = new InsertRequestConfig();
insertRequestConfig.setInsertType(Ultipa.InsertType.NORMAL);
insertRequestConfig.setGraphName("lcc");
insertRequestConfig.setSilent(false);
List<Node> nodeList = new ArrayList<>();
Node node1 = new Node();
node1.setUUID(1l);
node1.setID("U001");
Value value1 = Value.newBuilder()
.add("name", "Alice")
.add("age", 18)
.add("score", 65.32)
.add("birthday", "1993-5-4")
.add("location", new Point(23.63, 104.25))
.add("profile", "abc")
.add("interests", Arrays.asList("tennis", "violin"))
.add("permissionCodes", new HashSet<>(Arrays.asList(2004, 3025, 1025)))
.build();
node1.setValues(value1);
nodeList.add(node1);
Node node2 = new Node();
node2.setUUID(2l);
node2.setID("U002");
Value value2 = Value.newBuilder().add("name", "Bob").build();
node2.setValues(value2);
nodeList.add(node2);
Response response = client.insertNodes("user", nodeList, insertRequestConfig);
System.out.println(response.getStatus().getErrorCode());
// There is no alias in Response if InsertRequestConfig.silent is true
List<Node> insertedNodes = response.alias("nodes").asNodes();
for (Node node : insertedNodes) {
System.out.println(node.toString());
}
SUCCESS
Node(uuid=1, id=U001, schema=user, values={name=Alice, age=18, score=65.3200000000, birthday=1993-05-04T00:00, location=POINT(23.63 104.25), profile=[B@1e66f1f5, interests=[tennis, violin], permissionCodes=[3025, 1025, 2004]})
Node(uuid=2, id=U002, schema=user, values={name=Bob, age=null, score=null, birthday=null, location=null, profile=null, interests=null, permissionCodes=null})
insertEdges()
Insère de nouveaux edges d'un schema dans le graph actuel.
Paramètres :
String
: Nom du schema.List<Edge>
: La liste des objetsEdge
à insérer.InsertRequestConfig
(Optionnel): Paramètres de configuration pour la requête.
Renvoie :
Response
: Résultat de la requête. L'objetResponse
contient un aliasedges
qui contient tous les edges insérés lorsqueInsertRequestConfig.silent
est défini à faux.
// Inserts two edges into schema 'follows' in graphset 'lcc', prints error code and information of the inserted edges
InsertRequestConfig insertRequestConfig = new InsertRequestConfig();
insertRequestConfig.setInsertType(Ultipa.InsertType.NORMAL);
insertRequestConfig.setGraphName("lcc");
insertRequestConfig.setSilent(false);
List<Edge> edgeList = new ArrayList<>();
Edge edge1 = new Edge();
edge1.setUUID(1l);
edge1.setFrom("U001");
edge1.setTo("U002");
Value value1 = Value.newBuilder().add("createdOn", "2024-5-6").build();
edge1.setValues(value1);
edgeList.add(edge1);
Edge edge2 = new Edge();
edge2.setUUID(2l);
edge2.setFrom("U002");
edge2.setTo("U001");
Value value2 = Value.newBuilder().add("createdOn", "2024-5-8").build();
edge2.setValues(value2);
edgeList.add(edge2);
Response response = client.insertEdges("follows", edgeList, insertRequestConfig);
System.out.println(response.getStatus().getErrorCode());
// There is no alias in Response if InsertRequestConfig.silent is true
List<Edge> insertedEdges = response.alias("edges").asEdges();
for (Edge edge : insertedEdges) {
System.out.println(edge.toString());
}
SUCCESS
Edge(uuid=1, fromUuid=1, toUuid=2, from=U001, to=U002, schema=follows, values={createdOn=Mon May 06 00:00:00 CST 2024})
Edge(uuid=2, fromUuid=2, toUuid=1, from=U002, to=U001, schema=follows, values={createdOn=Wed May 08 00:00:00 CST 2024})
insertNodesBatchBySchema()
Insère de nouveaux nodes d'un schema dans le graph actuel via gRPC. Les properties à l'intérieur des valeurs du node doivent être cohérentes avec celles déclarées dans la structure du schema.
Paramètres :
Schema
: Le schema cible.List<Node>
: La liste des objetsNode
à insérer.InsertRequestConfig
(Optionnel): Paramètres de configuration pour la requête.
Renvoie :
Response
: Résultat de la requête.Response.InsertNodesReply
contient le rapport d'insertion lorsqueInsertRequestConfig.silent
est défini à faux.
// Inserts two nodes into schema 'user' in graphset 'lcc', prints error code and the insert reply
InsertRequestConfig insertRequestConfig = new InsertRequestConfig();
insertRequestConfig.setInsertType(Ultipa.InsertType.NORMAL);
insertRequestConfig.setGraphName("lcc");
insertRequestConfig.setSilent(false);
ArrayList<Property> properties = new ArrayList<>();
Property property1 = new Property(), property2 = new Property(), property3 = new Property(), property4 = new Property(), property5 = new Property(), property6 = new Property(), property7 = new Property(), property8 = new Property();
property1.setName("name");
property1.setType("string");
property2.setName("age");
property2.setType("int32");
property3.setName("score");
property3.setType("decimal");
property4.setName("birthday");
property4.setType("datetime");
property5.setName("location");
property5.setType("point");
property6.setName("profile");
property6.setType("blob");
property7.setName("interests");
property7.setType("string[]");
property8.setName("permissionCodes");
property8.setType("set(int32)");
properties.add(property1);
properties.add(property2);
properties.add(property3);
properties.add(property4);
properties.add(property5);
properties.add(property6);
properties.add(property7);
properties.add(property8);
Schema schema = new Schema();
schema.setName("user");
schema.setProperties(properties);
List<Node> nodeList = new ArrayList<>();
Node node1 = new Node();
node1.setUUID(1l);
node1.setID("U001");
Value value1 = Value.newBuilder()
.add("name", "Alice")
.add("age", 18)
.add("score", 65.32)
//.add("birthday", "1993-05-04")
//.add("birthday", new Date(736473600000l)) // Timestamp in milliseconds
.add("birthday", LocalDateTime.of(1993,5,4,00,00))
.add("location", new Point(23.63, 104.25))
.add("profile", "abc")
.add("interests", Arrays.asList("tennis", "violin"))
.add("permissionCodes", new HashSet<>(Arrays.asList(2004, 3025, 1025)))
.build();
node1.setValues(value1);
nodeList.add(node1);
Node node2 = new Node();
node2.setUUID(2l);
node2.setID("U002");
Value value2 = Value.newBuilder()
.add("name", "Bob")
.add("age", null)
.add("score", null)
.add("birthday", null)
.add("location", null)
.add("profile", null)
.add("interests", null)
.add("permissionCodes", null)
.build();
node2.setValues(value2);
nodeList.add(node2);
Response response = client.insertNodesBatchBySchema(schema, nodeList, insertRequestConfig);
System.out.println(response.getStatus().getErrorCode());
// Response.InsertNodesReply is null if InsertRequestConfig.silent is true
System.out.println(response.getInsertNodesReply());
SUCCESS
InsertResponse(idList=[], uuidList=[1, 2], errorItems={})
insertEdgesBatchBySchema()
Insère de nouveaux edges d'un schema dans le graph actuel via gRPC. Les properties à l'intérieur des valeurs de l'edge doivent être cohérentes avec celles déclarées dans la structure du schema.
Paramètres :
Schema
: Le schema cible.List<Edge>
: La liste des objetsEdge
à insérer.InsertRequestConfig
(Optionnel): Paramètres de configuration pour la requête.
Renvoie :
Response
: Résultat de la requête.Response.InsertNodesReply
contient le rapport d'insertion lorsqueInsertRequestConfig.silent
est défini à faux.
// Inserts two edges into schema 'follows' in graphset 'lcc', prints error code and the insert reply
InsertRequestConfig insertRequestConfig = new InsertRequestConfig();
insertRequestConfig.setInsertType(Ultipa.InsertType.NORMAL);
insertRequestConfig.setGraphName("lcc");
insertRequestConfig.setSilent(false);
ArrayList<Property> properties = new ArrayList<>();
Property property = new Property();
property.setName("createdOn");
property.setType("timestamp");
properties.add(property);
Schema schema = new Schema();
schema.setName("follows");
schema.setProperties(properties);
List<Edge> edgeList = new ArrayList<>();
Edge edge1 = new Edge();
edge1.setUUID(1l);
edge1.setFrom("U001");
edge1.setTo("U002");
Value value1 = Value.newBuilder().add("createdOn", "2024-05-06").build();
edge1.setValues(value1);
edgeList.add(edge1);
Edge edge2 = new Edge();
edge2.setUUID(2l);
edge2.setFrom("U002");
edge2.setTo("U001");
Value value2 = Value.newBuilder().add("createdOn", new Date(1715169600000l)).build();
edge2.setValues(value2);
edgeList.add(edge2);
Response response = client.insertEdgesBatchBySchema(schema, edgeList, insertRequestConfig);
System.out.println(response.getStatus().getErrorCode());
// Response.InsertEdgesReply is null if InsertRequestConfig.silent is true
System.out.println(response.getInsertEdgesReply());
SUCCESS
InsertResponse(idList=null, uuidList=[1, 2], errorItems={})
insertNodesBatchAuto()
Insère de nouveaux nodes d'un ou plusieurs schemas dans le graph actuel via gRPC. Les properties à l'intérieur des valeurs des nodes doivent être cohérentes avec celles définies dans la structure du schema correspondant.
Paramètres :
List<Node>
: La liste des objetsNode
à insérer.InsertRequestConfig
(Optionnel): Paramètres de configuration pour la requête.
Renvoie :
Response
: Résultat de la requête.Response.InsertNodesReply
contient le rapport d'insertion lorsqueInsertRequestConfig.silent
est défini à faux.
// Inserts two nodes into schema 'user' and one node into schema `product` in graphset 'lcc', prints error code and the insert reply
InsertRequestConfig insertRequestConfig = new InsertRequestConfig();
insertRequestConfig.setInsertType(Ultipa.InsertType.NORMAL);
insertRequestConfig.setGraphName("lcc");
insertRequestConfig.setSilent(false);
List<Node> nodeList = new ArrayList<>();
Node node1 = new Node();
node1.setSchema("user");
node1.setUUID(1l);
node1.setID("U001");
Value value1 = Value.newBuilder()
.add("name", "Alice")
.add("age", 18)
.add("score", 65.32)
//.add("birthday", "1993-05-04")
//.add("birthday", new Date(736473600000l)) // Timestamp in milliseconds
.add("birthday", LocalDateTime.of(1993,5,4,00,00))
.add("location", new Point(23.63, 104.25))
.add("profile", "abc")
.add("interests", Arrays.asList("tennis", "violin"))
.add("permissionCodes", new HashSet<>(Arrays.asList(2004, 3025, 1025)))
.build();
node1.setValues(value1);
nodeList.add(node1);
Node node2 = new Node();
node2.setSchema("user");
node2.setUUID(2l);
node2.setID("U002");
Value value2 = Value.newBuilder()
.add("name", "Bob")
.add("age", null)
.add("score", null)
.add("birthday", null)
.add("location", null)
.add("profile", null)
.add("interests", null)
.add("permissionCodes", null)
.build();
node2.setValues(value2);
nodeList.add(node2);
Node node3 = new Node();
node3.setSchema("product");
node3.setUUID(3l);
node3.setID("P001");
Value value3 = Value.newBuilder()
.add("name", "Wireless Earbud")
.add("price", 93.2f)
.build();
node3.setValues(value3);
nodeList.add(node3);
Response response = client.insertNodesBatchAuto(nodeList, insertRequestConfig);
System.out.println(response.getStatus().getErrorCode());
// Response.InsertNodesReply is null if InsertRequestConfig.silent is true
System.out.println(response.getInsertNodesReply());
SUCCESS
InsertResponse(idList=[], uuidList=[3, 1, 2], errorItems={})
insertEdgesBatchAuto()
Insère de nouveaux edges d'un ou plusieurs schemas dans le graph actuel via gRPC. Les properties à l'intérieur des valeurs des edges doivent être cohérentes avec celles définies dans la structure du schema correspondant.
Paramètres :
List<Edge>
: La liste des objetsEdge
à insérer.InsertRequestConfig
(Optionnel): Paramètres de configuration pour la requête.
Renvoie :
Response
: Résultat de la requête.Response.InsertEdgesReply
contient le rapport d'insertion lorsqueInsertRequestConfig.silent
est défini à faux.
// Inserts two edges into schema 'follows' and one edge into schema 'purchased' in graphset 'lcc', prints error code and the insert reply
InsertRequestConfig insertRequestConfig = new InsertRequestConfig();
insertRequestConfig.setInsertType(Ultipa.InsertType.NORMAL);
insertRequestConfig.setGraphName("lcc");
insertRequestConfig.setSilent(false);
List<Edge> edgeList = new ArrayList<>();
Edge edge1 = new Edge();
edge1.setSchema("follows");
edge1.setUUID(1l);
edge1.setFrom("U001");
edge1.setTo("U002");
Value value1 = Value.newBuilder().add("createdOn", "2024-05-06").build();
edge1.setValues(value1);
edgeList.add(edge1);
Edge edge2 = new Edge();
edge2.setSchema("follows");
edge2.setUUID(2l);
edge2.setFrom("U002");
edge2.setTo("U001");
Value value2 = Value.newBuilder().add("createdOn", new Date(1715169600000l)).build();
edge2.setValues(value2);
edgeList.add(edge2);
Edge edge3 = new Edge();
edge3.setSchema("purchased");
edge3.setUUID(3l);
edge3.setFrom("U002");
edge3.setTo("P001");
Value value3 = Value.newBuilder().add("qty", 1l).build();
edge3.setValues(value3);
edgeList.add(edge3);
Response response = client.insertEdgesBatchAuto(edgeList, insertRequestConfig);
System.out.println(response.getStatus().getErrorCode());
// Response.InsertEdgesReply is null if InsertRequestConfig.silent is true
System.out.println(response.getInsertEdgesReply());
SUCCESS
InsertResponse(idList=[], uuidList=[3, 1, 2], errorItems={})
Suppression
deleteNodes()
Supprime les nodes qui répondent aux conditions données du graph actuel. Il est important de noter que la suppression d'un node entraîne la suppression de tous les edges qui y sont connectés.
Paramètres :
String
: La condition de filtrage pour spécifier les nodes à supprimer.Integer
(Optionnel): Le nombre maximum de nodes à supprimer ; ignorez ce paramètre ou définissez-le à-1
pour tout supprimer.InsertRequestConfig
(Optionnel): Paramètres de configuration pour la requête.
Renvoie :
Response
: Résultat de la requête. L'objetResponse
contient un aliasnodes
qui contient tous les nodes supprimés lorsqueInsertRequestConfig.silent
est défini à faux.
// Deletes one @user nodes whose name is 'Alice' from graphset 'lcc', prints error code and information of the deleted nodes
// All edges attached to the deleted node are deleted as well
InsertRequestConfig insertRequestConfig = new InsertRequestConfig();
insertRequestConfig.setInsertType(Ultipa.InsertType.NORMAL);
insertRequestConfig.setGraphName("lcc");
insertRequestConfig.setSilent(false);
Response response = client.deleteNodes("@user.name == 'Alice'", 1, insertRequestConfig);
System.out.println(response.getStatus().getErrorCode());
// There is no alias in Response if InsertRequestConfig.silent is true
List<Node> deletedNodes = response.alias("nodes").asNodes();
for (Node node : deletedNodes) {
System.out.println(node.toString());
}
SUCCESS
Node(uuid=1, id=U001, schema=user, values={name=Alice})
deleteEdges()
Supprime les edges qui répondent aux conditions données du graph actuel.
Paramètres :
String
: La condition de filtrage pour spécifier les edges à supprimer.Integer
(Optionnel): Le nombre maximum d'edges à supprimer ; ignorez ce paramètre ou définissez-le à-1
pour tout supprimer.InsertRequestConfig
(Optionnel): Paramètres de configuration pour la requête.
Renvoie :
Response
: Résultat de la requête. L'objetResponse
contient un aliasedges
qui contient tous les edges supprimés lorsqueInsertRequestConfig.silent
est défini à faux.
// Deletes all @purchased edges from graphset 'lcc', prints error code and information of the deleted edges
InsertRequestConfig insertRequestConfig = new InsertRequestConfig();
insertRequestConfig.setInsertType(Ultipa.InsertType.NORMAL);
insertRequestConfig.setGraphName("lcc");
insertRequestConfig.setSilent(false);
Response response = client.deleteEdges("@purchased", insertRequestConfig);
System.out.println(response.getStatus().getErrorCode());
// There is no alias in Response if InsertRequestConfig.silent is true
List<Edge> deletedEdges = response.alias("edges").asEdges();
for (Edge edge : deletedEdges) {
System.out.println(edge.toString());
}
SUCCESS
Edge(uuid=3, fromUuid=2, toUuid=3, from=U002, to=P001, schema=purchased, values={})
Exemple Complet
package com.ultipa.www.sdk.api;
import com.ultipa.Ultipa;
import com.ultipa.sdk.connect.Connection;
import com.ultipa.sdk.connect.conf.InsertRequestConfig;
import com.ultipa.sdk.connect.conf.UltipaConfiguration;
import com.ultipa.sdk.connect.driver.UltipaClientDriver;
import com.ultipa.sdk.operate.entity.*;
import com.ultipa.sdk.operate.response.Response;
import com.ultipa.sdk.data.Point;
import java.time.LocalDateTime;
import java.util.*;
import java.util.List;
public class Main {
public static void main(String[] args) {
// Configuration de la connexion
UltipaConfiguration myConfig = UltipaConfiguration.config()
// URI example: .hosts("mqj4zouys.us-east-1.cloud.ultipa.com:60010")
.hosts("192.168.1.85:60611,192.168.1.87:60611,192.168.1.88:60611")
.username("<username>")
.password("<password>");
UltipaClientDriver driver = null;
try {
// Établit la connexion à la base de données
driver = new UltipaClientDriver(myConfig);
Connection client = driver.getConnection();
Thread.sleep(3000);
// Configuration des requêtes d'insertion
InsertRequestConfig insertRequestConfig = new InsertRequestConfig();
insertRequestConfig.setInsertType(Ultipa.InsertType.NORMAL);
insertRequestConfig.setGraphName("lcc");
insertRequestConfig.setSilent(false);
// Insère deux nodes dans le schema 'user' et un node dans le schema `product` dans le graphset 'lcc', imprime le code d'erreur et la réponse d'insertion
List<Node> nodeList = new ArrayList<>();
Node node1 = new Node();
node1.setSchema("user");
node1.setUUID(1l);
node1.setID("U001");
Value value1 = Value.newBuilder()
.add("name", "Alice")
.add("age", 18)
.add("score", 65.32)
//.add("birthday", "1993-05-04")
//.add("birthday", new Date(736473600000l)) // Timestamp in milliseconds
.add("birthday", LocalDateTime.of(1993,5,4,00,00))
.add("location", new Point(23.63, 104.25))
.add("profile", "abc")
.add("interests", Arrays.asList("tennis", "violin"))
.add("permissionCodes", new HashSet<>(Arrays.asList(2004, 3025, 1025)))
.build();
node1.setValues(value1);
nodeList.add(node1);
Node node2 = new Node();
node2.setSchema("user");
node2.setUUID(2l);
node2.setID("U002");
Value value2 = Value.newBuilder()
.add("name", "Bob")
.add("age", null)
.add("score", null)
.add("birthday", null)
.add("location", null)
.add("profile", null)
.add("interests", null)
.add("permissionCodes", null)
.build();
node2.setValues(value2);
nodeList.add(node2);
Node node3 = new Node();
node3.setSchema("product");
node3.setUUID(3l);
node3.setID("P001");
Value value3 = Value.newBuilder()
.add("name", "Wireless Earbud")
.add("price", 93.2f)
.build();
node3.setValues(value3);
nodeList.add(node3);
Response response = client.insertNodesBatchAuto(nodeList, insertRequestConfig);
System.out.println(response.getStatus().getErrorCode());
// Response.InsertNodesReply is null if InsertRequestConfig.silent is true
System.out.println(response.getInsertNodesReply());
} catch (InterruptedException e) {
throw new RuntimeException(e);
} finally {
if (driver != null) {
driver.close();
}
}
}
}