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