From 505684d847c88098c40ed7954036e46788b09364 Mon Sep 17 00:00:00 2001 From: zhangyi51 Date: Tue, 19 Jan 2021 17:20:31 +0800 Subject: [PATCH 1/4] upgrade store version due to read frequency of property key Change-Id: Ie8643276d572e7eabee24f13ea0ee4ac38e60e5b --- .../cassandra/CassandraStoreProvider.java | 3 +- .../backend/serializer/TableSerializer.java | 86 +++++++++++-------- .../store/memory/InMemoryDBStoreProvider.java | 3 +- .../store/hbase/HbaseStoreProvider.java | 3 +- .../store/mysql/MysqlStoreProvider.java | 3 +- .../backend/store/palo/PaloStoreProvider.java | 3 +- .../postgresql/PostgresqlStoreProvider.java | 3 +- .../store/rocksdb/RocksDBStoreProvider.java | 3 +- 8 files changed, 62 insertions(+), 45 deletions(-) diff --git a/hugegraph-cassandra/src/main/java/com/baidu/hugegraph/backend/store/cassandra/CassandraStoreProvider.java b/hugegraph-cassandra/src/main/java/com/baidu/hugegraph/backend/store/cassandra/CassandraStoreProvider.java index fd1c4b14ca..6104bf2bdf 100644 --- a/hugegraph-cassandra/src/main/java/com/baidu/hugegraph/backend/store/cassandra/CassandraStoreProvider.java +++ b/hugegraph-cassandra/src/main/java/com/baidu/hugegraph/backend/store/cassandra/CassandraStoreProvider.java @@ -61,7 +61,8 @@ public String version() { * [1.7] #691: support aggregate property * [1.8] #746: support userdata for indexlabel * [1.9] #295: support ttl for vertex and edge + * [1.10] #1333: support read frequency for property key */ - return "1.9"; + return "1.10"; } } diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/serializer/TableSerializer.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/serializer/TableSerializer.java index 732d504db0..f144acbf26 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/serializer/TableSerializer.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/serializer/TableSerializer.java @@ -483,16 +483,16 @@ public VertexLabel readVertexLabel(HugeGraph graph, TableBackendEntry entry = this.convertEntry(backendEntry); - Number id = entry.column(HugeKeys.ID); - String name = entry.column(HugeKeys.NAME); - Number idStrategy = entry.column(HugeKeys.ID_STRATEGY); - Object properties = entry.column(HugeKeys.PROPERTIES); - Object primaryKeys = entry.column(HugeKeys.PRIMARY_KEYS); - Object nullableKeys = entry.column(HugeKeys.NULLABLE_KEYS); - Object indexLabels = entry.column(HugeKeys.INDEX_LABELS); - Number status = entry.column(HugeKeys.STATUS); - Number ttl = entry.column(HugeKeys.TTL); - Number ttlStartTime = entry.column(HugeKeys.TTL_START_TIME); + Number id = schemaColumn(entry, HugeKeys.ID); + String name = schemaColumn(entry, HugeKeys.NAME); + Number idStrategy = schemaColumn(entry, HugeKeys.ID_STRATEGY); + Object properties = schemaColumn(entry, HugeKeys.PROPERTIES); + Object primaryKeys = schemaColumn(entry, HugeKeys.PRIMARY_KEYS); + Object nullableKeys = schemaColumn(entry, HugeKeys.NULLABLE_KEYS); + Object indexLabels = schemaColumn(entry, HugeKeys.INDEX_LABELS); + Number status = schemaColumn(entry, HugeKeys.STATUS); + Number ttl = schemaColumn(entry, HugeKeys.TTL); + Number ttlStartTime = schemaColumn(entry, HugeKeys.TTL_START_TIME); VertexLabel vertexLabel = new VertexLabel(graph, this.toId(id), name); vertexLabel.idStrategy(SerialEnum.fromCode(IdStrategy.class, @@ -518,18 +518,18 @@ public EdgeLabel readEdgeLabel(HugeGraph graph, BackendEntry backendEntry) { TableBackendEntry entry = this.convertEntry(backendEntry); - Number id = entry.column(HugeKeys.ID); - String name = entry.column(HugeKeys.NAME); - Number frequency = entry.column(HugeKeys.FREQUENCY); - Number sourceLabel = entry.column(HugeKeys.SOURCE_LABEL); - Number targetLabel = entry.column(HugeKeys.TARGET_LABEL); - Object sortKeys = entry.column(HugeKeys.SORT_KEYS); - Object nullableKeys = entry.column(HugeKeys.NULLABLE_KEYS); - Object properties = entry.column(HugeKeys.PROPERTIES); - Object indexLabels = entry.column(HugeKeys.INDEX_LABELS); - Number status = entry.column(HugeKeys.STATUS); - Number ttl = entry.column(HugeKeys.TTL); - Number ttlStartTime = entry.column(HugeKeys.TTL_START_TIME); + Number id = schemaColumn(entry, HugeKeys.ID); + String name = schemaColumn(entry, HugeKeys.NAME); + Number frequency = schemaColumn(entry, HugeKeys.FREQUENCY); + Number sourceLabel = schemaColumn(entry, HugeKeys.SOURCE_LABEL); + Number targetLabel = schemaColumn(entry, HugeKeys.TARGET_LABEL); + Object sortKeys = schemaColumn(entry, HugeKeys.SORT_KEYS); + Object nullableKeys = schemaColumn(entry, HugeKeys.NULLABLE_KEYS); + Object properties = schemaColumn(entry, HugeKeys.PROPERTIES); + Object indexLabels = schemaColumn(entry, HugeKeys.INDEX_LABELS); + Number status = schemaColumn(entry, HugeKeys.STATUS); + Number ttl = schemaColumn(entry, HugeKeys.TTL); + Number ttlStartTime = schemaColumn(entry, HugeKeys.TTL_START_TIME); EdgeLabel edgeLabel = new EdgeLabel(graph, this.toId(id), name); edgeLabel.frequency(SerialEnum.fromCode(Frequency.class, @@ -558,14 +558,14 @@ public PropertyKey readPropertyKey(HugeGraph graph, TableBackendEntry entry = this.convertEntry(backendEntry); - Number id = entry.column(HugeKeys.ID); - String name = entry.column(HugeKeys.NAME); - Number dataType = entry.column(HugeKeys.DATA_TYPE); - Number cardinality = entry.column(HugeKeys.CARDINALITY); - Number aggregateType = entry.column(HugeKeys.AGGREGATE_TYPE); - Number readFrequency = entry.column(HugeKeys.READ_FREQUENCY); - Object properties = entry.column(HugeKeys.PROPERTIES); - Number status = entry.column(HugeKeys.STATUS); + Number id = schemaColumn(entry, HugeKeys.ID); + String name = schemaColumn(entry, HugeKeys.NAME); + Number dataType = schemaColumn(entry, HugeKeys.DATA_TYPE); + Number cardinality = schemaColumn(entry, HugeKeys.CARDINALITY); + Number aggregateType = schemaColumn(entry, HugeKeys.AGGREGATE_TYPE); + Number readFrequency = schemaColumn(entry, HugeKeys.READ_FREQUENCY); + Object properties = schemaColumn(entry, HugeKeys.PROPERTIES); + Number status = schemaColumn(entry, HugeKeys.STATUS); PropertyKey propertyKey = new PropertyKey(graph, this.toId(id), name); propertyKey.dataType(SerialEnum.fromCode(DataType.class, @@ -610,13 +610,13 @@ public IndexLabel readIndexLabel(HugeGraph graph, TableBackendEntry entry = this.convertEntry(backendEntry); - Number id = entry.column(HugeKeys.ID); - String name = entry.column(HugeKeys.NAME); - Number baseType = entry.column(HugeKeys.BASE_TYPE); - Number baseValueId = entry.column(HugeKeys.BASE_VALUE); - Number indexType = entry.column(HugeKeys.INDEX_TYPE); - Object indexFields = entry.column(HugeKeys.FIELDS); - Number status = entry.column(HugeKeys.STATUS); + Number id = schemaColumn(entry, HugeKeys.ID); + String name = schemaColumn(entry, HugeKeys.NAME); + Number baseType = schemaColumn(entry, HugeKeys.BASE_TYPE); + Number baseValueId = schemaColumn(entry, HugeKeys.BASE_VALUE); + Number indexType = schemaColumn(entry, HugeKeys.INDEX_TYPE); + Object indexFields = schemaColumn(entry, HugeKeys.FIELDS); + Number status = schemaColumn(entry, HugeKeys.STATUS); IndexLabel indexLabel = new IndexLabel(graph, this.toId(id), name); indexLabel.baseType(SerialEnum.fromCode(HugeType.class, @@ -669,7 +669,8 @@ protected void writeEnableLabelIndex(SchemaLabel schema, protected void readEnableLabelIndex(SchemaLabel schema, TableBackendEntry entry) { - Boolean enableLabelIndex = entry.column(HugeKeys.ENABLE_LABEL_INDEX); + Boolean enableLabelIndex = schemaColumn(entry, + HugeKeys.ENABLE_LABEL_INDEX); schema.enableLabelIndex(enableLabelIndex); } @@ -678,4 +679,13 @@ protected abstract void writeUserdata(SchemaElement schema, protected abstract void readUserdata(SchemaElement schema, TableBackendEntry entry); + + private static T schemaColumn(TableBackendEntry entry, HugeKeys key) { + assert entry.type().isSchema(); + + T column = entry.column(key); + E.checkState(column != null, "Not found key '%s' from entry %s", + key, entry); + return column; + } } diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/store/memory/InMemoryDBStoreProvider.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/store/memory/InMemoryDBStoreProvider.java index 274af58b2e..86de96f74a 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/store/memory/InMemoryDBStoreProvider.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/store/memory/InMemoryDBStoreProvider.java @@ -93,7 +93,8 @@ public String version() { * [1.4] #746: support userdata for indexlabel * [1.5] #820: store vertex properties in one column * [1.6] #894: encode label id in string index + * [1.7] #1333: support read frequency for property key */ - return "1.5"; + return "1.7"; } } diff --git a/hugegraph-hbase/src/main/java/com/baidu/hugegraph/backend/store/hbase/HbaseStoreProvider.java b/hugegraph-hbase/src/main/java/com/baidu/hugegraph/backend/store/hbase/HbaseStoreProvider.java index 8c2fd12e77..f1c6634d60 100644 --- a/hugegraph-hbase/src/main/java/com/baidu/hugegraph/backend/store/hbase/HbaseStoreProvider.java +++ b/hugegraph-hbase/src/main/java/com/baidu/hugegraph/backend/store/hbase/HbaseStoreProvider.java @@ -62,7 +62,8 @@ public String version() { * [1.8] #820: store vertex properties in one column * [1.9] #894: encode label id in string index * [1.10] #295: support ttl for vertex and edge + * [1.11] #1333: support read frequency for property key */ - return "1.10"; + return "1.11"; } } diff --git a/hugegraph-mysql/src/main/java/com/baidu/hugegraph/backend/store/mysql/MysqlStoreProvider.java b/hugegraph-mysql/src/main/java/com/baidu/hugegraph/backend/store/mysql/MysqlStoreProvider.java index d34f29ed1b..b07b6b101a 100644 --- a/hugegraph-mysql/src/main/java/com/baidu/hugegraph/backend/store/mysql/MysqlStoreProvider.java +++ b/hugegraph-mysql/src/main/java/com/baidu/hugegraph/backend/store/mysql/MysqlStoreProvider.java @@ -62,7 +62,8 @@ public String version() { * [1.8] #894: asStoredString() encoding is changed to signed B64 * instead of sortable B64 * [1.9] #295: support ttl for vertex and edge + * [1.10] #1333: support read frequency for property key */ - return "1.9"; + return "1.10"; } } diff --git a/hugegraph-palo/src/main/java/com/baidu/hugegraph/backend/store/palo/PaloStoreProvider.java b/hugegraph-palo/src/main/java/com/baidu/hugegraph/backend/store/palo/PaloStoreProvider.java index 031b1ea7c4..27bdde28b7 100644 --- a/hugegraph-palo/src/main/java/com/baidu/hugegraph/backend/store/palo/PaloStoreProvider.java +++ b/hugegraph-palo/src/main/java/com/baidu/hugegraph/backend/store/palo/PaloStoreProvider.java @@ -63,8 +63,9 @@ public String version() { * [1.7] #894: asStoredString() encoding is changed to signed B64 * instead of sortable B64 * [1.8] #295: support ttl for vertex and edge + * [1.9] #1333: support read frequency for property key */ - return "1.8"; + return "1.9"; } public static class PaloSchemaStore extends PaloStore { diff --git a/hugegraph-postgresql/src/main/java/com/baidu/hugegraph/backend/store/postgresql/PostgresqlStoreProvider.java b/hugegraph-postgresql/src/main/java/com/baidu/hugegraph/backend/store/postgresql/PostgresqlStoreProvider.java index 4fa3575326..04a5c30851 100644 --- a/hugegraph-postgresql/src/main/java/com/baidu/hugegraph/backend/store/postgresql/PostgresqlStoreProvider.java +++ b/hugegraph-postgresql/src/main/java/com/baidu/hugegraph/backend/store/postgresql/PostgresqlStoreProvider.java @@ -64,8 +64,9 @@ public String version() { * [1.6] #894: asStoredString() encoding is changed to signed B64 * instead of sortable B64 * [1.7] #295: support ttl for vertex and edge + * [1.8] #1333: support read frequency for property key */ - return "1.7"; + return "1.8"; } public static class PostgresqlSchemaStore extends PostgresqlStore { diff --git a/hugegraph-rocksdb/src/main/java/com/baidu/hugegraph/backend/store/rocksdb/RocksDBStoreProvider.java b/hugegraph-rocksdb/src/main/java/com/baidu/hugegraph/backend/store/rocksdb/RocksDBStoreProvider.java index 120027b4b6..c4206eb2f3 100644 --- a/hugegraph-rocksdb/src/main/java/com/baidu/hugegraph/backend/store/rocksdb/RocksDBStoreProvider.java +++ b/hugegraph-rocksdb/src/main/java/com/baidu/hugegraph/backend/store/rocksdb/RocksDBStoreProvider.java @@ -61,7 +61,8 @@ public String version() { * [1.7] #820: store vertex properties in one column * [1.8] #894: encode label id in string index * [1.9] #295: support ttl for vertex and edge + * [1.10] #1333: support read frequency for property key */ - return "1.9"; + return "1.10"; } } From 979c2ea7f2ae0bfb8b5cdce67e2ebeeadf350fd3 Mon Sep 17 00:00:00 2001 From: zhangyi51 Date: Tue, 19 Jan 2021 21:25:59 +0800 Subject: [PATCH 2/4] improve Change-Id: I33d2ea650855f8bf2088a5255661d55900d3cf62 --- .../backend/serializer/BinarySerializer.java | 16 ++- .../backend/serializer/TableSerializer.java | 110 ++++++++++-------- .../backend/serializer/TextSerializer.java | 6 + .../hugegraph/type/define/SerialEnum.java | 7 ++ 4 files changed, 90 insertions(+), 49 deletions(-) diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/serializer/BinarySerializer.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/serializer/BinarySerializer.java index 3620d72efc..e585135252 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/serializer/BinarySerializer.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/serializer/BinarySerializer.java @@ -1018,8 +1018,9 @@ public PropertyKey readPropertyKey(HugeGraph graph, Cardinality.class)); propertyKey.aggregateType(readEnum(HugeKeys.AGGREGATE_TYPE, AggregateType.class)); - propertyKey.readFrequency(readEnum(HugeKeys.READ_FREQUENCY, - ReadFrequency.class)); + propertyKey.readFrequency(readEnumOrDefault(HugeKeys.READ_FREQUENCY, + ReadFrequency.class, + ReadFrequency.OLTP)); propertyKey.properties(readIds(HugeKeys.PROPERTIES)); propertyKey.status(readEnum(HugeKeys.STATUS, SchemaStatus.class)); readUserdata(propertyKey); @@ -1095,6 +1096,17 @@ private T readEnum(HugeKeys key, return SerialEnum.fromCode(clazz, value[0]); } + private T readEnumOrDefault(HugeKeys key, + Class clazz, + T defaultValue) { + BackendColumn column = this.entry.column(formatColumnName(key)); + if (column == null) { + return defaultValue; + } + E.checkNotNull(column.value, "column.value"); + return SerialEnum.fromCode(clazz, column.value[0]); + } + private void writeLong(HugeKeys key, long value) { @SuppressWarnings("resource") BytesBuffer buffer = new BytesBuffer(8); diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/serializer/TableSerializer.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/serializer/TableSerializer.java index f144acbf26..5f3f4733d0 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/serializer/TableSerializer.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/serializer/TableSerializer.java @@ -485,28 +485,28 @@ public VertexLabel readVertexLabel(HugeGraph graph, Number id = schemaColumn(entry, HugeKeys.ID); String name = schemaColumn(entry, HugeKeys.NAME); - Number idStrategy = schemaColumn(entry, HugeKeys.ID_STRATEGY); + IdStrategy idStrategy = schemaEnum(entry, HugeKeys.ID_STRATEGY, + IdStrategy.class); Object properties = schemaColumn(entry, HugeKeys.PROPERTIES); Object primaryKeys = schemaColumn(entry, HugeKeys.PRIMARY_KEYS); Object nullableKeys = schemaColumn(entry, HugeKeys.NULLABLE_KEYS); Object indexLabels = schemaColumn(entry, HugeKeys.INDEX_LABELS); - Number status = schemaColumn(entry, HugeKeys.STATUS); + SchemaStatus status = schemaEnum(entry, HugeKeys.STATUS, + SchemaStatus.class); Number ttl = schemaColumn(entry, HugeKeys.TTL); Number ttlStartTime = schemaColumn(entry, HugeKeys.TTL_START_TIME); VertexLabel vertexLabel = new VertexLabel(graph, this.toId(id), name); - vertexLabel.idStrategy(SerialEnum.fromCode(IdStrategy.class, - idStrategy.byteValue())); + vertexLabel.idStrategy(idStrategy); vertexLabel.properties(this.toIdArray(properties)); vertexLabel.primaryKeys(this.toIdArray(primaryKeys)); vertexLabel.nullableKeys(this.toIdArray(nullableKeys)); vertexLabel.indexLabels(this.toIdArray(indexLabels)); - this.readEnableLabelIndex(vertexLabel, entry); - this.readUserdata(vertexLabel, entry); - vertexLabel.status(SerialEnum.fromCode(SchemaStatus.class, - status.byteValue())); + vertexLabel.status(status); vertexLabel.ttl(ttl.longValue()); vertexLabel.ttlStartTime(this.toId(ttlStartTime)); + this.readEnableLabelIndex(vertexLabel, entry); + this.readUserdata(vertexLabel, entry); return vertexLabel; } @@ -520,32 +520,32 @@ public EdgeLabel readEdgeLabel(HugeGraph graph, BackendEntry backendEntry) { Number id = schemaColumn(entry, HugeKeys.ID); String name = schemaColumn(entry, HugeKeys.NAME); - Number frequency = schemaColumn(entry, HugeKeys.FREQUENCY); + Frequency frequency = schemaEnum(entry, HugeKeys.FREQUENCY, + Frequency.class); Number sourceLabel = schemaColumn(entry, HugeKeys.SOURCE_LABEL); Number targetLabel = schemaColumn(entry, HugeKeys.TARGET_LABEL); Object sortKeys = schemaColumn(entry, HugeKeys.SORT_KEYS); Object nullableKeys = schemaColumn(entry, HugeKeys.NULLABLE_KEYS); Object properties = schemaColumn(entry, HugeKeys.PROPERTIES); Object indexLabels = schemaColumn(entry, HugeKeys.INDEX_LABELS); - Number status = schemaColumn(entry, HugeKeys.STATUS); + SchemaStatus status = schemaEnum(entry, HugeKeys.STATUS, + SchemaStatus.class); Number ttl = schemaColumn(entry, HugeKeys.TTL); Number ttlStartTime = schemaColumn(entry, HugeKeys.TTL_START_TIME); EdgeLabel edgeLabel = new EdgeLabel(graph, this.toId(id), name); - edgeLabel.frequency(SerialEnum.fromCode(Frequency.class, - frequency.byteValue())); + edgeLabel.frequency(frequency); edgeLabel.sourceLabel(this.toId(sourceLabel)); edgeLabel.targetLabel(this.toId(targetLabel)); edgeLabel.properties(this.toIdArray(properties)); edgeLabel.sortKeys(this.toIdArray(sortKeys)); edgeLabel.nullableKeys(this.toIdArray(nullableKeys)); edgeLabel.indexLabels(this.toIdArray(indexLabels)); - this.readEnableLabelIndex(edgeLabel, entry); - this.readUserdata(edgeLabel, entry); - edgeLabel.status(SerialEnum.fromCode(SchemaStatus.class, - status.byteValue())); + edgeLabel.status(status); edgeLabel.ttl(ttl.longValue()); edgeLabel.ttlStartTime(this.toId(ttlStartTime)); + this.readEnableLabelIndex(edgeLabel, entry); + this.readUserdata(edgeLabel, entry); return edgeLabel; } @@ -560,29 +560,27 @@ public PropertyKey readPropertyKey(HugeGraph graph, Number id = schemaColumn(entry, HugeKeys.ID); String name = schemaColumn(entry, HugeKeys.NAME); - Number dataType = schemaColumn(entry, HugeKeys.DATA_TYPE); - Number cardinality = schemaColumn(entry, HugeKeys.CARDINALITY); - Number aggregateType = schemaColumn(entry, HugeKeys.AGGREGATE_TYPE); - Number readFrequency = schemaColumn(entry, HugeKeys.READ_FREQUENCY); + DataType dataType = schemaEnum(entry, HugeKeys.DATA_TYPE, + DataType.class); + Cardinality cardinality = schemaEnum(entry, HugeKeys.CARDINALITY, + Cardinality.class); + AggregateType aggregateType = schemaEnum(entry, HugeKeys.AGGREGATE_TYPE, + AggregateType.class); + ReadFrequency readFrequency = schemaEnumOrDefault( + entry, HugeKeys.READ_FREQUENCY, + ReadFrequency.class, ReadFrequency.OLTP); Object properties = schemaColumn(entry, HugeKeys.PROPERTIES); - Number status = schemaColumn(entry, HugeKeys.STATUS); + SchemaStatus status = schemaEnum(entry, HugeKeys.STATUS, + SchemaStatus.class); PropertyKey propertyKey = new PropertyKey(graph, this.toId(id), name); - propertyKey.dataType(SerialEnum.fromCode(DataType.class, - dataType.byteValue())); - propertyKey.cardinality(SerialEnum.fromCode(Cardinality.class, - cardinality.byteValue())); - propertyKey.aggregateType(SerialEnum.fromCode( - AggregateType.class, - aggregateType.byteValue())); - propertyKey.readFrequency(SerialEnum.fromCode( - ReadFrequency.class, - readFrequency.byteValue())); + propertyKey.dataType(dataType); + propertyKey.cardinality(cardinality); + propertyKey.aggregateType(aggregateType); + propertyKey.readFrequency(readFrequency); propertyKey.properties(this.toIdArray(properties)); - + propertyKey.status(status); this.readUserdata(propertyKey, entry); - propertyKey.status(SerialEnum.fromCode(SchemaStatus.class, - status.byteValue())); return propertyKey; } @@ -612,22 +610,22 @@ public IndexLabel readIndexLabel(HugeGraph graph, Number id = schemaColumn(entry, HugeKeys.ID); String name = schemaColumn(entry, HugeKeys.NAME); - Number baseType = schemaColumn(entry, HugeKeys.BASE_TYPE); + HugeType baseType = schemaEnum(entry, HugeKeys.BASE_TYPE, + HugeType.class); Number baseValueId = schemaColumn(entry, HugeKeys.BASE_VALUE); - Number indexType = schemaColumn(entry, HugeKeys.INDEX_TYPE); + IndexType indexType = schemaEnum(entry, HugeKeys.INDEX_TYPE, + IndexType.class); Object indexFields = schemaColumn(entry, HugeKeys.FIELDS); - Number status = schemaColumn(entry, HugeKeys.STATUS); + SchemaStatus status = schemaEnum(entry, HugeKeys.STATUS, + SchemaStatus.class); IndexLabel indexLabel = new IndexLabel(graph, this.toId(id), name); - indexLabel.baseType(SerialEnum.fromCode(HugeType.class, - baseType.byteValue())); + indexLabel.baseType(baseType); indexLabel.baseValue(this.toId(baseValueId)); - indexLabel.indexType(SerialEnum.fromCode(IndexType.class, - indexType.byteValue())); + indexLabel.indexType(indexType); indexLabel.indexFields(this.toIdArray(indexFields)); + indexLabel.status(status); this.readUserdata(indexLabel, entry); - indexLabel.status(SerialEnum.fromCode(SchemaStatus.class, - status.byteValue())); return indexLabel; } @@ -683,9 +681,27 @@ protected abstract void readUserdata(SchemaElement schema, private static T schemaColumn(TableBackendEntry entry, HugeKeys key) { assert entry.type().isSchema(); - T column = entry.column(key); - E.checkState(column != null, "Not found key '%s' from entry %s", - key, entry); - return column; + T value = entry.column(key); + E.checkState(value != null, + "Not found key '%s' from entry %s", key, entry); + return value; + } + + private T schemaEnum(TableBackendEntry entry, + HugeKeys key, Class clazz) { + Number value = schemaColumn(entry, key); + return SerialEnum.fromCode(clazz, value.byteValue()); + } + + private T schemaEnumOrDefault( + TableBackendEntry entry, HugeKeys key, + Class clazz, T defaultValue) { + assert entry.type().isSchema(); + + Number value = entry.column(key); + if (value == null) { + return defaultValue; + } + return SerialEnum.fromCode(clazz, value.byteValue()); } } diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/serializer/TextSerializer.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/serializer/TextSerializer.java index 4bb09b7b5e..18d896046e 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/serializer/TextSerializer.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/serializer/TextSerializer.java @@ -65,6 +65,7 @@ import com.baidu.hugegraph.type.define.HugeKeys; import com.baidu.hugegraph.type.define.IdStrategy; import com.baidu.hugegraph.type.define.IndexType; +import com.baidu.hugegraph.type.define.ReadFrequency; import com.baidu.hugegraph.type.define.SchemaStatus; import com.baidu.hugegraph.util.E; import com.baidu.hugegraph.util.JsonUtil; @@ -658,6 +659,8 @@ public BackendEntry writePropertyKey(PropertyKey propertyKey) { JsonUtil.toJson(propertyKey.cardinality())); entry.column(HugeKeys.AGGREGATE_TYPE, JsonUtil.toJson(propertyKey.aggregateType())); + entry.column(HugeKeys.READ_FREQUENCY, + JsonUtil.toJson(propertyKey.readFrequency())); entry.column(HugeKeys.PROPERTIES, writeIds(propertyKey.properties())); writeUserdata(propertyKey, entry); entry.column(HugeKeys.STATUS, @@ -679,6 +682,7 @@ public PropertyKey readPropertyKey(HugeGraph graph, String dataType = entry.column(HugeKeys.DATA_TYPE); String cardinality = entry.column(HugeKeys.CARDINALITY); String aggregateType = entry.column(HugeKeys.AGGREGATE_TYPE); + String readFrequency = entry.column(HugeKeys.READ_FREQUENCY); String properties = entry.column(HugeKeys.PROPERTIES); String status = entry.column(HugeKeys.STATUS); @@ -688,6 +692,8 @@ public PropertyKey readPropertyKey(HugeGraph graph, Cardinality.class)); propertyKey.aggregateType(JsonUtil.fromJson(aggregateType, AggregateType.class)); + propertyKey.readFrequency(JsonUtil.fromJson(readFrequency, + ReadFrequency.class)); propertyKey.properties(readIds(properties)); readUserdata(propertyKey, entry); propertyKey.status(JsonUtil.fromJson(status, SchemaStatus.class)); diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/type/define/SerialEnum.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/type/define/SerialEnum.java index f7e943d0c5..568427f2fe 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/type/define/SerialEnum.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/type/define/SerialEnum.java @@ -56,6 +56,13 @@ public static T fromCode(Class clazz, byte code) { public static void registerInternalEnums() { SerialEnum.register(Action.class); + SerialEnum.register(AggregateType.class); + SerialEnum.register(Cardinality.class); + SerialEnum.register(DataType.class); + SerialEnum.register(Directions.class); SerialEnum.register(HugeType.class); + SerialEnum.register(IdStrategy.class); + SerialEnum.register(IndexType.class); + SerialEnum.register(SchemaStatus.class); } } From 5eb5b62a03319f64e35738c47d68072d9a10b383 Mon Sep 17 00:00:00 2001 From: zhangyi51 Date: Tue, 19 Jan 2021 22:21:41 +0800 Subject: [PATCH 3/4] improve Change-Id: I5d98a1d95c2a9b9e084bfc18d87c1ce9ad14c331 --- .../backend/serializer/TableSerializer.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/serializer/TableSerializer.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/serializer/TableSerializer.java index 5f3f4733d0..f1659f0c84 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/serializer/TableSerializer.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/backend/serializer/TableSerializer.java @@ -687,15 +687,17 @@ private static T schemaColumn(TableBackendEntry entry, HugeKeys key) { return value; } - private T schemaEnum(TableBackendEntry entry, - HugeKeys key, Class clazz) { + private static T schemaEnum(TableBackendEntry entry, + HugeKeys key, + Class clazz) { Number value = schemaColumn(entry, key); return SerialEnum.fromCode(clazz, value.byteValue()); } - private T schemaEnumOrDefault( - TableBackendEntry entry, HugeKeys key, - Class clazz, T defaultValue) { + private static T schemaEnumOrDefault( + TableBackendEntry entry, + HugeKeys key, Class clazz, + T defaultValue) { assert entry.type().isSchema(); Number value = entry.column(key); From abe30d84e387578242c3fce20ea8148acd0cb44d Mon Sep 17 00:00:00 2001 From: zhangyi51 Date: Wed, 20 Jan 2021 16:07:10 +0800 Subject: [PATCH 4/4] improve Change-Id: I52ea252e14f6578fc7ccf4d1406917af70f43aaf --- .../main/java/com/baidu/hugegraph/type/define/SerialEnum.java | 1 + 1 file changed, 1 insertion(+) diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/type/define/SerialEnum.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/type/define/SerialEnum.java index 568427f2fe..40b245b6e1 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/type/define/SerialEnum.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/type/define/SerialEnum.java @@ -60,6 +60,7 @@ public static void registerInternalEnums() { SerialEnum.register(Cardinality.class); SerialEnum.register(DataType.class); SerialEnum.register(Directions.class); + SerialEnum.register(Frequency.class); SerialEnum.register(HugeType.class); SerialEnum.register(IdStrategy.class); SerialEnum.register(IndexType.class);