This is an automated email from the ASF dual-hosted git repository.

vgalaxies pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-hugegraph.git


The following commit(s) were added to refs/heads/master by this push:
     new b642b5a4f perf(example): add PerfExample5 and PerfExample6 (#2860)
b642b5a4f is described below

commit b642b5a4fa5d1116f3ac7afb196db358eb2bd76e
Author: Jermy Li <[email protected]>
AuthorDate: Tue Sep 16 10:25:11 2025 +0800

    perf(example): add PerfExample5 and PerfExample6 (#2860)
---
 .../org/apache/hugegraph/example/PerfExample1.java |   4 +
 .../org/apache/hugegraph/example/PerfExample2.java |   4 +
 .../org/apache/hugegraph/example/PerfExample4.java |   7 +-
 .../org/apache/hugegraph/example/PerfExample5.java | 101 +++++++++++++++++++++
 .../org/apache/hugegraph/example/PerfExample6.java |  70 ++++++++++++++
 .../apache/hugegraph/example/PerfExampleBase.java  |  52 ++++++-----
 6 files changed, 211 insertions(+), 27 deletions(-)

diff --git 
a/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExample1.java
 
b/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExample1.java
index f015b5956..7cf3edd76 100644
--- 
a/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExample1.java
+++ 
b/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExample1.java
@@ -24,8 +24,10 @@ import java.util.Random;
 import org.apache.hugegraph.HugeFactory;
 import org.apache.hugegraph.backend.BackendException;
 import org.apache.hugegraph.schema.SchemaManager;
+import org.apache.hugegraph.util.Log;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.slf4j.Logger;
 
 import com.datastax.driver.core.exceptions.NoHostAvailableException;
 
@@ -34,6 +36,8 @@ import 
com.datastax.driver.core.exceptions.NoHostAvailableException;
  */
 public class PerfExample1 extends PerfExampleBase {
 
+    private static final Logger LOG = Log.logger(PerfExample1.class);
+
     public static void main(String[] args) throws Exception {
         PerfExample1 tester = new PerfExample1();
         tester.test(args);
diff --git 
a/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExample2.java
 
b/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExample2.java
index 5dc50f80f..c984ad314 100644
--- 
a/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExample2.java
+++ 
b/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExample2.java
@@ -24,8 +24,10 @@ import java.util.Random;
 import org.apache.hugegraph.HugeFactory;
 import org.apache.hugegraph.backend.BackendException;
 import org.apache.hugegraph.schema.SchemaManager;
+import org.apache.hugegraph.util.Log;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.slf4j.Logger;
 
 import com.datastax.driver.core.exceptions.NoHostAvailableException;
 
@@ -34,6 +36,8 @@ import 
com.datastax.driver.core.exceptions.NoHostAvailableException;
  */
 public class PerfExample2 extends PerfExampleBase {
 
+    private static final Logger LOG = Log.logger(PerfExample2.class);
+
     public static void main(String[] args) throws Exception {
         PerfExample2 tester = new PerfExample2();
         tester.test(args);
diff --git 
a/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExample4.java
 
b/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExample4.java
index c686e360d..9626093bf 100644
--- 
a/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExample4.java
+++ 
b/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExample4.java
@@ -29,7 +29,7 @@ import org.slf4j.Logger;
  */
 public class PerfExample4 extends PerfExample3 {
 
-    private static final Logger LOG = Log.logger(PerfExample3.class);
+    private static final Logger LOG = Log.logger(PerfExample4.class);
 
     /**
      * Main method
@@ -79,9 +79,4 @@ public class PerfExample4 extends PerfExample3 {
             LOG.info(">>>> query by range index, cost: {}ms", 
elapsed(current));
         }
     }
-
-    protected static long elapsed(long start) {
-        long current = System.currentTimeMillis();
-        return current - start;
-    }
 }
diff --git 
a/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExample5.java
 
b/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExample5.java
new file mode 100644
index 000000000..7b540c083
--- /dev/null
+++ 
b/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExample5.java
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.hugegraph.example;
+
+import java.util.Iterator;
+
+import org.apache.hugegraph.HugeFactory;
+import org.apache.hugegraph.type.define.Directions;
+import org.apache.hugegraph.util.Log;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.slf4j.Logger;
+
+/**
+ * Perf test for: query vertices/adj-edges by ids
+ */
+public class PerfExample5 extends PerfExample3 {
+
+    private static final Logger LOG = Log.logger(PerfExample5.class);
+
+    /**
+     * Main method
+     * @param args 3 arguments, 1st should be 1, meaning single thread,
+     *             product of 2nd and 3rd is total number of "person" vertices
+     * @throws InterruptedException
+     */
+    public static void main(String[] args) throws Exception {
+        PerfExample5 tester = new PerfExample5();
+        tester.test(args);
+
+        // Stop daemon thread
+        HugeFactory.shutdown(30L);
+    }
+
+    @Override
+    protected void testQueryVertex(GraphManager graph,
+                                   int threads,
+                                   int thread,
+                                   int multiple) {
+        int totalV = 0;
+        long start = System.currentTimeMillis();
+        for (int i = 0; i < multiple; i++) {
+            int j = 0;
+            for (Object id : this.vertices) {
+                if (j++ % threads != thread) {
+                    continue;
+                }
+                graph.queryVertex(id);
+                totalV++;
+            }
+        }
+        long cost = elapsed(start);
+        LOG.info("Query {} vertices with thread({}): {} vertices/s",
+                 totalV, thread, totalV * 1000 / cost);
+    }
+
+    @Override
+    protected void testQueryEdge(GraphManager graph,
+                                 int threads,
+                                 int thread,
+                                 int multiple) {
+        int totalV = 0;
+        int totalE = 0;
+        long start = System.currentTimeMillis();
+
+        for (int i = 0; i < multiple; i++) {
+            int j = 0;
+            for (Object id : this.vertices) {
+                if (j++ % threads != thread) {
+                    continue;
+                }
+
+                Iterator<Edge> edges = graph.queryVertexEdge(id, 
Directions.OUT);
+                while (edges.hasNext()) {
+                    edges.next();
+                    totalE++;
+                }
+                totalV++;
+            }
+        }
+        long cost = elapsed(start);
+        LOG.info("Query {} edges of vertices({}) with thread({}): " +
+                 "{} vertices/s, {} edges/s",
+                 totalE, totalV, thread,
+                 totalV * 1000 / cost, totalE * 1000 / cost);
+    }
+}
diff --git 
a/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExample6.java
 
b/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExample6.java
new file mode 100644
index 000000000..b22048184
--- /dev/null
+++ 
b/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExample6.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.hugegraph.example;
+
+import org.apache.hugegraph.HugeFactory;
+import org.apache.hugegraph.util.Log;
+import org.apache.tinkerpop.gremlin.structure.T;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.slf4j.Logger;
+
+/**
+ * Perf test for: query vertices/adj-edges by ids with edges insert
+ */
+public class PerfExample6 extends PerfExample5 {
+
+    private static final Logger LOG = Log.logger(PerfExample6.class);
+
+    /**
+     * Main method
+     * @param args 3 arguments, 1st should be 1, meaning single thread,
+     *             product of 2nd and 3rd is total number of "person" vertices
+     * @throws InterruptedException
+     */
+    public static void main(String[] args) throws Exception {
+        PerfExample6 tester = new PerfExample6();
+        tester.test(args);
+
+        // Stop daemon thread
+        HugeFactory.shutdown(30L);
+    }
+
+    @Override
+    protected void testInsert(GraphManager graph, int times, int multiple) {
+        final int TIMES = times * multiple;
+        final int BATCH = 100;
+        long total = 0;
+        Vertex lastV = null;
+        // Insert in order
+        for (int i = 0; i < TIMES; i++) {
+            for (int j = 0; j < BATCH; j++) {
+                String name = String.format("p-%08d", total++);
+                Vertex v = graph.addVertex(T.label, "person", "name", name,
+                                           "city", "Hongkong", "age", 3);
+                this.vertices.add(v.id());
+
+                if (lastV != null) {
+                    v.addEdge("knows", lastV);
+                }
+                lastV = v;
+            }
+            graph.tx().commit();
+        }
+        LOG.info("Insert {} vertices and {} edges", total, total - 1L);
+    }
+}
diff --git 
a/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExampleBase.java
 
b/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExampleBase.java
index 684866674..278b6336b 100644
--- 
a/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExampleBase.java
+++ 
b/hugegraph-server/hugegraph-example/src/main/java/org/apache/hugegraph/example/PerfExampleBase.java
@@ -51,7 +51,7 @@ public abstract class PerfExampleBase {
     public static final int SOFTWARE_NUM = 30;
     public static final int EDGE_NUM = 100;
 
-    protected static final Logger LOG = Log.logger(PerfExampleBase.class);
+    private static final Logger LOG = Log.logger(PerfExampleBase.class);
 
     protected Set<Object> vertices = Collections.newSetFromMap(new 
ConcurrentHashMap<>());
     protected boolean profile = false;
@@ -66,6 +66,8 @@ public abstract class PerfExampleBase {
         int times = Integer.parseInt(args[1]);
         int multiple = Integer.parseInt(args[2]);
         this.profile = Boolean.parseBoolean(args[3]);
+        System.out.printf("Run: threads=%s times=%s multiple=%s profile=%s\n",
+                          threadCount, times, multiple, this.profile);
 
         // NOTE: this test with HugeGraph is for local,
         // change it into a client if test with restful server from remote
@@ -118,7 +120,7 @@ public abstract class PerfExampleBase {
             this.testQueryVertex(graph, threadCount, i, multiple);
         }, threadCount);
 
-        final long size = (long) (PERSON_NUM + SOFTWARE_NUM) * threadCount * 
times;
+        final long size = this.vertices.size();
         LOG.info("Query rate with threads: {} vertices/s, " +
                  "query total vertices {}, cost time: {}ms",
                  size * 1000 / cost, size, cost);
@@ -130,7 +132,7 @@ public abstract class PerfExampleBase {
             this.testQueryEdge(graph, threadCount, i, multiple);
         }, threadCount);
 
-        final long size = (long) (PERSON_NUM + SOFTWARE_NUM) * threadCount * 
times;
+        final long size = this.vertices.size();
         LOG.info("Query rate with threads: {} vedges/s, " +
                  "query total vedges {}, cost time: {}ms",
                  size * 1000 / cost, size, cost);
@@ -188,26 +190,29 @@ public abstract class PerfExampleBase {
 
     protected abstract void testInsert(GraphManager graph, int times, int 
multiple);
 
-    protected void testQueryVertex(GraphManager graph, int threads, int 
thread, int multiple) {
-        int i = 0;
-        int j = 0;
-        int total = 0;
-        for (Object id : this.vertices) {
-            if (i++ % multiple != 0) {
-                continue;
-            }
-            if (j++ % threads != thread) {
-                continue;
-            }
-
-            LOG.debug("Query vertex {}: {}", i, id);
-            Vertex vertex = graph.queryVertex(id);
-            if (!vertex.id().equals(id)) {
-                LOG.warn("Query vertex by id {} returned {}", id, vertex);
+    protected void testQueryVertex(GraphManager graph,
+                                   int threads,
+                                   int thread,
+                                   int multiple) {
+        int totalV = 0;
+        long start = System.currentTimeMillis();
+        for (int i = 0; i < multiple; i++) {
+            int j = 0;
+            for (Object id : this.vertices) {
+                if (j++ % threads != thread) {
+                    continue;
+                }
+                LOG.debug("Query vertex {}: {}", i, id);
+                Vertex vertex = graph.queryVertex(id);
+                if (!vertex.id().equals(id)) {
+                    LOG.warn("Query vertex by id {} returned {}", id, vertex);
+                }
+                totalV++;
             }
-            total++;
         }
-        LOG.debug("Query vertices with thread({}): {}", thread, total);
+        long cost = elapsed(start);
+        LOG.info("Query {} vertices with thread({}): {} vertices/s",
+                 totalV, thread, totalV * 1000 / cost);
     }
 
     protected void testQueryEdge(GraphManager graph, int threads, int thread, 
int multiple) {
@@ -235,6 +240,11 @@ public abstract class PerfExampleBase {
                   totalV, thread, totalE);
     }
 
+    protected static long elapsed(long start) {
+        long current = System.currentTimeMillis();
+        return current - start;
+    }
+
     protected static class GraphManager {
 
         private final HugeGraph hugegraph;

Reply via email to