You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hugegraph.apache.org by je...@apache.org on 2025/08/30 17:21:22 UTC

(incubator-hugegraph) branch StringId-hold-bytes created (now 7202d54c3)

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

jermy pushed a change to branch StringId-hold-bytes
in repository https://gitbox.apache.org/repos/asf/incubator-hugegraph.git


      at 7202d54c3 perf(core): StringId hold bytes to avoid decode/encode

This branch includes the following new commits:

     new 7202d54c3 perf(core): StringId hold bytes to avoid decode/encode

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(incubator-hugegraph) 01/01: perf(core): StringId hold bytes to avoid decode/encode

Posted by je...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jermy pushed a commit to branch StringId-hold-bytes
in repository https://gitbox.apache.org/repos/asf/incubator-hugegraph.git

commit 7202d54c34d906fd62a8e79b3ad68ae6856ebe4b
Author: Jermy Li <je...@apache.org>
AuthorDate: Sun Aug 31 01:19:20 2025 +0800

    perf(core): StringId hold bytes to avoid decode/encode
    
    Change-Id: I1ff93a2ee31f142fb7ab5cfe0e038ef2da2f982d
---
 .../apache/hugegraph/backend/id/IdGenerator.java   | 43 ++++++++++++++++------
 .../memory/consumer/impl/id/StringIdOffHeap.java   |  1 +
 2 files changed, 33 insertions(+), 11 deletions(-)

diff --git a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/backend/id/IdGenerator.java b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/backend/id/IdGenerator.java
index 17cc11684..385555bdf 100644
--- a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/backend/id/IdGenerator.java
+++ b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/backend/id/IdGenerator.java
@@ -23,6 +23,7 @@ import java.util.UUID;
 import org.apache.hugegraph.backend.id.Id.IdType;
 import org.apache.hugegraph.backend.serializer.BytesBuffer;
 import org.apache.hugegraph.structure.HugeVertex;
+import org.apache.hugegraph.util.Bytes;
 import org.apache.hugegraph.util.E;
 import org.apache.hugegraph.util.LongEncoding;
 import org.apache.hugegraph.util.NumericUtil;
@@ -128,14 +129,19 @@ public abstract class IdGenerator {
     public static class StringId implements Id {
 
         protected String id;
+        protected byte[] bytes;
 
         public StringId(String id) {
             E.checkArgument(!id.isEmpty(), "The id can't be empty");
             this.id = id;
+            this.bytes = null;
         }
 
         public StringId(byte[] bytes) {
-            this.id = StringEncoding.decode(bytes);
+            E.checkArgument(bytes != null && bytes.length > 0,
+                            "The id bytes can't be null or empty");
+            this.bytes = bytes;
+            this.id = null;
         }
 
         @Override
@@ -145,27 +151,33 @@ public abstract class IdGenerator {
 
         @Override
         public Object asObject() {
-            return this.id;
+            return this.asString();
         }
 
         @Override
         public String asString() {
+            if (this.id == null) {
+                this.id = StringEncoding.decode(this.bytes);
+            }
             return this.id;
         }
 
         @Override
         public long asLong() {
-            return Long.parseLong(this.id);
+            return Long.parseLong(this.asString());
         }
 
         @Override
         public byte[] asBytes() {
-            return StringEncoding.encode(this.id);
+            if (this.bytes == null) {
+                this.bytes = StringEncoding.encode(this.id);
+            }
+            return this.bytes;
         }
 
         @Override
         public int length() {
-            return this.id.length();
+            return this.asString().length();
         }
 
         @Override
@@ -174,25 +186,34 @@ public abstract class IdGenerator {
             if (cmp != 0) {
                 return cmp;
             }
-            return this.id.compareTo(other.asString());
+            if (this.id != null) {
+                return this.id.compareTo(other.asString());
+            } else {
+                return Bytes.compare(this.bytes, other.asBytes());
+            }
         }
 
         @Override
         public int hashCode() {
-            return this.id.hashCode();
+            return this.asString().hashCode();
         }
 
         @Override
-        public boolean equals(Object other) {
-            if (!(other instanceof StringId)) {
+        public boolean equals(Object obj) {
+            if (!(obj instanceof StringId)) {
                 return false;
             }
-            return this.id.equals(((StringId) other).id);
+            StringId other = (StringId) obj;
+            if (this.id != null) {
+                return this.id.equals(other.asString());
+            } else {
+                return Bytes.equals(this.bytes, other.asBytes());
+            }
         }
 
         @Override
         public String toString() {
-            return this.id;
+            return this.asString();
         }
     }
 
diff --git a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/memory/consumer/impl/id/StringIdOffHeap.java b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/memory/consumer/impl/id/StringIdOffHeap.java
index be96c2c96..98bdc25ab 100644
--- a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/memory/consumer/impl/id/StringIdOffHeap.java
+++ b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/memory/consumer/impl/id/StringIdOffHeap.java
@@ -70,6 +70,7 @@ public class StringIdOffHeap extends IdGenerator.StringId implements OffHeapObje
     @Override
     public void releaseOriginalVarsOnHeap() {
         this.id = null;
+        this.bytes = null;
     }
 
     @Override