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

wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new 2ec8e18021 BanyanDB: support add group prefix (namespace) for BanyanDB 
groups. (#13521)
2ec8e18021 is described below

commit 2ec8e1802148fdd3754b9017f8c5582c0138f0bd
Author: Wan Kai <[email protected]>
AuthorDate: Fri Sep 26 13:34:39 2025 +0800

    BanyanDB: support add group prefix (namespace) for BanyanDB groups. (#13521)
---
 docs/en/changes/changes.md                         |   1 +
 .../server-starter/src/main/resources/bydb.yml     |   3 +
 .../banyandb/BanyanDBAggregationQueryDAO.java      |   2 +-
 .../plugin/banyandb/BanyanDBStorageClient.java     |  15 ++-
 .../plugin/banyandb/BanyanDBStorageConfig.java     |   1 +
 .../plugin/banyandb/BanyanDBStorageProvider.java   |   5 +-
 .../banyandb/BanyanDBUIMenuManagementDAO.java      |   6 +-
 .../banyandb/BanyanDBUITemplateManagementDAO.java  |  16 +--
 .../storage/plugin/banyandb/MetadataRegistry.java  | 137 ++++++++++++++-------
 .../BanyanDBEBPFProfilingScheduleQueryDAO.java     |   2 +-
 .../measure/BanyanDBHierarchyQueryDAO.java         |   4 +-
 .../banyandb/measure/BanyanDBMetadataQueryDAO.java |  22 ++--
 .../banyandb/measure/BanyanDBMetricsQueryDAO.java  |   6 +-
 .../measure/BanyanDBNetworkAddressAliasDAO.java    |   2 +-
 .../banyandb/measure/BanyanDBServiceLabelDAO.java  |   2 +-
 .../measure/BanyanDBTagAutocompleteQueryDAO.java   |   4 +-
 .../banyandb/measure/BanyanDBTopologyQueryDAO.java |   8 +-
 .../banyandb/stream/AbstractBanyanDBDAO.java       |  39 +++++-
 .../BanyanDBContinuousProfilingPolicyDAO.java      |   7 +-
 .../banyandb/stream/BanyanDBEventQueryDAO.java     |   3 -
 .../banyandb/trace/BanyanDBTraceQueryDAO.java      |   8 +-
 .../banyandb/trace/BanyanDBZipkinQueryDAO.java     |  12 +-
 22 files changed, 201 insertions(+), 104 deletions(-)

diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index ec986593d4..7302de79e0 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -102,6 +102,7 @@
 * BanyanDB: fix log query missing order by condition, and fix missing service 
id condition when query by instance id or endpoint id.
 * Fix potential NPE in the `AlarmStatusQueryHandler`.
 * Aggregate TopN Slow SQL by service dimension.
+* BanyanDB: support add group prefix (namespace) for BanyanDB groups.
 
 #### UI
 
diff --git a/oap-server/server-starter/src/main/resources/bydb.yml 
b/oap-server/server-starter/src/main/resources/bydb.yml
index 520e5209ea..1260ffa34d 100644
--- a/oap-server/server-starter/src/main/resources/bydb.yml
+++ b/oap-server/server-starter/src/main/resources/bydb.yml
@@ -49,6 +49,9 @@ global:
   sslTrustCAPath: ${SW_STORAGE_BANYANDB_SSL_TRUST_CA_PATH:""}
   # Cleanup TopN rules in BanyanDB server that are not configured in the 
bydb-topn.yml config.
   cleanupUnusedTopNRules: ${SW_STORAGE_BANYANDB_CLEANUP_UNUSED_TOPN_RULES:true}
+  # The namespace in BanyanDB to store the data of OAP, if not set, the 
default is "sw".
+  # OAP will create BanyanDB Groups using the format of "{namespace}_{group 
name}", such as "sw_records".
+  namespace: ${SW_NAMESPACE:"sw"}
 
 groups:
   # The group settings of record.
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBAggregationQueryDAO.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBAggregationQueryDAO.java
index 004698da67..d44e87e876 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBAggregationQueryDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBAggregationQueryDAO.java
@@ -59,7 +59,7 @@ public class BanyanDBAggregationQueryDAO extends 
AbstractBanyanDBDAO implements
     public List<SelectedRecord> sortMetrics(TopNCondition condition, String 
valueColumnName, Duration duration, List<KeyValue> additionalConditions) throws 
IOException {
         final boolean isColdStage = duration != null && duration.isColdStage();
         final String modelName = condition.getName();
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(modelName, duration.getStep());
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(modelName, duration.getStep());
         if (schema == null) {
             throw new IOException("schema is not registered");
         }
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageClient.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageClient.java
index 5b41f4bc8d..3bb949e3cf 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageClient.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageClient.java
@@ -139,11 +139,12 @@ public class BanyanDBStorageClient implements Client, 
HealthCheckable {
         this.client.close();
     }
 
-    public List<Property> listProperties(String group, String name) throws 
IOException {
+    public List<Property> listProperties(String name) throws IOException {
         try {
+            MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findManagementMetadata(name);
             BanyandbProperty.QueryResponse resp
                 = this.client.query(BanyandbProperty.QueryRequest.newBuilder()
-                                                                 
.addGroups(group)
+                                                                 
.addGroups(schema.getMetadata().getGroup())
                                                                  .setName(name)
                                                                  
.setLimit(Integer.MAX_VALUE)
                                                                  .build());
@@ -160,10 +161,11 @@ public class BanyanDBStorageClient implements Client, 
HealthCheckable {
         }
     }
 
-    public Property queryProperty(String group, String name, String id) throws 
IOException {
+    public Property queryProperty(String name, String id) throws IOException {
         try {
+            MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findManagementMetadata(name);
             BanyandbProperty.QueryResponse resp = 
this.client.query(BanyandbProperty.QueryRequest.newBuilder()
-                                                                               
                  .addGroups(group)
+                                                                               
                  .addGroups(schema.getMetadata().getGroup())
                                                                                
                  .setName(name)
                                                                                
                  .addIds(id)
                                                                                
                  .build());
@@ -183,9 +185,10 @@ public class BanyanDBStorageClient implements Client, 
HealthCheckable {
         }
     }
 
-    public DeleteResponse deleteProperty(String group, String name, String id) 
throws IOException {
+    public DeleteResponse deleteProperty(String name, String id) throws 
IOException {
         try {
-            DeleteResponse result = this.client.deleteProperty(group, name, 
id);
+            MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findManagementMetadata(name);
+            DeleteResponse result = 
this.client.deleteProperty(schema.getMetadata().getGroup(), name, id);
             this.healthChecker.health();
             return result;
         } catch (BanyanDBException ex) {
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageConfig.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageConfig.java
index 10e5bb82ac..41d9bc2c41 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageConfig.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageConfig.java
@@ -106,6 +106,7 @@ public class BanyanDBStorageConfig extends ModuleConfig {
         private int segmentQueryMaxSize = 200;
         private int profileDataQueryBatchSize = 100;
         private boolean cleanupUnusedTopNRules = true;
+        private String namespace = "sw";
     }
 
     // The configuration of the groups.
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageProvider.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageProvider.java
index 031b271dc1..db054a31b9 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageProvider.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageProvider.java
@@ -68,6 +68,7 @@ import 
org.apache.skywalking.oap.server.library.module.ModuleProvider;
 import org.apache.skywalking.oap.server.library.module.ModuleStartException;
 import 
org.apache.skywalking.oap.server.library.module.ServiceNotProvidedException;
 import org.apache.skywalking.oap.server.library.util.CollectionUtils;
+import org.apache.skywalking.oap.server.library.util.StringUtil;
 import 
org.apache.skywalking.oap.server.storage.plugin.banyandb.measure.BanyanDBEBPFProfilingScheduleQueryDAO;
 import 
org.apache.skywalking.oap.server.storage.plugin.banyandb.stream.BanyanDBEventQueryDAO;
 import 
org.apache.skywalking.oap.server.storage.plugin.banyandb.measure.BanyanDBHierarchyQueryDAO;
@@ -133,7 +134,9 @@ public class BanyanDBStorageProvider extends ModuleProvider 
{
     public void prepare() throws ServiceNotProvidedException, 
ModuleStartException {
         // load banyandb config
         config = new BanyanDBConfigLoader(this).loadConfig();
-
+        if (StringUtil.isBlank(config.getGlobal().getNamespace())) {
+            config.getGlobal().setNamespace("sw");
+        }
         if (config.getMetricsDay().getTtl() > config.getMetadata().getTtl()) {
             throw new ModuleStartException("metricsDay ttl must be less than 
or equal to metadata ttl");
         }
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBUIMenuManagementDAO.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBUIMenuManagementDAO.java
index 5d61d30eab..658034f6bb 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBUIMenuManagementDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBUIMenuManagementDAO.java
@@ -24,7 +24,6 @@ import org.apache.skywalking.banyandb.model.v1.BanyandbModel;
 import org.apache.skywalking.banyandb.v1.client.TagAndValue;
 import org.apache.skywalking.banyandb.property.v1.BanyandbProperty.Property;
 import org.apache.skywalking.oap.server.core.management.ui.menu.UIMenu;
-import org.apache.skywalking.oap.server.core.storage.annotation.BanyanDB;
 import 
org.apache.skywalking.oap.server.core.storage.management.UIMenuManagementDAO;
 import 
org.apache.skywalking.oap.server.storage.plugin.banyandb.stream.AbstractBanyanDBDAO;
 
@@ -39,7 +38,7 @@ public class BanyanDBUIMenuManagementDAO extends 
AbstractBanyanDBDAO implements
 
     @Override
     public UIMenu getMenu(String id) throws IOException {
-        Property p = 
getClient().queryProperty(BanyanDB.PropertyGroup.PROPERTY.getName(), 
UIMenu.INDEX_NAME, id);
+        Property p = getClient().queryProperty(UIMenu.INDEX_NAME, id);
         if (p == null) {
             return null;
         }
@@ -48,9 +47,10 @@ public class BanyanDBUIMenuManagementDAO extends 
AbstractBanyanDBDAO implements
 
     @Override
     public void saveMenu(UIMenu menu) throws IOException {
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findManagementMetadata(UIMenu.INDEX_NAME);
         Property property = Property.newBuilder()
                                     .setMetadata(
-                                        
BanyandbCommon.Metadata.newBuilder().setGroup(BanyanDB.PropertyGroup.PROPERTY.getName()).setName(UIMenu.INDEX_NAME))
+                                        
BanyandbCommon.Metadata.newBuilder().setGroup(schema.getMetadata().getGroup()).setName(UIMenu.INDEX_NAME))
                                     .setId(menu.getMenuId())
                                     
.addTags(TagAndValue.newStringTag(UIMenu.CONFIGURATION, 
menu.getConfigurationJson())
                                                         .build())
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBUITemplateManagementDAO.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBUITemplateManagementDAO.java
index 2d5b610f72..5aa40a0c55 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBUITemplateManagementDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBUITemplateManagementDAO.java
@@ -27,7 +27,6 @@ import 
org.apache.skywalking.oap.server.core.management.ui.template.UITemplate;
 import org.apache.skywalking.oap.server.core.query.input.DashboardSetting;
 import org.apache.skywalking.oap.server.core.query.type.DashboardConfiguration;
 import org.apache.skywalking.oap.server.core.query.type.TemplateChangeStatus;
-import org.apache.skywalking.oap.server.core.storage.annotation.BanyanDB;
 import 
org.apache.skywalking.oap.server.core.storage.management.UITemplateManagementDAO;
 import 
org.apache.skywalking.oap.server.storage.plugin.banyandb.stream.AbstractBanyanDBDAO;
 
@@ -44,7 +43,7 @@ public class BanyanDBUITemplateManagementDAO extends 
AbstractBanyanDBDAO impleme
 
     @Override
     public DashboardConfiguration getTemplate(String id) throws IOException {
-        Property p = 
getClient().queryProperty(BanyanDB.PropertyGroup.PROPERTY.getName(), 
UITemplate.INDEX_NAME, id);
+        Property p = getClient().queryProperty(UITemplate.INDEX_NAME, id);
         if (p == null) {
             return null;
         }
@@ -53,7 +52,7 @@ public class BanyanDBUITemplateManagementDAO extends 
AbstractBanyanDBDAO impleme
 
     @Override
     public List<DashboardConfiguration> getAllTemplates(Boolean 
includingDisabled) throws IOException {
-        List<Property> propertyList = 
getClient().listProperties(BanyanDB.PropertyGroup.PROPERTY.getName(), 
UITemplate.INDEX_NAME);
+        List<Property> propertyList = 
getClient().listProperties(UITemplate.INDEX_NAME);
         return propertyList.stream().map(p -> fromEntity(parse(p)))
                 .filter(conf -> includingDisabled || !conf.isDisabled())
                 .collect(Collectors.toList());
@@ -93,7 +92,7 @@ public class BanyanDBUITemplateManagementDAO extends 
AbstractBanyanDBDAO impleme
 
     @Override
     public TemplateChangeStatus disableTemplate(String id) throws IOException {
-        Property oldProperty = 
this.getClient().queryProperty(BanyanDB.PropertyGroup.PROPERTY.getName(), 
UITemplate.INDEX_NAME, id);
+        Property oldProperty = 
this.getClient().queryProperty(UITemplate.INDEX_NAME, id);
         if (oldProperty == null) {
             return 
TemplateChangeStatus.builder().status(false).id(id).message("Can't find the 
template")
                     .build();
@@ -136,9 +135,10 @@ public class BanyanDBUITemplateManagementDAO extends 
AbstractBanyanDBDAO impleme
     }
 
     public Property applyAll(UITemplate uiTemplate) {
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findManagementMetadata(UITemplate.INDEX_NAME);
         return Property.newBuilder()
                 .setMetadata(BanyandbCommon.Metadata.newBuilder()
-                                
.setGroup(BanyanDB.PropertyGroup.PROPERTY.getName())
+                                .setGroup(schema.getMetadata().getGroup())
                                 .setName(UITemplate.INDEX_NAME))
             .setId(uiTemplate.id().build())
             .addTags(TagAndValue.newStringTag(UITemplate.CONFIGURATION, 
uiTemplate.getConfiguration()).build())
@@ -154,9 +154,10 @@ public class BanyanDBUITemplateManagementDAO extends 
AbstractBanyanDBDAO impleme
      * @return new property (patch) to be applied
      */
     public Property applyStatus(UITemplate uiTemplate) {
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findManagementMetadata(UITemplate.INDEX_NAME);
         return Property.newBuilder()
                 .setMetadata(BanyandbCommon.Metadata.newBuilder()
-                    .setGroup(BanyanDB.PropertyGroup.PROPERTY.getName())
+                    .setGroup(schema.getMetadata().getGroup())
                     .setName(UITemplate.INDEX_NAME))
                 .setId(uiTemplate.id().build())
                 .addTags(TagAndValue.newLongTag(UITemplate.DISABLED, 
uiTemplate.getDisabled()).build())
@@ -171,9 +172,10 @@ public class BanyanDBUITemplateManagementDAO extends 
AbstractBanyanDBDAO impleme
      * @return new property (patch) to be applied
      */
     public Property applyConfiguration(UITemplate uiTemplate) {
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findManagementMetadata(UITemplate.INDEX_NAME);
         return Property.newBuilder()
                 .setMetadata(BanyandbCommon.Metadata.newBuilder()
-                    .setGroup(BanyanDB.PropertyGroup.PROPERTY.getName())
+                    .setGroup(schema.getMetadata().getGroup())
                     .setName(UITemplate.INDEX_NAME))
                 .setId(uiTemplate.id().build())
                 .addTags(TagAndValue.newStringTag(UITemplate.CONFIGURATION, 
uiTemplate.getConfiguration()).build())
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/MetadataRegistry.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/MetadataRegistry.java
index dfcccb2473..2c65b3e418 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/MetadataRegistry.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/MetadataRegistry.java
@@ -23,7 +23,6 @@ import com.google.gson.JsonObject;
 import java.util.HashSet;
 import java.util.function.BiFunction;
 import lombok.Builder;
-import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
@@ -216,6 +215,7 @@ public enum MetadataRegistry {
         for (TagMetadata tag : tags) {
             builder.addTags(tag.getTagSpec());
         }
+        registry.put(schemaMetadata.name(), schemaBuilder.build());
         return new PropertyModel(builder.build());
     }
 
@@ -354,25 +354,6 @@ public enum MetadataRegistry {
         return topNAggregations;
     }
 
-    public Schema findMetadata(final Model model) {
-        if (model.isRecord()) {
-            return findRecordMetadata(model.getName());
-        }
-        return findMetadata(model.getName(), model.getDownsampling());
-    }
-
-    public Schema findRecordMetadata(final String recordModelName) {
-        final Schema s = this.registry.get(recordModelName);
-        if (s == null) {
-            return null;
-        }
-        // impose sanity check
-        if (s.getMetadata().getKind() != Kind.STREAM && 
s.getMetadata().getKind() != Kind.TRACE) {
-            throw new IllegalArgumentException(recordModelName + "is not a 
record");
-        }
-        return s;
-    }
-
     static DownSampling deriveFromStep(Step step) {
         switch (step) {
             case DAY:
@@ -386,17 +367,35 @@ public enum MetadataRegistry {
         }
     }
 
-    public Schema findMetadata(final String modelName, Step step) {
-        return findMetadata(modelName, deriveFromStep(step));
+    public Schema findMetricMetadata(final String modelName, Step step) {
+        return findMetricMetadata(modelName, deriveFromStep(step));
     }
 
     /**
      * Find metadata with down-sampling
      */
-    public Schema findMetadata(final String modelName, DownSampling 
downSampling) {
+    public Schema findMetricMetadata(final String modelName, DownSampling 
downSampling) {
         return this.registry.get(SchemaMetadata.formatName(modelName, 
downSampling));
     }
 
+    public Schema findRecordMetadata(final String modelName) {
+        return this.registry.get(modelName);
+    }
+
+    public Schema findManagementMetadata(final String modelName) {
+        return this.registry.get(modelName);
+    }
+
+    public Schema findMetadata(final Model model) {
+        if (!model.isTimeSeries()) {
+            return findManagementMetadata(model.getName());
+        }
+        if (model.isRecord()) {
+            return findRecordMetadata(model.getName());
+        }
+        return findMetricMetadata(model.getName(), model.getDownsampling());
+    }
+
     private FieldSpec parseFieldSpec(ModelColumn modelColumn) {
         String colName = modelColumn.getColumnName().getStorageName();
         if (String.class.equals(modelColumn.getType())) {
@@ -654,8 +653,16 @@ public enum MetadataRegistry {
     }
 
     public SchemaMetadata parseMetadata(Model model, BanyanDBStorageConfig 
config, DownSamplingConfigService configService) {
+        String namespace = config.getGlobal().getNamespace();
         if (!model.isTimeSeries()) {
-            return new 
SchemaMetadata(BanyanDB.PropertyGroup.PROPERTY.getName(), model.getName(), 
Kind.PROPERTY, DownSampling.None, config.getProperty());
+            return new SchemaMetadata(
+                namespace,
+                BanyanDB.PropertyGroup.PROPERTY.getName(),
+                model.getName(),
+                Kind.PROPERTY,
+                DownSampling.None,
+                config.getProperty()
+            );
         }
         if (model.isRecord()) {
             BanyanDB.TraceGroup traceGroup = 
model.getBanyanDBModelExtension().getTraceGroup();
@@ -664,6 +671,7 @@ public enum MetadataRegistry {
                 switch (traceGroup) {
                     case TRACE:
                         return new SchemaMetadata(
+                            namespace,
                             BanyanDB.TraceGroup.TRACE.getName(),
                             model.getName(),
                             Kind.TRACE,
@@ -672,6 +680,7 @@ public enum MetadataRegistry {
                         );
                     case ZIPKIN_TRACE:
                         return new SchemaMetadata(
+                            namespace,
                             BanyanDB.TraceGroup.ZIPKIN_TRACE.getName(),
                             model.getName(),
                             Kind.TRACE,
@@ -687,6 +696,7 @@ public enum MetadataRegistry {
                 switch (streamGroup) {
                     case RECORDS_LOG:
                         return new SchemaMetadata(
+                            namespace,
                             BanyanDB.StreamGroup.RECORDS_LOG.getName(),
                             model.getName(),
                             Kind.STREAM,
@@ -695,6 +705,7 @@ public enum MetadataRegistry {
                         );
                     case RECORDS_BROWSER_ERROR_LOG:
                         return new SchemaMetadata(
+                            namespace,
                             
BanyanDB.StreamGroup.RECORDS_BROWSER_ERROR_LOG.getName(),
                             model.getName(),
                             Kind.STREAM,
@@ -703,6 +714,7 @@ public enum MetadataRegistry {
                         );
                     case RECORDS:
                         return new SchemaMetadata(
+                            namespace,
                             BanyanDB.StreamGroup.RECORDS.getName(),
                             model.getName(),
                             Kind.STREAM,
@@ -716,45 +728,59 @@ public enum MetadataRegistry {
         }
 
         if (model.getBanyanDBModelExtension().isIndexMode()) {
-            return new 
SchemaMetadata(BanyanDB.MeasureGroup.METADATA.getName(), model.getName(), 
Kind.MEASURE,
-                    model.getDownsampling(),
-                    config.getMetadata());
+            return new SchemaMetadata(
+                namespace,
+                BanyanDB.MeasureGroup.METADATA.getName(),
+                model.getName(),
+                Kind.MEASURE,
+                model.getDownsampling(),
+                config.getMetadata()
+            );
         }
 
         switch (model.getDownsampling()) {
             case Minute:
-                return new 
SchemaMetadata(BanyanDB.MeasureGroup.METRICS_MINUTE.getName(),
-                        model.getName(),
-                        Kind.MEASURE,
-                        model.getDownsampling(),
-                        config.getMetricsMin());
+                return new SchemaMetadata(
+                    namespace,
+                    BanyanDB.MeasureGroup.METRICS_MINUTE.getName(),
+                    model.getName(),
+                    Kind.MEASURE,
+                    model.getDownsampling(),
+                    config.getMetricsMin()
+                );
             case Hour:
                 if (!configService.shouldToHour()) {
                     throw new UnsupportedOperationException("downsampling to 
hour is not supported");
                 }
-                return new 
SchemaMetadata(BanyanDB.MeasureGroup.METRICS_HOUR.getName(),
-                        model.getName(),
-                        Kind.MEASURE,
-                        model.getDownsampling(),
-                        config.getMetricsHour());
+                return new SchemaMetadata(
+                    namespace,
+                    BanyanDB.MeasureGroup.METRICS_HOUR.getName(),
+                    model.getName(),
+                    Kind.MEASURE,
+                    model.getDownsampling(),
+                    config.getMetricsHour()
+                );
             case Day:
                 if (!configService.shouldToDay()) {
                     throw new UnsupportedOperationException("downsampling to 
day is not supported");
                 }
-                return new 
SchemaMetadata(BanyanDB.MeasureGroup.METRICS_DAY.getName(),
-                        model.getName(),
-                        Kind.MEASURE,
-                        model.getDownsampling(),
-                        config.getMetricsDay());
+                return new SchemaMetadata(
+                    namespace,
+                    BanyanDB.MeasureGroup.METRICS_DAY.getName(),
+                    model.getName(),
+                    Kind.MEASURE,
+                    model.getDownsampling(),
+                    config.getMetricsDay()
+                );
             default:
                 throw new UnsupportedOperationException("unsupported 
downSampling interval:" + model.getDownsampling());
         }
     }
 
-    @RequiredArgsConstructor
-    @Data
+    @Getter
     @ToString
     public static class SchemaMetadata {
+        private final String namespace;
         private final String group;
         /**
          * name of the {@link Model}
@@ -767,6 +793,21 @@ public enum MetadataRegistry {
         private final DownSampling downSampling;
         private final BanyanDBStorageConfig.GroupResource resource;
 
+        public SchemaMetadata(final String namespace,
+                              final String group,
+                              final String modelName,
+                              final Kind kind,
+                              final DownSampling downSampling,
+                              final BanyanDBStorageConfig.GroupResource 
resource) {
+            this.namespace = namespace;
+            this.modelName = modelName;
+            this.kind = kind;
+            this.downSampling = downSampling;
+            this.resource = resource;
+            this.group = convertGroupName(namespace, group);
+
+        }
+
         /**
          * Format the entity name for BanyanDB
          *
@@ -885,4 +926,12 @@ public enum MetadataRegistry {
     public enum ColumnType {
         TAG, FIELD;
     }
+
+    public static String convertGroupName(String namespace, String groupName) {
+        if (StringUtil.isNotEmpty(namespace)) {
+            return namespace + "_" + groupName;
+        } else {
+            return groupName;
+        }
+    }
 }
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBEBPFProfilingScheduleQueryDAO.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBEBPFProfilingScheduleQueryDAO.java
index d0cf955777..09c13b014f 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBEBPFProfilingScheduleQueryDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBEBPFProfilingScheduleQueryDAO.java
@@ -52,7 +52,7 @@ import java.util.stream.Collectors;
 
      @Override
      public List<EBPFProfilingSchedule> querySchedules(String taskId) throws 
IOException {
-         MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(EBPFProfilingScheduleRecord.INDEX_NAME, 
DownSampling.Minute);
+         MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(EBPFProfilingScheduleRecord.INDEX_NAME,
 DownSampling.Minute);
          MeasureQueryResponse resp = query(false, schema,
                  TAGS,
                                            Collections.emptySet(), new 
QueryBuilder<MeasureQuery>() {
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBHierarchyQueryDAO.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBHierarchyQueryDAO.java
index b8e08ff332..427b7801da 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBHierarchyQueryDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBHierarchyQueryDAO.java
@@ -62,7 +62,7 @@ public class BanyanDBHierarchyQueryDAO extends 
AbstractBanyanDBDAO implements IH
 
     @Override
     public List<ServiceHierarchyRelationTraffic> 
readAllServiceHierarchyRelations() throws Exception {
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(ServiceHierarchyRelationTraffic.INDEX_NAME,
 DownSampling.Minute);
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(ServiceHierarchyRelationTraffic.INDEX_NAME,
 DownSampling.Minute);
         MeasureQueryResponse resp = query(false, schema,
                                           SERVICE_HIERARCHY_RELATION_TAGS,
                                           Collections.emptySet(), new 
QueryBuilder<>() {
@@ -86,7 +86,7 @@ public class BanyanDBHierarchyQueryDAO extends 
AbstractBanyanDBDAO implements IH
     @Override
     public List<InstanceHierarchyRelationTraffic> 
readInstanceHierarchyRelations(final String instanceId,
                                                                                
  final String layer) throws Exception {
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(ServiceHierarchyRelationTraffic.INDEX_NAME,
 DownSampling.Minute);
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(ServiceHierarchyRelationTraffic.INDEX_NAME,
 DownSampling.Minute);
         MeasureQueryResponse resp = query(false, schema,
                                               INSTANCE_HIERARCHY_RELATION_TAGS,
                                           Collections.emptySet(), 
buildInstanceRelationsQuery(instanceId, layer)
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetadataQueryDAO.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetadataQueryDAO.java
index a15efc8564..9138f7e0b4 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetadataQueryDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetadataQueryDAO.java
@@ -90,7 +90,7 @@ public class BanyanDBMetadataQueryDAO extends 
AbstractBanyanDBDAO implements IMe
 
     @Override
     public List<Service> listServices() throws IOException {
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(ServiceTraffic.INDEX_NAME, 
DownSampling.Minute);
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(ServiceTraffic.INDEX_NAME, 
DownSampling.Minute);
 
         MeasureQueryResponse resp = query(false, schema,
                 SERVICE_TRAFFIC_TAGS,
@@ -117,7 +117,7 @@ public class BanyanDBMetadataQueryDAO extends 
AbstractBanyanDBDAO implements IMe
             // It's equals to the condition 
`query.and(lte(InstanceTraffic.TIME_BUCKET, endTimeBucket))`
             timestampRange = new TimestampRange(0, duration.getEndTimestamp());
         }
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(InstanceTraffic.INDEX_NAME, 
DownSampling.Minute);
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(InstanceTraffic.INDEX_NAME, 
DownSampling.Minute);
         MeasureQueryResponse resp = query(false, schema,
                 INSTANCE_TRAFFIC_TAGS,
                 Collections.emptySet(),
@@ -145,7 +145,7 @@ public class BanyanDBMetadataQueryDAO extends 
AbstractBanyanDBDAO implements IMe
     @Override
     public ServiceInstance getInstance(String instanceId) throws IOException {
         IDManager.ServiceInstanceID.InstanceIDDefinition id = 
IDManager.ServiceInstanceID.analysisId(instanceId);
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(InstanceTraffic.INDEX_NAME, 
DownSampling.Minute);
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(InstanceTraffic.INDEX_NAME, 
DownSampling.Minute);
         MeasureQueryResponse resp = query(false, schema,
                 INSTANCE_TRAFFIC_TAGS,
                 Collections.emptySet(),
@@ -161,7 +161,7 @@ public class BanyanDBMetadataQueryDAO extends 
AbstractBanyanDBDAO implements IMe
 
     @Override
     public List<ServiceInstance> getInstances(List<String> instanceIds) throws 
IOException {
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(InstanceTraffic.INDEX_NAME, 
DownSampling.Minute);
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(InstanceTraffic.INDEX_NAME, 
DownSampling.Minute);
         MeasureQueryResponse resp = query(false, schema,
                 INSTANCE_TRAFFIC_TAGS,
                 Collections.emptySet(),
@@ -176,7 +176,7 @@ public class BanyanDBMetadataQueryDAO extends 
AbstractBanyanDBDAO implements IMe
 
     @Override
     public List<Endpoint> findEndpoint(String keyword, String serviceId, int 
limit, Duration duration) throws IOException {
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(EndpointTraffic.INDEX_NAME, 
DownSampling.Minute);
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(EndpointTraffic.INDEX_NAME, 
DownSampling.Minute);
         TimestampRange timestampRange = null;
         if (duration != null) {
             // The data time should <= endTimeBucket.
@@ -217,7 +217,7 @@ public class BanyanDBMetadataQueryDAO extends 
AbstractBanyanDBDAO implements IMe
 
     @Override
     public List<Process> listProcesses(String serviceId, 
ProfilingSupportStatus supportStatus, long lastPingStartTimeBucket, long 
lastPingEndTimeBucket) throws IOException {
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(ProcessTraffic.INDEX_NAME, 
DownSampling.Minute);
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(ProcessTraffic.INDEX_NAME, 
DownSampling.Minute);
         TimestampRange timestampRange = null;
         if (lastPingEndTimeBucket > 0) {
             // The data time should <= endTimeBucket.
@@ -253,7 +253,7 @@ public class BanyanDBMetadataQueryDAO extends 
AbstractBanyanDBDAO implements IMe
 
     @Override
     public List<Process> listProcesses(String serviceInstanceId, Duration 
duration, boolean includeVirtual) throws IOException {
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(ProcessTraffic.INDEX_NAME, 
DownSampling.Minute);
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(ProcessTraffic.INDEX_NAME, 
DownSampling.Minute);
         TimestampRange timestampRange = null;
         if (duration != null) {
             // The data time should <= endTimeBucket.
@@ -287,7 +287,7 @@ public class BanyanDBMetadataQueryDAO extends 
AbstractBanyanDBDAO implements IMe
 
     @Override
     public List<Process> listProcesses(String agentId, long 
startPingTimeBucket, long endPingTimeBucket) throws IOException {
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(ProcessTraffic.INDEX_NAME, 
DownSampling.Minute);
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(ProcessTraffic.INDEX_NAME, 
DownSampling.Minute);
         TimestampRange timestampRange = null;
         if (endPingTimeBucket > 0) {
             // The data time should <= endTimeBucket.
@@ -318,7 +318,7 @@ public class BanyanDBMetadataQueryDAO extends 
AbstractBanyanDBDAO implements IMe
 
     @Override
     public long getProcessCount(String serviceId, ProfilingSupportStatus 
profilingSupportStatus, long lastPingStartTimeBucket, long 
lastPingEndTimeBucket) throws IOException {
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(ProcessTraffic.INDEX_NAME, 
DownSampling.Minute);
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(ProcessTraffic.INDEX_NAME, 
DownSampling.Minute);
         MeasureQueryResponse resp = query(false, schema,
                 PROCESS_TRAFFIC_TAGS,
                 Collections.emptySet(),
@@ -340,7 +340,7 @@ public class BanyanDBMetadataQueryDAO extends 
AbstractBanyanDBDAO implements IMe
 
     @Override
     public long getProcessCount(String instanceId) throws IOException {
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(ProcessTraffic.INDEX_NAME, 
DownSampling.Minute);
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(ProcessTraffic.INDEX_NAME, 
DownSampling.Minute);
         MeasureQueryResponse resp = query(false, schema,
                 PROCESS_TRAFFIC_TAGS,
                 Collections.emptySet(),
@@ -360,7 +360,7 @@ public class BanyanDBMetadataQueryDAO extends 
AbstractBanyanDBDAO implements IMe
 
     @Override
     public Process getProcess(String processId) throws IOException {
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(ProcessTraffic.INDEX_NAME, 
DownSampling.Minute);
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(ProcessTraffic.INDEX_NAME, 
DownSampling.Minute);
         MeasureQueryResponse resp = query(false, schema,
                 PROCESS_TRAFFIC_TAGS,
                 Collections.emptySet(),
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetricsQueryDAO.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetricsQueryDAO.java
index 6a32f0cf64..84b84290ca 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetricsQueryDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetricsQueryDAO.java
@@ -57,7 +57,7 @@ public class BanyanDBMetricsQueryDAO extends 
AbstractBanyanDBDAO implements IMet
     @Override
     public MetricsValues readMetricsValues(MetricsCondition condition, String 
valueColumnName, Duration duration) throws IOException {
         String modelName = condition.getName();
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(modelName, duration.getStep());
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(modelName, duration.getStep());
         if (schema == null) {
             throw new IOException("schema is not registered");
         }
@@ -131,7 +131,7 @@ public class BanyanDBMetricsQueryDAO extends 
AbstractBanyanDBDAO implements IMet
                                                     final List<KeyValue> 
labels,
                                                     final Duration duration) 
throws IOException {
         final boolean isColdStage = duration != null && duration.isColdStage();
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(metricsName, duration.getStep());
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(metricsName, duration.getStep());
         if (schema == null) {
             throw new IOException("schema is not registered");
         }
@@ -194,7 +194,7 @@ public class BanyanDBMetricsQueryDAO extends 
AbstractBanyanDBDAO implements IMet
     }
 
     private Map<Long, DataPoint> queryByEntityID(final MetricsCondition 
condition, String valueColumnName, Duration duration) throws IOException {
-        final MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(condition.getName(), duration.getStep());
+        final MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(condition.getName(), 
duration.getStep());
         if (schema == null) {
             throw new IOException("schema is not registered");
         }
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBNetworkAddressAliasDAO.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBNetworkAddressAliasDAO.java
index a0a342c1f4..8b4055658f 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBNetworkAddressAliasDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBNetworkAddressAliasDAO.java
@@ -56,7 +56,7 @@ public class BanyanDBNetworkAddressAliasDAO extends 
AbstractBanyanDBDAO implemen
 
     private MetadataRegistry.Schema getSchema() {
         if (schema == null) {
-            schema = 
MetadataRegistry.INSTANCE.findMetadata(NetworkAddressAlias.INDEX_NAME, 
DownSampling.Minute);
+            schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(NetworkAddressAlias.INDEX_NAME, 
DownSampling.Minute);
         }
         return schema;
     }
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBServiceLabelDAO.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBServiceLabelDAO.java
index 8dc16bfce3..64ed99f8b5 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBServiceLabelDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBServiceLabelDAO.java
@@ -46,7 +46,7 @@ public class BanyanDBServiceLabelDAO extends 
AbstractBanyanDBDAO implements ISer
 
     @Override
     public List<String> queryAllLabels(String serviceId) throws IOException {
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(ServiceLabelRecord.INDEX_NAME, 
DownSampling.Minute);
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(ServiceLabelRecord.INDEX_NAME, 
DownSampling.Minute);
         return query(false, schema, TAGS,
                 Collections.emptySet(), new QueryBuilder<MeasureQuery>() {
                     @Override
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBTagAutocompleteQueryDAO.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBTagAutocompleteQueryDAO.java
index 94fae1fb9e..9ae3985f77 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBTagAutocompleteQueryDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBTagAutocompleteQueryDAO.java
@@ -54,7 +54,7 @@ public class BanyanDBTagAutocompleteQueryDAO extends 
AbstractBanyanDBDAO impleme
     @Override
     public Set<String> queryTagAutocompleteKeys(TagType tagType, int limit, 
Duration duration) throws IOException {
         final boolean isColdStage = duration != null && duration.isColdStage();
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(TagAutocompleteData.INDEX_NAME, 
DownSampling.Minute);
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(TagAutocompleteData.INDEX_NAME, 
DownSampling.Minute);
         long startMinTB = 0;
         long endMinTB = 0;
         if (nonNull(duration)) {
@@ -96,7 +96,7 @@ public class BanyanDBTagAutocompleteQueryDAO extends 
AbstractBanyanDBDAO impleme
     @Override
     public Set<String> queryTagAutocompleteValues(TagType tagType, String 
tagKey, int limit, Duration duration) throws IOException {
         final boolean isColdStage = duration != null && duration.isColdStage();
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(TagAutocompleteData.INDEX_NAME, 
DownSampling.Minute);
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(TagAutocompleteData.INDEX_NAME, 
DownSampling.Minute);
         long startMinTB = 0;
         long endMinTB = 0;
         if (nonNull(duration)) {
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBTopologyQueryDAO.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBTopologyQueryDAO.java
index 0f10fa3722..d6d9099f2e 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBTopologyQueryDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBTopologyQueryDAO.java
@@ -109,7 +109,7 @@ public class BanyanDBTopologyQueryDAO extends 
AbstractBanyanDBDAO implements ITo
         final boolean isColdStage = duration != null && duration.isColdStage();
         final String modelName = detectPoint == DetectPoint.SERVER ? 
ServiceRelationServerSideMetrics.INDEX_NAME :
                 ServiceRelationClientSideMetrics.INDEX_NAME;
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(modelName, duration.getStep());
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(modelName, duration.getStep());
         MeasureQueryResponse resp = queryDebuggable(isColdStage, schema,
                 ImmutableSet.of(
                         ServiceRelationClientSideMetrics.COMPONENT_IDS,
@@ -183,7 +183,7 @@ public class BanyanDBTopologyQueryDAO extends 
AbstractBanyanDBDAO implements ITo
         final boolean isColdStage = duration != null && duration.isColdStage();
         final String modelName = detectPoint == DetectPoint.SERVER ? 
ServiceInstanceRelationServerSideMetrics.INDEX_NAME :
                 ServiceInstanceRelationClientSideMetrics.INDEX_NAME;
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(modelName, duration.getStep());
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(modelName, duration.getStep());
         MeasureQueryResponse resp = queryDebuggable(isColdStage, schema,
                 ImmutableSet.of(
                         Metrics.ENTITY_ID
@@ -238,7 +238,7 @@ public class BanyanDBTopologyQueryDAO extends 
AbstractBanyanDBDAO implements ITo
                                                 QueryBuilder<MeasureQuery> 
queryBuilder,
                                                 DetectPoint detectPoint) 
throws IOException {
         final boolean isColdStage = duration != null && duration.isColdStage();
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(EndpointRelationServerSideMetrics.INDEX_NAME,
 duration.getStep());
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(EndpointRelationServerSideMetrics.INDEX_NAME,
 duration.getStep());
         MeasureQueryResponse resp = queryDebuggable(isColdStage, schema,
                 ImmutableSet.of(
                         Metrics.ENTITY_ID
@@ -265,7 +265,7 @@ public class BanyanDBTopologyQueryDAO extends 
AbstractBanyanDBDAO implements ITo
         final String modelName = detectPoint == DetectPoint.SERVER ? 
ProcessRelationServerSideMetrics.INDEX_NAME :
                 ProcessRelationClientSideMetrics.INDEX_NAME;
         // process relation only has minute data
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(modelName, DownSampling.Minute);
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(modelName, DownSampling.Minute);
         MeasureQueryResponse resp = queryDebuggable(isColdStage, schema,
                 ImmutableSet.of(Metrics.ENTITY_ID, 
ProcessRelationClientSideMetrics.COMPONENT_ID),
                 Collections.emptySet(), getTimestampRange(duration), new 
QueryBuilder<MeasureQuery>() {
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/AbstractBanyanDBDAO.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/AbstractBanyanDBDAO.java
index 67c1b44db4..da7f11cf78 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/AbstractBanyanDBDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/AbstractBanyanDBDAO.java
@@ -297,10 +297,47 @@ public abstract class AbstractBanyanDBDAO extends 
AbstractDAO<BanyanDBStorageCli
         return getClient().query(query);
     }
 
+    protected TraceQueryResponse queryTraceDebuggable(boolean isColdStage,
+                                                    String modelName,
+                                                    TimestampRange 
timestampRange,
+                                                    QueryBuilder<TraceQuery> 
queryBuilder) throws IOException {
+        DebuggingTraceContext traceContext = 
DebuggingTraceContext.TRACE_CONTEXT.get();
+        DebuggingSpan span = null;
+        try {
+            StringBuilder builder = new StringBuilder();
+            if (traceContext != null) {
+                span = traceContext.createSpan("Query BanyanDB Trace");
+                MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findRecordMetadata(modelName);
+                builder.append("Condition: ")
+                       .append("modelName:")
+                       .append(modelName)
+                       .append(", Schema: ")
+                       .append(schema)
+                       .append(", TimestampRange: ")
+                       .append(timestampRange)
+                       .append(", Is cold data query: ")
+                       .append(isColdStage);
+                span.setMsg(builder.toString());
+            }
+            TraceQueryResponse response = queryTrace(isColdStage, modelName, 
timestampRange, queryBuilder);
+            if (traceContext != null && traceContext.isDumpStorageRsp()) {
+                builder.append("\n").append(" Response: ").append(new 
Gson().toJson(response.getTraces()));
+                span.setMsg(builder.toString());
+            }
+            //todo: need update banyandb java client.
+           // addDBTrace2DebuggingTrace(response.getTraceResult(), 
traceContext, span);
+            return response;
+        } finally {
+            if (traceContext != null && span != null) {
+                traceContext.stopSpan(span);
+            }
+        }
+    }
+
     /**
      * Trace query doesn't recommend to set query tags, if you need to debug, 
you can set tags here.
      */
-    protected TraceQueryResponse queryTrace(boolean isColdStage,
+    private TraceQueryResponse queryTrace(boolean isColdStage,
                                        String traceModelName,
                                        TimestampRange timestampRange,
                                        QueryBuilder<TraceQuery> builder) 
throws IOException {
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/BanyanDBContinuousProfilingPolicyDAO.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/BanyanDBContinuousProfilingPolicyDAO.java
index c3a0fe910d..2de1740b9e 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/BanyanDBContinuousProfilingPolicyDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/BanyanDBContinuousProfilingPolicyDAO.java
@@ -24,7 +24,6 @@ import org.apache.skywalking.banyandb.model.v1.BanyandbModel;
 import org.apache.skywalking.banyandb.v1.client.TagAndValue;
 import org.apache.skywalking.banyandb.property.v1.BanyandbProperty.Property;
 import 
org.apache.skywalking.oap.server.core.profiling.continuous.storage.ContinuousProfilingPolicy;
-import org.apache.skywalking.oap.server.core.storage.annotation.BanyanDB;
 import 
org.apache.skywalking.oap.server.core.storage.profiling.continuous.IContinuousProfilingPolicyDAO;
 import 
org.apache.skywalking.oap.server.storage.plugin.banyandb.BanyanDBStorageClient;
 
@@ -32,6 +31,7 @@ import java.io.IOException;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
+import 
org.apache.skywalking.oap.server.storage.plugin.banyandb.MetadataRegistry;
 
 @Slf4j
 public class BanyanDBContinuousProfilingPolicyDAO extends AbstractBanyanDBDAO 
implements IContinuousProfilingPolicyDAO {
@@ -50,9 +50,10 @@ public class BanyanDBContinuousProfilingPolicyDAO extends 
AbstractBanyanDBDAO im
     }
 
     public Property applyAll(ContinuousProfilingPolicy policy) {
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findManagementMetadata(ContinuousProfilingPolicy.INDEX_NAME);
         return Property.newBuilder()
                        .setMetadata(BanyandbCommon.Metadata.newBuilder()
-                           .setGroup(BanyanDB.PropertyGroup.PROPERTY.getName())
+                           .setGroup(schema.getMetadata().getGroup())
                            .setName(ContinuousProfilingPolicy.INDEX_NAME))
             .setId(policy.id().build())
             .addTags(TagAndValue.newStringTag(ContinuousProfilingPolicy.UUID, 
policy.getUuid()).build())
@@ -64,7 +65,7 @@ public class BanyanDBContinuousProfilingPolicyDAO extends 
AbstractBanyanDBDAO im
     public List<ContinuousProfilingPolicy> queryPolicies(List<String> 
serviceIdList) throws IOException {
         return serviceIdList.stream().map(s -> {
             try {
-                return 
getClient().queryProperty(BanyanDB.PropertyGroup.PROPERTY.getName(), 
ContinuousProfilingPolicy.INDEX_NAME, s);
+                return 
getClient().queryProperty(ContinuousProfilingPolicy.INDEX_NAME, s);
             } catch (IOException e) {
                 log.warn("query policy error", e);
                 return null;
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/BanyanDBEventQueryDAO.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/BanyanDBEventQueryDAO.java
index abaee1e189..7b53aea70d 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/BanyanDBEventQueryDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/BanyanDBEventQueryDAO.java
@@ -30,7 +30,6 @@ import org.apache.skywalking.banyandb.v1.client.Element;
 import org.apache.skywalking.banyandb.v1.client.PairQueryCondition;
 import org.apache.skywalking.banyandb.v1.client.StreamQuery;
 import org.apache.skywalking.banyandb.v1.client.StreamQueryResponse;
-import org.apache.skywalking.oap.server.core.analysis.DownSampling;
 import org.apache.skywalking.oap.server.core.analysis.Layer;
 import org.apache.skywalking.oap.server.core.query.PaginationUtils;
 import org.apache.skywalking.oap.server.core.query.enumeration.Order;
@@ -42,7 +41,6 @@ import 
org.apache.skywalking.oap.server.core.query.type.event.Source;
 import org.apache.skywalking.oap.server.core.analysis.record.Event;
 import org.apache.skywalking.oap.server.core.storage.query.IEventQueryDAO;
 import 
org.apache.skywalking.oap.server.storage.plugin.banyandb.BanyanDBStorageClient;
-import 
org.apache.skywalking.oap.server.storage.plugin.banyandb.MetadataRegistry;
 
 import static com.google.common.base.Strings.isNullOrEmpty;
 import static java.util.Objects.isNull;
@@ -73,7 +71,6 @@ public class BanyanDBEventQueryDAO extends 
AbstractBanyanDBDAO implements IEvent
 
     @Override
     public Events queryEvents(List<EventQueryCondition> conditionList) throws 
Exception {
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(Event.INDEX_NAME, DownSampling.Minute);
         // Duration should be same for all conditions
         final Duration time = conditionList.get(0).getTime();
         boolean isColdStage = time != null && time.isColdStage();
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/trace/BanyanDBTraceQueryDAO.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/trace/BanyanDBTraceQueryDAO.java
index c54e26594e..dcbfbc3ef2 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/trace/BanyanDBTraceQueryDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/trace/BanyanDBTraceQueryDAO.java
@@ -80,7 +80,7 @@ public class BanyanDBTraceQueryDAO extends 
AbstractBanyanDBDAO implements ITrace
     @Override
     public List<SegmentRecord> queryBySegmentIdList(List<String> 
segmentIdList, @Nullable Duration duration) throws IOException {
         final boolean isColdStage = duration != null && duration.isColdStage();
-        TraceQueryResponse resp = queryTrace(isColdStage, 
SegmentRecord.INDEX_NAME, getTimestampRange(duration),
+        TraceQueryResponse resp = queryTraceDebuggable(isColdStage, 
SegmentRecord.INDEX_NAME, getTimestampRange(duration),
             new QueryBuilder<TraceQuery>() {
                 @Override
                 public void apply(TraceQuery query) {
@@ -95,7 +95,7 @@ public class BanyanDBTraceQueryDAO extends 
AbstractBanyanDBDAO implements ITrace
     @Override
     public List<SegmentRecord> queryByTraceIdWithInstanceId(List<String> 
traceIdList, List<String> instanceIdList, @Nullable Duration duration) throws 
IOException {
         final boolean isColdStage = duration != null && duration.isColdStage();
-        TraceQueryResponse resp = queryTrace(isColdStage, 
SegmentRecord.INDEX_NAME, getTimestampRange(duration),
+        TraceQueryResponse resp = queryTraceDebuggable(isColdStage, 
SegmentRecord.INDEX_NAME, getTimestampRange(duration),
                                          new QueryBuilder<TraceQuery>() {
                                              @Override
                                              public void apply(TraceQuery 
query) {
@@ -124,7 +124,7 @@ public class BanyanDBTraceQueryDAO extends 
AbstractBanyanDBDAO implements ITrace
                 query.setLimit(segmentQueryMaxSize);
             }
         };
-        TraceQueryResponse resp = queryTrace(isColdStage, 
SegmentRecord.INDEX_NAME, getTimestampRange(duration), query);
+        TraceQueryResponse resp = queryTraceDebuggable(isColdStage, 
SegmentRecord.INDEX_NAME, getTimestampRange(duration), query);
         if (resp.getTraces().isEmpty()) {
             return new ArrayList<>();
         }
@@ -210,7 +210,7 @@ public class BanyanDBTraceQueryDAO extends 
AbstractBanyanDBDAO implements ITrace
                 }
             };
         TimestampRange timestampRange = getTimestampRange(duration);
-        TraceQueryResponse resp = queryTrace(
+        TraceQueryResponse resp = queryTraceDebuggable(
             isColdStage, SegmentRecord.INDEX_NAME, timestampRange, query);
         List<List<SpanWrapper>> traces = new ArrayList<>();
         for (var t : resp.getTraces()) {
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/trace/BanyanDBZipkinQueryDAO.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/trace/BanyanDBZipkinQueryDAO.java
index 5bd479bb8b..3908401f7c 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/trace/BanyanDBZipkinQueryDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/trace/BanyanDBZipkinQueryDAO.java
@@ -61,7 +61,7 @@ public class BanyanDBZipkinQueryDAO extends 
AbstractBanyanDBDAO implements IZipk
 
     @Override
     public List<String> getServiceNames() throws IOException {
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(ZipkinServiceTraffic.INDEX_NAME, 
DownSampling.Minute);
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(ZipkinServiceTraffic.INDEX_NAME, 
DownSampling.Minute);
         MeasureQueryResponse resp =
             query(false, schema,
                   SERVICE_TRAFFIC_TAGS,
@@ -82,7 +82,7 @@ public class BanyanDBZipkinQueryDAO extends 
AbstractBanyanDBDAO implements IZipk
 
     @Override
     public List<String> getRemoteServiceNames(final String serviceName) throws 
IOException {
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(ZipkinServiceRelationTraffic.INDEX_NAME, 
DownSampling.Minute);
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(ZipkinServiceRelationTraffic.INDEX_NAME,
 DownSampling.Minute);
         MeasureQueryResponse resp =
             query(false, schema,
                   REMOTE_SERVICE_TRAFFIC_TAGS,
@@ -106,7 +106,7 @@ public class BanyanDBZipkinQueryDAO extends 
AbstractBanyanDBDAO implements IZipk
 
     @Override
     public List<String> getSpanNames(final String serviceName) throws 
IOException {
-        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(ZipkinServiceSpanTraffic.INDEX_NAME, 
DownSampling.Minute);
+        MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetricMetadata(ZipkinServiceSpanTraffic.INDEX_NAME,
 DownSampling.Minute);
         MeasureQueryResponse resp =
             query(false, schema,
                   SPAN_TRAFFIC_TAGS,
@@ -153,7 +153,7 @@ public class BanyanDBZipkinQueryDAO extends 
AbstractBanyanDBDAO implements IZipk
                 query.setLimit(QUERY_MAX_SIZE);
             }
         };
-        TraceQueryResponse resp = queryTrace(isColdStage, 
ZipkinSpanRecord.INDEX_NAME, getTimestampRange(duration), query);
+        TraceQueryResponse resp = queryTraceDebuggable(isColdStage, 
ZipkinSpanRecord.INDEX_NAME, getTimestampRange(duration), query);
         if (resp.getTraces().isEmpty()) {
             return new ArrayList<>();
         }
@@ -183,7 +183,7 @@ public class BanyanDBZipkinQueryDAO extends 
AbstractBanyanDBDAO implements IZipk
                 query.setLimit(QUERY_MAX_SIZE);
             }
         };
-        TraceQueryResponse resp = queryTrace(
+        TraceQueryResponse resp = queryTraceDebuggable(
                 isColdStage, ZipkinSpanRecord.INDEX_NAME, 
getTimestampRange(duration),
                 query
             );
@@ -240,7 +240,7 @@ public class BanyanDBZipkinQueryDAO extends 
AbstractBanyanDBDAO implements IZipk
                 query.setLimit(request.limit());
             }
         };
-        TraceQueryResponse resp = queryTrace(
+        TraceQueryResponse resp = queryTraceDebuggable(
             isColdStage, ZipkinSpanRecord.INDEX_NAME, 
getTimestampRange(duration),
             queryBuilder
         );

Reply via email to