You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2022/04/18 09:03:48 UTC

[shardingsphere] branch master updated: Restructure metadata node to support PG Three-tier structure. (#16892)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 27f79dee138 Restructure metadata node to support PG Three-tier structure. (#16892)
27f79dee138 is described below

commit 27f79dee138d36cf118d33490a5c6d9d8584ff59
Author: zhaojinchao <zh...@apache.org>
AuthorDate: Mon Apr 18 17:03:31 2022 +0800

    Restructure metadata node to support PG Three-tier structure. (#16892)
    
    * Restructure metadata node to support PG Three-tier structure.
    
    * Change schema to database
    
    * Fixed checkstyle
    
    * Fixed CI
    
    * Fixed CI
---
 .../metadata/persist/MetaDataPersistService.java   | 12 ++--
 ...MetaDataNode.java => DatabaseMetaDataNode.java} | 80 +++++++++++++---------
 ...rvice.java => DatabaseBasedPersistService.java} | 26 +++----
 ...ice.java => DatabaseVersionPersistService.java} | 51 +++++++-------
 .../service/SchemaMetaDataPersistService.java      | 30 ++++----
 .../service/impl/DataSourcePersistService.java     | 55 +++++++--------
 ...ervice.java => DatabaseRulePersistService.java} | 48 ++++++-------
 .../persist/MetaDataPersistServiceTest.java        |  4 +-
 ...NodeTest.java => DatabaseMetaDataNodeTest.java} | 52 +++++++-------
 .../service/SchemaMetaDataPersistServiceTest.java  | 18 ++---
 .../service/impl/DataSourcePersistServiceTest.java | 16 ++---
 .../service/impl/SchemaRulePersistServiceTest.java | 14 ++--
 .../cluster/ClusterContextManagerBuilder.java      |  2 +-
 .../subscriber/ScalingRegistrySubscriber.java      | 24 +++----
 .../metadata/watcher/MetaDataChangedWatcher.java   | 40 +++++------
 .../subscriber/ScalingRegistrySubscriberTest.java  | 14 ++--
 .../watcher/MetaDataChangedWatcherTest.java        | 10 +--
 .../StandaloneContextManagerBuilder.java           |  2 +-
 .../StandaloneContextManagerBuilderTextTest.java   |  6 +-
 19 files changed, 258 insertions(+), 246 deletions(-)

diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistService.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistService.java
index faa13215734..53de4c20e66 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistService.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistService.java
@@ -27,11 +27,11 @@ import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
 import org.apache.shardingsphere.infra.datasource.props.DataSourcePropertiesCreator;
 import org.apache.shardingsphere.mode.metadata.persist.service.ComputeNodePersistService;
 import org.apache.shardingsphere.mode.metadata.persist.service.SchemaMetaDataPersistService;
-import org.apache.shardingsphere.mode.metadata.persist.service.SchemaVersionPersistService;
+import org.apache.shardingsphere.mode.metadata.persist.service.DatabaseVersionPersistService;
 import org.apache.shardingsphere.mode.metadata.persist.service.impl.DataSourcePersistService;
 import org.apache.shardingsphere.mode.metadata.persist.service.impl.GlobalRulePersistService;
 import org.apache.shardingsphere.mode.metadata.persist.service.impl.PropertiesPersistService;
-import org.apache.shardingsphere.mode.metadata.persist.service.impl.SchemaRulePersistService;
+import org.apache.shardingsphere.mode.metadata.persist.service.impl.DatabaseRulePersistService;
 import org.apache.shardingsphere.mode.persist.PersistRepository;
 import org.apache.shardingsphere.transaction.config.TransactionRuleConfiguration;
 
@@ -55,7 +55,7 @@ public final class MetaDataPersistService {
     
     private final SchemaMetaDataPersistService schemaMetaDataService;
     
-    private final SchemaRulePersistService schemaRuleService;
+    private final DatabaseRulePersistService schemaRuleService;
     
     private final GlobalRulePersistService globalRuleService;
     
@@ -63,17 +63,17 @@ public final class MetaDataPersistService {
     
     private final ComputeNodePersistService computeNodePersistService;
     
-    private final SchemaVersionPersistService schemaVersionPersistService;
+    private final DatabaseVersionPersistService schemaVersionPersistService;
     
     public MetaDataPersistService(final PersistRepository repository) {
         this.repository = repository;
         dataSourceService = new DataSourcePersistService(repository);
         schemaMetaDataService = new SchemaMetaDataPersistService(repository);
-        schemaRuleService = new SchemaRulePersistService(repository);
+        schemaRuleService = new DatabaseRulePersistService(repository);
         globalRuleService = new GlobalRulePersistService(repository);
         propsService = new PropertiesPersistService(repository);
         computeNodePersistService = new ComputeNodePersistService(repository);
-        schemaVersionPersistService = new SchemaVersionPersistService(repository);
+        schemaVersionPersistService = new DatabaseVersionPersistService(repository);
     }
     
     /**
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/node/SchemaMetaDataNode.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/node/DatabaseMetaDataNode.java
similarity index 72%
rename from shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/node/SchemaMetaDataNode.java
rename to shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/node/DatabaseMetaDataNode.java
index 2d4a15d0254..4f34c73d0a5 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/node/SchemaMetaDataNode.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/node/DatabaseMetaDataNode.java
@@ -26,13 +26,15 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 /**
- * Schema meta data node.
+ * Database meta data node.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class SchemaMetaDataNode {
+public final class DatabaseMetaDataNode {
     
     private static final String ROOT_NODE = "metadata";
     
+    private static final String SCHEMAS_NODE = "schemas";
+    
     private static final String DATA_SOURCE_NODE = "dataSources";
     
     private static final String RULE_NODE = "rules";
@@ -73,16 +75,6 @@ public final class SchemaMetaDataNode {
         return String.join("/", getMetaDataNodePath(), databaseName);
     }
     
-    /**
-     * Get schema name path.
-     *
-     * @param schemaName schema name
-     * @return schema name path
-     */
-    public static String getSchemaNamePath(final String schemaName) {
-        return String.join("/", "", ROOT_NODE, schemaName);
-    }
-    
     /**
      * Get rule path.
      *
@@ -102,7 +94,17 @@ public final class SchemaMetaDataNode {
      * @return tables path
      */
     public static String getMetaDataTablesPath(final String databaseName, final String schemaName) {
-        return String.join("/", getDatabaseNamePath(databaseName), schemaName, TABLES_NODE);
+        return String.join("/", getMetaDataSchemasPath(databaseName), schemaName, TABLES_NODE);
+    }
+    
+    /**
+     * Get meta data schemas path.
+     *
+     * @param databaseName database name
+     * @return schemas path
+     */
+    public static String getMetaDataSchemasPath(final String databaseName) {
+        return String.join("/", getDatabaseNamePath(databaseName), SCHEMAS_NODE);
     }
     
     /**
@@ -118,30 +120,42 @@ public final class SchemaMetaDataNode {
     }
     
     private static String getFullMetaDataPath(final String databaseName, final String node) {
-        return String.join("/", "", ROOT_NODE, databaseName, databaseName, node);
+        return String.join("/", "", ROOT_NODE, databaseName, node);
+    }
+    
+    /**
+     * Get database name.
+     *
+     * @param configNodeFullPath config node full path
+     * @return database name
+     */
+    public static Optional<String> getDatabaseName(final String configNodeFullPath) {
+        Pattern pattern = Pattern.compile(getMetaDataNodePath() + "/([\\w\\-]+)/([\\w\\-]+)" + "(/datasources|/rules|/tables)?", Pattern.CASE_INSENSITIVE);
+        Matcher matcher = pattern.matcher(configNodeFullPath);
+        return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty();
     }
     
     /**
      * Get schema name.
      *
-     * @param configurationNodeFullPath configuration node full path
+     * @param configNodeFullPath config node full path
      * @return schema name
      */
-    public static Optional<String> getSchemaName(final String configurationNodeFullPath) {
+    public static Optional<String> getSchemaName(final String configNodeFullPath) {
         Pattern pattern = Pattern.compile(getMetaDataNodePath() + "/([\\w\\-]+)/([\\w\\-]+)" + "(/datasources|/rules|/tables)?", Pattern.CASE_INSENSITIVE);
-        Matcher matcher = pattern.matcher(configurationNodeFullPath);
+        Matcher matcher = pattern.matcher(configNodeFullPath);
         return matcher.find() ? Optional.of(matcher.group(2)) : Optional.empty();
     }
     
     /**
-     * Get schema name by schema path.
+     * Get database name by database path.
      *
-     * @param schemaPath schema path
-     * @return schema name
+     * @param databasePath database path
+     * @return database name
      */
-    public static Optional<String> getDatabaseNameBySchemaPath(final String schemaPath) {
+    public static Optional<String> getDatabaseNameByDatabasePath(final String databasePath) {
         Pattern pattern = Pattern.compile(getMetaDataNodePath() + "/([\\w\\-]+)$", Pattern.CASE_INSENSITIVE);
-        Matcher matcher = pattern.matcher(schemaPath);
+        Matcher matcher = pattern.matcher(databasePath);
         return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty();
     }
     
@@ -152,9 +166,9 @@ public final class SchemaMetaDataNode {
      * @return table name
      */
     public static Optional<String> getTableName(final String tableMetaDataPath) {
-        Pattern pattern = Pattern.compile(getMetaDataNodePath() + "/([\\w\\-]+)/([\\w\\-]+)/tables" + "/([\\w\\-]+)$", Pattern.CASE_INSENSITIVE);
+        Pattern pattern = Pattern.compile(getMetaDataNodePath() + "/([\\w\\-]+)/([\\w\\-]+)/([\\w\\-]+)/tables" + "/([\\w\\-]+)$", Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(tableMetaDataPath);
-        return matcher.find() ? Optional.of(matcher.group(3)) : Optional.empty();
+        return matcher.find() ? Optional.of(matcher.group(4)) : Optional.empty();
     }
     
     /**
@@ -168,14 +182,14 @@ public final class SchemaMetaDataNode {
     }
     
     /**
-     * Get schema version path.
+     * Get database version path.
      * 
-     * @param schemaName schema name
+     * @param databaseName database name
      * @param version version
-     * @return schema version path
+     * @return database version path
      */
-    public static String getSchemaVersionPath(final String schemaName, final String version) {
-        return Joiner.on("/").join(getFullMetaDataPath(schemaName, VERSIONS), version);
+    public static String getDatabaseVersionPath(final String databaseName, final String version) {
+        return Joiner.on("/").join(getFullMetaDataPath(databaseName, VERSIONS), version);
     }
     
     /**
@@ -185,9 +199,9 @@ public final class SchemaMetaDataNode {
      * @return version
      */
     public static Optional<String> getVersionByDataSourcesPath(final String dataSourceNodeFullPath) {
-        Pattern pattern = Pattern.compile(getMetaDataNodePath() + "/([\\w\\-]+)/([\\w\\-]+)" + "/versions/([\\w\\-]+)/dataSources", Pattern.CASE_INSENSITIVE);
+        Pattern pattern = Pattern.compile(getMetaDataNodePath() + "/([\\w\\-]+)/versions/([\\w\\-]+)/dataSources", Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(dataSourceNodeFullPath);
-        return matcher.find() ? Optional.of(matcher.group(3)) : Optional.empty();
+        return matcher.find() ? Optional.of(matcher.group(2)) : Optional.empty();
     }
     
     /**
@@ -197,8 +211,8 @@ public final class SchemaMetaDataNode {
      * @return version
      */
     public static Optional<String> getVersionByRulesPath(final String rulesNodeFullPath) {
-        Pattern pattern = Pattern.compile(getMetaDataNodePath() + "/([\\w\\-]+)/([\\w\\-]+)" + "/versions/([\\w\\-]+)/rules", Pattern.CASE_INSENSITIVE);
+        Pattern pattern = Pattern.compile(getMetaDataNodePath() + "/([\\w\\-]+)/versions/([\\w\\-]+)/rules", Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(rulesNodeFullPath);
-        return matcher.find() ? Optional.of(matcher.group(3)) : Optional.empty();
+        return matcher.find() ? Optional.of(matcher.group(2)) : Optional.empty();
     }
 }
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaBasedPersistService.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/DatabaseBasedPersistService.java
similarity index 73%
rename from shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaBasedPersistService.java
rename to shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/DatabaseBasedPersistService.java
index cb9e852d412..3c5c6256d24 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaBasedPersistService.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/DatabaseBasedPersistService.java
@@ -22,56 +22,56 @@ package org.apache.shardingsphere.mode.metadata.persist.service;
  * 
  * @param <T> type of configuration
  */
-public interface SchemaBasedPersistService<T> {
+public interface DatabaseBasedPersistService<T> {
     
     /**
      * Persist configurations.
      *
-     * @param schemaName schema name
+     * @param databaseName database name
      * @param configs configurations
      * @param isOverwrite is overwrite
      */
-    void persist(String schemaName, T configs, boolean isOverwrite);
+    void persist(String databaseName, T configs, boolean isOverwrite);
     
     /**
      * Persist configurations.
      *
-     * @param schemaName schema name
+     * @param databaseName database name
      * @param configs configurations
      */
-    void persist(String schemaName, T configs);
+    void persist(String databaseName, T configs);
     
     /**
      * Persist version configurations.
      * 
-     * @param schemaName schema name
+     * @param databaseName database name
      * @param version version
      * @param configs configurations
      */
-    void persist(String schemaName, String version, T configs);
+    void persist(String databaseName, String version, T configs);
     
     /**
      * Load configurations.
      *
-     * @param schemaName schema name
+     * @param databaseName database name
      * @return configurations
      */
-    T load(String schemaName);
+    T load(String databaseName);
     
     /**
      * Load configurations based version.
      * 
-     * @param schemaName schema name
+     * @param databaseName database name
      * @param version version
      * @return configurations
      */
-    T load(String schemaName, String version);
+    T load(String databaseName, String version);
     
     /**
      * Judge whether schema configuration existed.
      *
-     * @param schemaName schema name
+     * @param databaseName database name
      * @return configuration existed or not
      */
-    boolean isExisted(String schemaName);
+    boolean isExisted(String databaseName);
 }
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaVersionPersistService.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/DatabaseVersionPersistService.java
similarity index 51%
rename from shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaVersionPersistService.java
rename to shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/DatabaseVersionPersistService.java
index c2e9bc23b25..fc112739415 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaVersionPersistService.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/DatabaseVersionPersistService.java
@@ -18,79 +18,80 @@
 package org.apache.shardingsphere.mode.metadata.persist.service;
 
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.mode.metadata.persist.node.SchemaMetaDataNode;
+import org.apache.shardingsphere.mode.metadata.persist.node.DatabaseMetaDataNode;
 import org.apache.shardingsphere.mode.persist.PersistRepository;
 
 import java.util.Optional;
 import java.util.concurrent.atomic.AtomicLong;
 
 /**
- * Schema version persist service.
+ * Database version persist service.
  */
 @RequiredArgsConstructor
-public final class SchemaVersionPersistService {
+public final class DatabaseVersionPersistService {
     
     private final PersistRepository repository;
     
     /**
-     * Get schema active version.
+     * Get database active version.
      * 
-     * @param schemaName schema name
+     * @param databaseName database name
      * @return active version
      */
-    public Optional<String> getSchemaActiveVersion(final String schemaName) {
-        return Optional.ofNullable(repository.get(SchemaMetaDataNode.getActiveVersionPath(schemaName)));
+    public Optional<String> getDatabaseActiveVersion(final String databaseName) {
+        return Optional.ofNullable(repository.get(DatabaseMetaDataNode.getActiveVersionPath(databaseName)));
     }
     
     /**
      * Verify the version is the active version.
      * 
-     * @param schemaName schema name
+     * @param databaseName database name
      * @param version version
      * @return true if the version is active version, false if not
      */
-    public boolean isActiveVersion(final String schemaName, final String version) {
-        Optional<String> actualVersion = getSchemaActiveVersion(schemaName);
+    public boolean isActiveVersion(final String databaseName, final String version) {
+        Optional<String> actualVersion = getDatabaseActiveVersion(databaseName);
         return actualVersion.isPresent() && actualVersion.get().equals(version);
     }
     
     /**
      * Create new schema version.
      * 
-     * @param schemaName schema name
+     * @param databaseName database name
      * @return new version
      */
-    public Optional<String> createNewVersion(final String schemaName) {
-        Optional<String> activeVersion = getSchemaActiveVersion(schemaName);
+    public Optional<String> createNewVersion(final String databaseName) {
+        Optional<String> activeVersion = getDatabaseActiveVersion(databaseName);
         if (activeVersion.isPresent()) {
-            String newVersion = String.valueOf(new AtomicLong(Long.valueOf(activeVersion.get())).incrementAndGet());
-            repository.persist(SchemaMetaDataNode.getRulePath(schemaName, newVersion), repository.get(SchemaMetaDataNode.getRulePath(schemaName, activeVersion.get())));
-            repository.persist(SchemaMetaDataNode.getMetaDataDataSourcePath(schemaName, newVersion), repository.get(SchemaMetaDataNode.getMetaDataDataSourcePath(schemaName, activeVersion.get())));
+            String newVersion = String.valueOf(new AtomicLong(Long.parseLong(activeVersion.get())).incrementAndGet());
+            repository.persist(DatabaseMetaDataNode.getRulePath(databaseName, newVersion), repository.get(DatabaseMetaDataNode.getRulePath(databaseName, activeVersion.get())));
+            repository.persist(DatabaseMetaDataNode.getMetaDataDataSourcePath(databaseName, newVersion),
+                    repository.get(DatabaseMetaDataNode.getMetaDataDataSourcePath(databaseName, activeVersion.get())));
             return Optional.of(newVersion);
         }
         return Optional.empty();
     }
     
     /**
-     * Persist active schema version.
+     * Persist active database version.
      * 
-     * @param schemaName schema name
+     * @param databaseName database name
      * @param version version
      */
-    public void persistActiveVersion(final String schemaName, final String version) {
-        Optional<String> activeVersion = getSchemaActiveVersion(schemaName);
+    public void persistActiveVersion(final String databaseName, final String version) {
+        Optional<String> activeVersion = getDatabaseActiveVersion(databaseName);
         if (activeVersion.isPresent() && !activeVersion.get().equals(version)) {
-            repository.persist(SchemaMetaDataNode.getActiveVersionPath(schemaName), version);
+            repository.persist(DatabaseMetaDataNode.getActiveVersionPath(databaseName), version);
         }
     }
     
     /**
-     * Delete schema version.
+     * Delete database version.
      * 
-     * @param schemaName schema name
+     * @param databaseName database name
      * @param version version
      */
-    public void deleteVersion(final String schemaName, final String version) {
-        repository.delete(SchemaMetaDataNode.getSchemaVersionPath(schemaName, version));
+    public void deleteVersion(final String databaseName, final String version) {
+        repository.delete(DatabaseMetaDataNode.getDatabaseVersionPath(databaseName, version));
     }
 }
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaMetaDataPersistService.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaMetaDataPersistService.java
index ea2c1e21f65..e583ab737a5 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaMetaDataPersistService.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaMetaDataPersistService.java
@@ -23,7 +23,7 @@ import org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData;
 import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
 import org.apache.shardingsphere.infra.yaml.schema.pojo.YamlTableMetaData;
 import org.apache.shardingsphere.infra.yaml.schema.swapper.TableMetaDataYamlSwapper;
-import org.apache.shardingsphere.mode.metadata.persist.node.SchemaMetaDataNode;
+import org.apache.shardingsphere.mode.metadata.persist.node.DatabaseMetaDataNode;
 import org.apache.shardingsphere.mode.persist.PersistRepository;
 
 import java.util.Collection;
@@ -65,7 +65,7 @@ public final class SchemaMetaDataPersistService {
      * @param tableMetaData table meta data
      */
     public void persist(final String schemaName, final TableMetaData tableMetaData) {
-        repository.persist(SchemaMetaDataNode.getTableMetaDataPath(schemaName, schemaName, tableMetaData.getName().toLowerCase()),
+        repository.persist(DatabaseMetaDataNode.getTableMetaDataPath(schemaName, schemaName, tableMetaData.getName().toLowerCase()),
                 YamlEngine.marshal(new TableMetaDataYamlSwapper().swapToYamlConfiguration(tableMetaData)));
     }
     
@@ -77,7 +77,7 @@ public final class SchemaMetaDataPersistService {
      * @param tableMetaData table meta data
      */
     public void persist(final String databaseName, final String schemaName, final TableMetaData tableMetaData) {
-        repository.persist(SchemaMetaDataNode.getTableMetaDataPath(databaseName, schemaName, tableMetaData.getName().toLowerCase()),
+        repository.persist(DatabaseMetaDataNode.getTableMetaDataPath(databaseName, schemaName, tableMetaData.getName().toLowerCase()),
                 YamlEngine.marshal(new TableMetaDataYamlSwapper().swapToYamlConfiguration(tableMetaData)));
     }
     
@@ -87,7 +87,7 @@ public final class SchemaMetaDataPersistService {
      * @param schemaName schema name
      */
     public void persist(final String schemaName) {
-        repository.persist(SchemaMetaDataNode.getMetaDataTablesPath(schemaName, schemaName), "");
+        repository.persist(DatabaseMetaDataNode.getMetaDataTablesPath(schemaName, schemaName), "");
     }
     
     private void compareAndPersist(final String databaseName, final String schemaName, final ShardingSphereSchema schema, final ShardingSphereSchema originalSchema) {
@@ -109,17 +109,17 @@ public final class SchemaMetaDataPersistService {
     }
     
     private void persistTables(final String databaseName, final String schemaName, final Map<String, TableMetaData> tables) {
-        tables.forEach((key, value) -> repository.persist(SchemaMetaDataNode.getTableMetaDataPath(databaseName, schemaName, key),
+        tables.forEach((key, value) -> repository.persist(DatabaseMetaDataNode.getTableMetaDataPath(databaseName, schemaName, key),
                 YamlEngine.marshal(new TableMetaDataYamlSwapper().swapToYamlConfiguration(value))));
     }
     
     /**
-     * Delete schema.
+     * Delete database.
      *
-     * @param schemaName schema name to be deleted
+     * @param databaseName database name to be deleted
      */
-    public void delete(final String schemaName) {
-        repository.delete(SchemaMetaDataNode.getSchemaNamePath(schemaName));
+    public void delete(final String databaseName) {
+        repository.delete(DatabaseMetaDataNode.getDatabaseNamePath(databaseName));
     }
     
     /**
@@ -129,7 +129,7 @@ public final class SchemaMetaDataPersistService {
      * @param tableName table name
      */
     public void delete(final String schemaName, final String tableName) {
-        repository.delete(SchemaMetaDataNode.getTableMetaDataPath(schemaName, schemaName, tableName));
+        repository.delete(DatabaseMetaDataNode.getTableMetaDataPath(schemaName, schemaName, tableName));
     }
     
     /**
@@ -140,7 +140,7 @@ public final class SchemaMetaDataPersistService {
      * @param tableName table name
      */
     public void delete(final String databaseName, final String schemaName, final String tableName) {
-        repository.delete(SchemaMetaDataNode.getTableMetaDataPath(databaseName, schemaName, tableName));
+        repository.delete(DatabaseMetaDataNode.getTableMetaDataPath(databaseName, schemaName, tableName));
     }
     
     /**
@@ -151,13 +151,13 @@ public final class SchemaMetaDataPersistService {
      * @return Loaded schema
      */
     public Optional<ShardingSphereSchema> load(final String databaseName, final String schemaName) {
-        Collection<String> tables = repository.getChildrenKeys(SchemaMetaDataNode.getMetaDataTablesPath(databaseName, schemaName));
+        Collection<String> tables = repository.getChildrenKeys(DatabaseMetaDataNode.getMetaDataTablesPath(databaseName, schemaName));
         if (tables.isEmpty()) {
             return Optional.empty();
         }
         ShardingSphereSchema schema = new ShardingSphereSchema();
         tables.forEach(each -> {
-            String content = repository.get(SchemaMetaDataNode.getTableMetaDataPath(databaseName, schemaName, each));
+            String content = repository.get(DatabaseMetaDataNode.getTableMetaDataPath(databaseName, schemaName, each));
             TableMetaData tableMetaData = new TableMetaDataYamlSwapper().swapToObject(YamlEngine.unmarshal(content, YamlTableMetaData.class));
             schema.getTables().put(each, tableMetaData);
         });
@@ -169,7 +169,7 @@ public final class SchemaMetaDataPersistService {
      *
      * @return all database names
      */
-    public Collection<String> loadAllNames() {
-        return repository.getChildrenKeys(SchemaMetaDataNode.getMetaDataNodePath());
+    public Collection<String> loadAllDatabaseNames() {
+        return repository.getChildrenKeys(DatabaseMetaDataNode.getMetaDataNodePath());
     }
 }
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/impl/DataSourcePersistService.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/impl/DataSourcePersistService.java
index dae6fa2cfdb..67e1f476f62 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/impl/DataSourcePersistService.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/impl/DataSourcePersistService.java
@@ -22,8 +22,8 @@ import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
 import org.apache.shardingsphere.infra.yaml.config.swapper.YamlDataSourceConfigurationSwapper;
 import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
-import org.apache.shardingsphere.mode.metadata.persist.node.SchemaMetaDataNode;
-import org.apache.shardingsphere.mode.metadata.persist.service.SchemaBasedPersistService;
+import org.apache.shardingsphere.mode.metadata.persist.node.DatabaseMetaDataNode;
+import org.apache.shardingsphere.mode.metadata.persist.service.DatabaseBasedPersistService;
 import org.apache.shardingsphere.mode.persist.PersistRepository;
 
 import java.util.Collection;
@@ -36,30 +36,31 @@ import java.util.stream.Collectors;
  * Data source persist service.
  */
 @RequiredArgsConstructor
-public final class DataSourcePersistService implements SchemaBasedPersistService<Map<String, DataSourceProperties>> {
+public final class DataSourcePersistService implements DatabaseBasedPersistService<Map<String, DataSourceProperties>> {
     
     private static final String DEFAULT_VERSION = "0";
     
     private final PersistRepository repository;
     
     @Override
-    public void persist(final String schemaName, final Map<String, DataSourceProperties> dataSourcePropsMap, final boolean isOverwrite) {
-        if (!dataSourcePropsMap.isEmpty() && (isOverwrite || !isExisted(schemaName))) {
-            persist(schemaName, dataSourcePropsMap);
+    public void persist(final String databaseName, final Map<String, DataSourceProperties> dataSourcePropsMap, final boolean isOverwrite) {
+        if (!dataSourcePropsMap.isEmpty() && (isOverwrite || !isExisted(databaseName))) {
+            persist(databaseName, dataSourcePropsMap);
         }
     }
     
     @Override
-    public void persist(final String schemaName, final Map<String, DataSourceProperties> dataSourcePropsMap) {
-        if (Strings.isNullOrEmpty(getSchemaActiveVersion(schemaName))) {
-            repository.persist(SchemaMetaDataNode.getActiveVersionPath(schemaName), DEFAULT_VERSION);
+    public void persist(final String databaseName, final Map<String, DataSourceProperties> dataSourcePropsMap) {
+        if (Strings.isNullOrEmpty(getDatabaseActiveVersion(databaseName))) {
+            repository.persist(DatabaseMetaDataNode.getActiveVersionPath(databaseName), DEFAULT_VERSION);
         }
-        repository.persist(SchemaMetaDataNode.getMetaDataDataSourcePath(schemaName, getSchemaActiveVersion(schemaName)), YamlEngine.marshal(swapYamlDataSourceConfiguration(dataSourcePropsMap)));
+        repository.persist(DatabaseMetaDataNode.getMetaDataDataSourcePath(databaseName, getDatabaseActiveVersion(databaseName)),
+                YamlEngine.marshal(swapYamlDataSourceConfiguration(dataSourcePropsMap)));
     }
     
     @Override
-    public void persist(final String schemaName, final String version, final Map<String, DataSourceProperties> dataSourcePropsMap) {
-        repository.persist(SchemaMetaDataNode.getMetaDataDataSourcePath(schemaName, version), YamlEngine.marshal(swapYamlDataSourceConfiguration(dataSourcePropsMap)));
+    public void persist(final String databaseName, final String version, final Map<String, DataSourceProperties> dataSourcePropsMap) {
+        repository.persist(DatabaseMetaDataNode.getMetaDataDataSourcePath(databaseName, version), YamlEngine.marshal(swapYamlDataSourceConfiguration(dataSourcePropsMap)));
     }
     
     private Map<String, Map<String, Object>> swapYamlDataSourceConfiguration(final Map<String, DataSourceProperties> dataSourcePropsMap) {
@@ -70,12 +71,12 @@ public final class DataSourcePersistService implements SchemaBasedPersistService
     @Override
     public Map<String, DataSourceProperties> load(final String databaseName) {
         return isExisted(databaseName) ? getDataSourceProperties(repository.get(
-                SchemaMetaDataNode.getMetaDataDataSourcePath(databaseName, getSchemaActiveVersion(databaseName)))) : new LinkedHashMap<>();
+                DatabaseMetaDataNode.getMetaDataDataSourcePath(databaseName, getDatabaseActiveVersion(databaseName)))) : new LinkedHashMap<>();
     }
     
     @Override
-    public Map<String, DataSourceProperties> load(final String schemaName, final String version) {
-        String yamlContent = repository.get(SchemaMetaDataNode.getMetaDataDataSourcePath(schemaName, version));
+    public Map<String, DataSourceProperties> load(final String databaseName, final String version) {
+        String yamlContent = repository.get(DatabaseMetaDataNode.getMetaDataDataSourcePath(databaseName, version));
         return Strings.isNullOrEmpty(yamlContent) ? new LinkedHashMap<>() : getDataSourceProperties(yamlContent);
     }
     
@@ -92,37 +93,37 @@ public final class DataSourcePersistService implements SchemaBasedPersistService
     
     @Override
     public boolean isExisted(final String databaseName) {
-        return !Strings.isNullOrEmpty(getSchemaActiveVersion(databaseName)) && !Strings.isNullOrEmpty(repository.get(SchemaMetaDataNode.getMetaDataDataSourcePath(databaseName, 
-                getSchemaActiveVersion(databaseName))));
+        return !Strings.isNullOrEmpty(getDatabaseActiveVersion(databaseName)) && !Strings.isNullOrEmpty(repository.get(DatabaseMetaDataNode.getMetaDataDataSourcePath(databaseName,
+                getDatabaseActiveVersion(databaseName))));
     }
     
     /**
      * Append data source properties map.
      * 
-     * @param schemaName schema name
+     * @param databaseName database name
      * @param toBeAppendedDataSourcePropsMap data source properties map to be appended
      */
-    public void append(final String schemaName, final Map<String, DataSourceProperties> toBeAppendedDataSourcePropsMap) {
-        Map<String, DataSourceProperties> dataSourceConfigs = load(schemaName);
+    public void append(final String databaseName, final Map<String, DataSourceProperties> toBeAppendedDataSourcePropsMap) {
+        Map<String, DataSourceProperties> dataSourceConfigs = load(databaseName);
         dataSourceConfigs.putAll(toBeAppendedDataSourcePropsMap);
-        persist(schemaName, dataSourceConfigs);
+        persist(databaseName, dataSourceConfigs);
     }
     
     /**
      * Drop data sources.
      * 
-     * @param schemaName schema name
+     * @param databaseName database name
      * @param toBeDroppedDataSourceNames data sources to be dropped
      */
-    public void drop(final String schemaName, final Collection<String> toBeDroppedDataSourceNames) {
-        Map<String, DataSourceProperties> dataSourcePropsMap = load(schemaName);
+    public void drop(final String databaseName, final Collection<String> toBeDroppedDataSourceNames) {
+        Map<String, DataSourceProperties> dataSourcePropsMap = load(databaseName);
         for (String each : toBeDroppedDataSourceNames) {
             dataSourcePropsMap.remove(each);
         }
-        persist(schemaName, dataSourcePropsMap);
+        persist(databaseName, dataSourcePropsMap);
     }
     
-    private String getSchemaActiveVersion(final String databaseName) {
-        return repository.get(SchemaMetaDataNode.getActiveVersionPath(databaseName));
+    private String getDatabaseActiveVersion(final String databaseName) {
+        return repository.get(DatabaseMetaDataNode.getActiveVersionPath(databaseName));
     }
 }
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/impl/SchemaRulePersistService.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/impl/DatabaseRulePersistService.java
similarity index 50%
rename from shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/impl/SchemaRulePersistService.java
rename to shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/impl/DatabaseRulePersistService.java
index e8ae7717afe..7358280aeb0 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/impl/SchemaRulePersistService.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/impl/DatabaseRulePersistService.java
@@ -23,8 +23,8 @@ import org.apache.shardingsphere.infra.config.RuleConfiguration;
 import org.apache.shardingsphere.infra.yaml.config.pojo.YamlRuleConfiguration;
 import org.apache.shardingsphere.infra.yaml.config.swapper.YamlRuleConfigurationSwapperEngine;
 import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
-import org.apache.shardingsphere.mode.metadata.persist.node.SchemaMetaDataNode;
-import org.apache.shardingsphere.mode.metadata.persist.service.SchemaBasedPersistService;
+import org.apache.shardingsphere.mode.metadata.persist.node.DatabaseMetaDataNode;
+import org.apache.shardingsphere.mode.metadata.persist.service.DatabaseBasedPersistService;
 import org.apache.shardingsphere.mode.persist.PersistRepository;
 
 import java.util.Collection;
@@ -34,30 +34,30 @@ import java.util.LinkedList;
  * Schema rule persist service.
  */
 @RequiredArgsConstructor
-public final class SchemaRulePersistService implements SchemaBasedPersistService<Collection<RuleConfiguration>> {
+public final class DatabaseRulePersistService implements DatabaseBasedPersistService<Collection<RuleConfiguration>> {
     
     private static final String DEFAULT_VERSION = "0";
     
     private final PersistRepository repository;
     
     @Override
-    public void persist(final String schemaName, final Collection<RuleConfiguration> configs, final boolean isOverwrite) {
-        if (!configs.isEmpty() && (isOverwrite || !isExisted(schemaName))) {
-            persist(schemaName, configs);
+    public void persist(final String databaseName, final Collection<RuleConfiguration> configs, final boolean isOverwrite) {
+        if (!configs.isEmpty() && (isOverwrite || !isExisted(databaseName))) {
+            persist(databaseName, configs);
         }
     }
     
     @Override
-    public void persist(final String schemaName, final Collection<RuleConfiguration> configs) {
-        if (Strings.isNullOrEmpty(getSchemaActiveVersion(schemaName))) {
-            repository.persist(SchemaMetaDataNode.getActiveVersionPath(schemaName), DEFAULT_VERSION);
+    public void persist(final String databaseName, final Collection<RuleConfiguration> configs) {
+        if (Strings.isNullOrEmpty(getDatabaseActiveVersion(databaseName))) {
+            repository.persist(DatabaseMetaDataNode.getActiveVersionPath(databaseName), DEFAULT_VERSION);
         }
-        repository.persist(SchemaMetaDataNode.getRulePath(schemaName, getSchemaActiveVersion(schemaName)), YamlEngine.marshal(createYamlRuleConfigurations(configs)));
+        repository.persist(DatabaseMetaDataNode.getRulePath(databaseName, getDatabaseActiveVersion(databaseName)), YamlEngine.marshal(createYamlRuleConfigurations(configs)));
     }
     
     @Override
-    public void persist(final String schemaName, final String version, final Collection<RuleConfiguration> configs) {
-        repository.persist(SchemaMetaDataNode.getRulePath(schemaName, version), YamlEngine.marshal(createYamlRuleConfigurations(configs)));
+    public void persist(final String databaseName, final String version, final Collection<RuleConfiguration> configs) {
+        repository.persist(DatabaseMetaDataNode.getRulePath(databaseName, version), YamlEngine.marshal(createYamlRuleConfigurations(configs)));
     }
     
     private Collection<YamlRuleConfiguration> createYamlRuleConfigurations(final Collection<RuleConfiguration> ruleConfigs) {
@@ -66,27 +66,29 @@ public final class SchemaRulePersistService implements SchemaBasedPersistService
     
     @SuppressWarnings("unchecked")
     @Override
-    public Collection<RuleConfiguration> load(final String schemaName) {
-        return isExisted(schemaName)
+    public Collection<RuleConfiguration> load(final String databaseName) {
+        return isExisted(databaseName)
                 // TODO process algorithm provided configuration 
-                ? new YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(repository.get(SchemaMetaDataNode.getRulePath(schemaName, 
-                getSchemaActiveVersion(schemaName))), Collection.class, true))
+                ? new YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(repository.get(DatabaseMetaDataNode.getRulePath(databaseName,
+                getDatabaseActiveVersion(databaseName))), Collection.class, true))
                 : new LinkedList<>();
     }
     
+    @SuppressWarnings("unchecked")
     @Override
     public Collection<RuleConfiguration> load(final String schemaName, final String version) {
-        String yamlContent = repository.get(SchemaMetaDataNode.getRulePath(schemaName, version));
-        return Strings.isNullOrEmpty(yamlContent) ? new LinkedList<>() : new YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(repository.get(SchemaMetaDataNode
-                .getRulePath(schemaName, getSchemaActiveVersion(schemaName))), Collection.class, true));
+        String yamlContent = repository.get(DatabaseMetaDataNode.getRulePath(schemaName, version));
+        return Strings.isNullOrEmpty(yamlContent) ? new LinkedList<>() : new YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(repository.get(DatabaseMetaDataNode
+                .getRulePath(schemaName, getDatabaseActiveVersion(schemaName))), Collection.class, true));
     }
     
     @Override
-    public boolean isExisted(final String schemaName) {
-        return !Strings.isNullOrEmpty(getSchemaActiveVersion(schemaName)) && !Strings.isNullOrEmpty(repository.get(SchemaMetaDataNode.getRulePath(schemaName, getSchemaActiveVersion(schemaName))));
+    public boolean isExisted(final String databaseName) {
+        return !Strings.isNullOrEmpty(getDatabaseActiveVersion(databaseName))
+                && !Strings.isNullOrEmpty(repository.get(DatabaseMetaDataNode.getRulePath(databaseName, getDatabaseActiveVersion(databaseName))));
     }
     
-    private String getSchemaActiveVersion(final String schemaName) {
-        return repository.get(SchemaMetaDataNode.getActiveVersionPath(schemaName));
+    private String getDatabaseActiveVersion(final String databaseName) {
+        return repository.get(DatabaseMetaDataNode.getActiveVersionPath(databaseName));
     }
 }
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistServiceTest.java b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistServiceTest.java
index 1deed2770e6..682e42ada7f 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistServiceTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistServiceTest.java
@@ -30,7 +30,7 @@ import org.apache.shardingsphere.mode.metadata.persist.service.ComputeNodePersis
 import org.apache.shardingsphere.mode.metadata.persist.service.impl.DataSourcePersistService;
 import org.apache.shardingsphere.mode.metadata.persist.service.impl.GlobalRulePersistService;
 import org.apache.shardingsphere.mode.metadata.persist.service.impl.PropertiesPersistService;
-import org.apache.shardingsphere.mode.metadata.persist.service.impl.SchemaRulePersistService;
+import org.apache.shardingsphere.mode.metadata.persist.service.impl.DatabaseRulePersistService;
 import org.apache.shardingsphere.mode.persist.PersistRepository;
 import org.apache.shardingsphere.test.mock.MockedDataSource;
 import org.junit.Before;
@@ -66,7 +66,7 @@ public final class MetaDataPersistServiceTest {
     private DataSourcePersistService dataSourceService;
     
     @Mock
-    private SchemaRulePersistService schemaRuleService;
+    private DatabaseRulePersistService schemaRuleService;
     
     @Mock
     private GlobalRulePersistService globalRuleService;
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/node/SchemaMetaDataNodeTest.java b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/node/DatabaseMetaDataNodeTest.java
similarity index 51%
rename from shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/node/SchemaMetaDataNodeTest.java
rename to shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/node/DatabaseMetaDataNodeTest.java
index 136a0a0e806..972b1838c32 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/node/SchemaMetaDataNodeTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/node/DatabaseMetaDataNodeTest.java
@@ -26,87 +26,87 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
-public class SchemaMetaDataNodeTest {
+public class DatabaseMetaDataNodeTest {
     
     @Test
     public void assertGetRulePath() {
-        assertThat(SchemaMetaDataNode.getRulePath(DefaultSchema.LOGIC_NAME, "0"), is("/metadata/logic_db/logic_db/versions/0/rules"));
+        assertThat(DatabaseMetaDataNode.getRulePath(DefaultSchema.LOGIC_NAME, "0"), is("/metadata/logic_db/versions/0/rules"));
     }
     
     @Test
-    public void assertGetSchemaName() {
-        Optional<String> actualSchemaName = SchemaMetaDataNode.getSchemaName("/metadata/logic_db/logic_schema/rules");
+    public void assertGetDatabaseName() {
+        Optional<String> actualSchemaName = DatabaseMetaDataNode.getDatabaseName("/metadata/logic_db/logic_schema/rules");
         assertTrue(actualSchemaName.isPresent());
-        assertThat(actualSchemaName.get(), is("logic_schema"));
+        assertThat(actualSchemaName.get(), is("logic_db"));
     }
     
     @Test
-    public void assertGetSchemaNameWithLine() {
-        Optional<String> actualSchemaName = SchemaMetaDataNode.getSchemaName("/metadata/logic-db-test/logic-db-schema/rules");
+    public void assertGetDatabaseNameWithLine() {
+        Optional<String> actualSchemaName = DatabaseMetaDataNode.getDatabaseName("/metadata/logic-db-test/logic-db-schema/rules");
         assertTrue(actualSchemaName.isPresent());
-        assertThat(actualSchemaName.get(), is("logic-db-schema"));
+        assertThat(actualSchemaName.get(), is("logic-db-test"));
     }
     
     @Test
-    public void assertGetSchemaNamePath() {
-        assertThat(SchemaMetaDataNode.getSchemaNamePath("sharding_db"), is("/metadata/sharding_db"));
+    public void assertGetDatabaseNamePath() {
+        assertThat(DatabaseMetaDataNode.getDatabaseNamePath("sharding_db"), is("/metadata/sharding_db"));
     }
     
     @Test
     public void assertGetMetaDataTablesPath() {
-        assertThat(SchemaMetaDataNode.getMetaDataTablesPath("sharding_db", "sharding_db"), is("/metadata/sharding_db/sharding_db/tables"));
+        assertThat(DatabaseMetaDataNode.getMetaDataTablesPath("sharding_db", "sharding_schema"), is("/metadata/sharding_db/schemas/sharding_schema/tables"));
     }
     
     @Test
-    public void assertGetDatabaseNameBySchemaPath() {
-        Optional<String> actualSchemaName = SchemaMetaDataNode.getDatabaseNameBySchemaPath("/metadata/logic_db");
+    public void assertGetDatabaseNameByDatabasePath() {
+        Optional<String> actualSchemaName = DatabaseMetaDataNode.getDatabaseNameByDatabasePath("/metadata/logic_db");
         assertTrue(actualSchemaName.isPresent());
         assertThat(actualSchemaName.get(), is("logic_db"));
     }
     
     @Test
     public void assertGetTableName() {
-        Optional<String> actualTableName = SchemaMetaDataNode.getTableName("/metadata/logic_db/logic_schema/tables/t_order");
+        Optional<String> actualTableName = DatabaseMetaDataNode.getTableName("/metadata/logic_db/schemas/logic_schema/tables/t_order");
         assertTrue(actualTableName.isPresent());
         assertThat(actualTableName.get(), is("t_order"));
     }
     
     @Test
     public void assertGetVersionBySchemaPath() {
-        Optional<String> actualVersion = SchemaMetaDataNode.getVersionByDataSourcesPath("/metadata/logic_db/logic_schema/versions/0/dataSources");
+        Optional<String> actualVersion = DatabaseMetaDataNode.getVersionByDataSourcesPath("/metadata/logic_db/versions/0/dataSources");
         assertTrue(actualVersion.isPresent());
         assertThat(actualVersion.get(), is("0"));
     }
     
+    @Test
+    public void assertGetActiveVersionPath() {
+        assertThat(DatabaseMetaDataNode.getActiveVersionPath("logic_db"), is("/metadata/logic_db/active_version"));
+    }
+    
     @Test
     public void assertGetVersionByRulesPath() {
-        Optional<String> actualVersion = SchemaMetaDataNode.getVersionByRulesPath("/metadata/logic_db/logic_schema/versions/0/rules");
+        Optional<String> actualVersion = DatabaseMetaDataNode.getVersionByRulesPath("/metadata/logic_db/versions/0/rules");
         assertTrue(actualVersion.isPresent());
         assertThat(actualVersion.get(), is("0"));
     }
     
     @Test
-    public void assertGetSchemaVersionPath() {
-        assertThat(SchemaMetaDataNode.getSchemaVersionPath("logic_db", "0"), is("/metadata/logic_db/logic_db/versions/0"));
+    public void assertGetDatabaseVersionPath() {
+        assertThat(DatabaseMetaDataNode.getDatabaseVersionPath("logic_db", "0"), is("/metadata/logic_db/versions/0"));
     }
     
     @Test
     public void assertGetTableMetaDataPath() {
-        assertThat(SchemaMetaDataNode.getTableMetaDataPath("db", "schema", "table"), is("/metadata/db/schema/tables/table"));
-    }
-    
-    @Test
-    public void assertGetDatabaseNamePath() {
-        assertThat(SchemaMetaDataNode.getDatabaseNamePath("db"), is("/metadata/db"));
+        assertThat(DatabaseMetaDataNode.getTableMetaDataPath("logic_db", "logic_schema", "order"), is("/metadata/logic_db/schemas/logic_schema/tables/order"));
     }
     
     @Test
     public void assertGetMetaDataNodePath() {
-        assertThat(SchemaMetaDataNode.getMetaDataNodePath(), is("/metadata"));
+        assertThat(DatabaseMetaDataNode.getMetaDataNodePath(), is("/metadata"));
     }
     
     @Test
     public void assertGetMetaDataDataSourcePath() {
-        assertThat(SchemaMetaDataNode.getMetaDataDataSourcePath(DefaultSchema.LOGIC_NAME, "0"), is("/metadata/logic_db/logic_db/versions/0/dataSources"));
+        assertThat(DatabaseMetaDataNode.getMetaDataDataSourcePath(DefaultSchema.LOGIC_NAME, "0"), is("/metadata/logic_db/versions/0/dataSources"));
     }
 }
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaMetaDataPersistServiceTest.java b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaMetaDataPersistServiceTest.java
index ad79de28858..46ff4f6923a 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaMetaDataPersistServiceTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaMetaDataPersistServiceTest.java
@@ -60,14 +60,14 @@ public final class SchemaMetaDataPersistServiceTest {
         TableMetaData tableMetaData = new TableMetaDataYamlSwapper().swapToObject(YamlEngine.unmarshal(readYAML(), YamlTableMetaData.class));
         ShardingSphereSchema schema = new ShardingSphereSchema();
         schema.getTables().put("t_order", tableMetaData);
-        new SchemaMetaDataPersistService(repository).persist("foo_db", "foo_db", schema);
-        verify(repository).persist(eq("/metadata/foo_db/foo_db/tables/t_order"), anyString());
+        new SchemaMetaDataPersistService(repository).persist("foo_db", "foo_schema", schema);
+        verify(repository).persist(eq("/metadata/foo_db/schemas/foo_schema/tables/t_order"), anyString());
     }
     
     @Test
     public void assertPersistSchemaTables() {
         new SchemaMetaDataPersistService(repository).persist("foo_db");
-        verify(repository).persist(eq("/metadata/foo_db/foo_db/tables"), anyString());
+        verify(repository).persist(eq("/metadata/foo_db/schemas/foo_db/tables"), anyString());
     }
     
     @Test
@@ -79,9 +79,9 @@ public final class SchemaMetaDataPersistServiceTest {
     @Test
     public void assertLoad() {
         SchemaMetaDataPersistService schemaMetaDataPersistService = new SchemaMetaDataPersistService(repository);
-        when(repository.getChildrenKeys("/metadata/foo_db/foo_db/tables")).thenReturn(Lists.newArrayList("t_order"));
-        when(repository.get("/metadata/foo_db/foo_db/tables/t_order")).thenReturn(readYAML());
-        Optional<ShardingSphereSchema> schemaOptional = schemaMetaDataPersistService.load("foo_db", "foo_db");
+        when(repository.getChildrenKeys("/metadata/foo_db/schemas/foo_schema/tables")).thenReturn(Lists.newArrayList("t_order"));
+        when(repository.get("/metadata/foo_db/schemas/foo_schema/tables/t_order")).thenReturn(readYAML());
+        Optional<ShardingSphereSchema> schemaOptional = schemaMetaDataPersistService.load("foo_db", "foo_schema");
         assertTrue(schemaOptional.isPresent());
         Optional<ShardingSphereSchema> empty = schemaMetaDataPersistService.load("test", "test");
         assertThat(empty, is(Optional.empty()));
@@ -93,9 +93,9 @@ public final class SchemaMetaDataPersistServiceTest {
     }
     
     @Test
-    public void assertLoadAllNames() {
+    public void assertLoadAllDatabaseNames() {
         when(repository.getChildrenKeys("/metadata")).thenReturn(Arrays.asList("foo_db"));
-        Collection<String> actual = new SchemaMetaDataPersistService(repository).loadAllNames();
+        Collection<String> actual = new SchemaMetaDataPersistService(repository).loadAllDatabaseNames();
         assertThat(actual.size(), is(1));
         assertThat(actual, hasItems("foo_db"));
     }
@@ -104,7 +104,7 @@ public final class SchemaMetaDataPersistServiceTest {
     public void assertPersistTableMetaData() {
         TableMetaData tableMetaData = new TableMetaData("FOO_TABLE", Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
         new SchemaMetaDataPersistService(repository).persist("foo_db", tableMetaData);
-        verify(repository).persist(eq("/metadata/foo_db/foo_db/tables/foo_table"), anyString());
+        verify(repository).persist(eq("/metadata/foo_db/schemas/foo_db/tables/foo_table"), anyString());
     }
     
     @SneakyThrows({IOException.class, URISyntaxException.class})
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/impl/DataSourcePersistServiceTest.java b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/impl/DataSourcePersistServiceTest.java
index 57b11ebbf17..7777b01ad43 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/impl/DataSourcePersistServiceTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/impl/DataSourcePersistServiceTest.java
@@ -51,8 +51,8 @@ public final class DataSourcePersistServiceTest {
     
     @Test
     public void assertLoad() {
-        when(repository.get("/metadata/foo_db/foo_db/active_version")).thenReturn("0");
-        when(repository.get("/metadata/foo_db/foo_db/versions/0/dataSources")).thenReturn(readDataSourceYaml("yaml/persist/data-source.yaml"));
+        when(repository.get("/metadata/foo_db/active_version")).thenReturn("0");
+        when(repository.get("/metadata/foo_db/versions/0/dataSources")).thenReturn(readDataSourceYaml("yaml/persist/data-source.yaml"));
         Map<String, DataSourceProperties> actual = new DataSourcePersistService(repository).load("foo_db");
         assertThat(actual.size(), is(2));
         assertDataSourceProperties(actual.get("ds_0"), DataSourcePropertiesCreator.create(createDataSource("ds_0")));
@@ -75,26 +75,26 @@ public final class DataSourcePersistServiceTest {
     
     @Test
     public void assertLoadWithoutPath() {
-        when(repository.get("/metadata/foo_db/foo_db/active_version")).thenReturn("0");
+        when(repository.get("/metadata/foo_db/active_version")).thenReturn("0");
         Map<String, DataSourceProperties> actual = new DataSourcePersistService(repository).load("foo_db");
         assertTrue(actual.isEmpty());
     }
     
     @Test
     public void assertAppend() {
-        when(repository.get("/metadata/foo_db/foo_db/active_version")).thenReturn("0");
+        when(repository.get("/metadata/foo_db/active_version")).thenReturn("0");
         new DataSourcePersistService(repository).append("foo_db", Collections.singletonMap("foo_ds", DataSourcePropertiesCreator.create(createDataSource("foo_ds"))));
         String expected = readDataSourceYaml("yaml/persist/data-source-foo.yaml");
-        verify(repository).persist("/metadata/foo_db/foo_db/versions/0/dataSources", expected);
+        verify(repository).persist("/metadata/foo_db/versions/0/dataSources", expected);
     }
     
     @Test
     public void assertDrop() {
-        when(repository.get("/metadata/foo_db/foo_db/active_version")).thenReturn("0");
+        when(repository.get("/metadata/foo_db/active_version")).thenReturn("0");
         String actual = readDataSourceYaml("yaml/persist/data-source-foo.yaml");
-        when(repository.get("/metadata/foo_db/foo_db/versions/0/dataSources")).thenReturn(actual);
+        when(repository.get("/metadata/foo_db/versions/0/dataSources")).thenReturn(actual);
         new DataSourcePersistService(repository).drop("foo_db", Collections.singleton("foo_ds"));
-        verify(repository).persist("/metadata/foo_db/foo_db/versions/0/dataSources", "{}" + System.lineSeparator());
+        verify(repository).persist("/metadata/foo_db/versions/0/dataSources", "{}" + System.lineSeparator());
     }
     
     private DataSource createDataSource(final String name) {
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/impl/SchemaRulePersistServiceTest.java b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/impl/SchemaRulePersistServiceTest.java
index af6916dc07a..57fd6be0457 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/impl/SchemaRulePersistServiceTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/impl/SchemaRulePersistServiceTest.java
@@ -46,22 +46,22 @@ public final class SchemaRulePersistServiceTest {
     
     @Test
     public void assertLoadWithoutExistedNode() {
-        assertTrue(new SchemaRulePersistService(repository).load("foo_db").isEmpty());
+        assertTrue(new DatabaseRulePersistService(repository).load("foo_db").isEmpty());
     }
     
     @Test
     public void assertLoadWithExistedNode() {
-        when(repository.get("/metadata/foo_db/foo_db/active_version")).thenReturn("0");
-        when(repository.get("/metadata/foo_db/foo_db/versions/0/rules")).thenReturn(readYAML());
-        Collection<RuleConfiguration> actual = new SchemaRulePersistService(repository).load("foo_db");
+        when(repository.get("/metadata/foo_db/active_version")).thenReturn("0");
+        when(repository.get("/metadata/foo_db/versions/0/rules")).thenReturn(readYAML());
+        Collection<RuleConfiguration> actual = new DatabaseRulePersistService(repository).load("foo_db");
         assertThat(actual.size(), is(1));
     }
     
     @Test
     public void assertIsExisted() {
-        when(repository.get("/metadata/foo_db/foo_db/active_version")).thenReturn("0");
-        when(repository.get("/metadata/foo_db/foo_db/versions/0/rules")).thenReturn(readYAML());
-        SchemaRulePersistService schemaRulePersistService = new SchemaRulePersistService(repository);
+        when(repository.get("/metadata/foo_db/active_version")).thenReturn("0");
+        when(repository.get("/metadata/foo_db/versions/0/rules")).thenReturn(readYAML());
+        DatabaseRulePersistService schemaRulePersistService = new DatabaseRulePersistService(repository);
         assertTrue(schemaRulePersistService.isExisted("foo_db"));
         assertFalse(schemaRulePersistService.isExisted("foo_db_1"));
     }
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
index 9a3e2c65929..11fbd67c671 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
@@ -125,7 +125,7 @@ public final class ClusterContextManagerBuilder implements ContextManagerBuilder
     
     private MetaDataContextsBuilder createMetaDataContextsBuilder(final MetaDataPersistService metaDataPersistService, final ContextManagerBuilderParameter parameter) throws SQLException {
         Collection<String> databaseNames = InstanceType.JDBC == parameter.getInstanceDefinition().getInstanceType()
-                ? parameter.getDatabaseConfigs().keySet() : metaDataPersistService.getSchemaMetaDataService().loadAllNames();
+                ? parameter.getDatabaseConfigs().keySet() : metaDataPersistService.getSchemaMetaDataService().loadAllDatabaseNames();
         Collection<RuleConfiguration> globalRuleConfigs = metaDataPersistService.getGlobalRuleService().load();
         Properties props = metaDataPersistService.getPropsService().load();
         MetaDataContextsBuilder result = new MetaDataContextsBuilder(globalRuleConfigs, props);
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/cache/subscriber/ScalingRegistrySubscriber.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/cache/subscriber/ScalingRegistrySubscriber.java
index 46d7681ed1e..282f8c854d9 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/cache/subscriber/ScalingRegistrySubscriber.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/cache/subscriber/ScalingRegistrySubscriber.java
@@ -23,8 +23,8 @@ import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.cache.event.StartScalingEvent;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.rule.ScalingTaskFinishedEvent;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.version.SchemaVersionPreparedEvent;
-import org.apache.shardingsphere.mode.metadata.persist.node.SchemaMetaDataNode;
-import org.apache.shardingsphere.mode.metadata.persist.service.SchemaVersionPersistService;
+import org.apache.shardingsphere.mode.metadata.persist.node.DatabaseMetaDataNode;
+import org.apache.shardingsphere.mode.metadata.persist.service.DatabaseVersionPersistService;
 import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
 
 import java.util.Optional;
@@ -38,11 +38,11 @@ public final class ScalingRegistrySubscriber {
     
     private final ClusterPersistRepository repository;
     
-    private final SchemaVersionPersistService schemaVersionPersistService;
+    private final DatabaseVersionPersistService databaseVersionPersistService;
     
     public ScalingRegistrySubscriber(final ClusterPersistRepository repository) {
         this.repository = repository;
-        schemaVersionPersistService = new SchemaVersionPersistService(repository);
+        databaseVersionPersistService = new DatabaseVersionPersistService(repository);
         ShardingSphereEventBus.getInstance().register(this);
     }
     
@@ -53,11 +53,11 @@ public final class ScalingRegistrySubscriber {
      */
     @Subscribe
     public void startScaling(final SchemaVersionPreparedEvent event) {
-        String activeVersion = schemaVersionPersistService.getSchemaActiveVersion(event.getSchemaName()).get();
-        String sourceDataSource = repository.get(SchemaMetaDataNode.getMetaDataDataSourcePath(event.getSchemaName(), activeVersion));
-        String targetDataSource = repository.get(SchemaMetaDataNode.getMetaDataDataSourcePath(event.getSchemaName(), event.getVersion()));
-        String sourceRule = repository.get(SchemaMetaDataNode.getRulePath(event.getSchemaName(), activeVersion));
-        String targetRule = repository.get(SchemaMetaDataNode.getRulePath(event.getSchemaName(), event.getVersion()));
+        String activeVersion = databaseVersionPersistService.getDatabaseActiveVersion(event.getSchemaName()).get();
+        String sourceDataSource = repository.get(DatabaseMetaDataNode.getMetaDataDataSourcePath(event.getSchemaName(), activeVersion));
+        String targetDataSource = repository.get(DatabaseMetaDataNode.getMetaDataDataSourcePath(event.getSchemaName(), event.getVersion()));
+        String sourceRule = repository.get(DatabaseMetaDataNode.getRulePath(event.getSchemaName(), activeVersion));
+        String targetRule = repository.get(DatabaseMetaDataNode.getRulePath(event.getSchemaName(), event.getVersion()));
         log.info("start scaling job, locked the schema name, event={}", event);
         StartScalingEvent startScalingEvent = new StartScalingEvent(event.getSchemaName(), sourceDataSource, sourceRule, targetDataSource, targetRule,
                 Integer.parseInt(activeVersion), Integer.parseInt(event.getVersion()));
@@ -73,10 +73,10 @@ public final class ScalingRegistrySubscriber {
     public void scalingTaskFinished(final ScalingTaskFinishedEvent event) {
         log.info("scalingTaskFinished, event={}", event);
         int targetActiveVersion = event.getTargetActiveVersion();
-        Optional<String> activeVersion = schemaVersionPersistService.getSchemaActiveVersion(event.getTargetSchemaName());
+        Optional<String> activeVersion = databaseVersionPersistService.getDatabaseActiveVersion(event.getTargetSchemaName());
         if (activeVersion.isPresent() && targetActiveVersion == Integer.parseInt(activeVersion.get())) {
-            schemaVersionPersistService.persistActiveVersion(event.getTargetSchemaName(), event.getTargetNewVersion() + "");
-            schemaVersionPersistService.deleteVersion(event.getTargetSchemaName(), targetActiveVersion + "");
+            databaseVersionPersistService.persistActiveVersion(event.getTargetSchemaName(), event.getTargetNewVersion() + "");
+            databaseVersionPersistService.deleteVersion(event.getTargetSchemaName(), targetActiveVersion + "");
         } else {
             log.error("targetActiveVersion does not match current activeVersion, targetActiveVersion={}, activeVersion={}", targetActiveVersion, activeVersion.orElse(null));
         }
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcher.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcher.java
index 11366cb1723..95a19e7e092 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcher.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcher.java
@@ -35,7 +35,7 @@ import org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.confi
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.version.SchemaVersionChangedEvent;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.metadata.event.SchemaAddedEvent;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.metadata.event.SchemaDeletedEvent;
-import org.apache.shardingsphere.mode.metadata.persist.node.SchemaMetaDataNode;
+import org.apache.shardingsphere.mode.metadata.persist.node.DatabaseMetaDataNode;
 import org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEvent;
 import org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEvent.Type;
 
@@ -57,7 +57,7 @@ public final class MetaDataChangedWatcher implements GovernanceWatcher<Governanc
     
     @Override
     public Collection<String> getWatchingKeys() {
-        return Collections.singleton(SchemaMetaDataNode.getMetaDataNodePath());
+        return Collections.singleton(DatabaseMetaDataNode.getMetaDataNodePath());
     }
     
     @Override
@@ -78,18 +78,18 @@ public final class MetaDataChangedWatcher implements GovernanceWatcher<Governanc
     }
     
     private boolean isLogicSchemaChanged(final DataChangedEvent event) {
-        return SchemaMetaDataNode.getDatabaseNameBySchemaPath(event.getKey()).isPresent();
+        return DatabaseMetaDataNode.getDatabaseNameByDatabasePath(event.getKey()).isPresent();
     }
     
     private boolean isTableMetaDataChanged(final DataChangedEvent event) {
-        Optional<String> schemaName = SchemaMetaDataNode.getSchemaName(event.getKey());
-        Optional<String> tableName = SchemaMetaDataNode.getTableName(event.getKey());
-        return schemaName.isPresent() && tableName.isPresent()
-                && !SystemSchemaBuilderRule.isSystemTable(schemaName.get(), tableName.get()) && !Strings.isNullOrEmpty(event.getValue());
+        Optional<String> databaseName = DatabaseMetaDataNode.getDatabaseName(event.getKey());
+        Optional<String> tableName = DatabaseMetaDataNode.getTableName(event.getKey());
+        return databaseName.isPresent() && tableName.isPresent()
+                && !SystemSchemaBuilderRule.isSystemTable(databaseName.get(), tableName.get()) && !Strings.isNullOrEmpty(event.getValue());
     }
     
     private Optional<GovernanceEvent> buildLogicSchemaChangedEvent(final DataChangedEvent event) {
-        String databaseName = SchemaMetaDataNode.getDatabaseNameBySchemaPath(event.getKey()).get();
+        String databaseName = DatabaseMetaDataNode.getDatabaseNameByDatabasePath(event.getKey()).get();
         if (DataChangedEvent.Type.ADDED == event.getType() || DataChangedEvent.Type.UPDATED == event.getType()) {
             return Optional.of(new SchemaAddedEvent(databaseName));
         }
@@ -100,20 +100,20 @@ public final class MetaDataChangedWatcher implements GovernanceWatcher<Governanc
     }
     
     private Optional<GovernanceEvent> buildGovernanceEvent(final DataChangedEvent event) {
-        Optional<String> schemaName = SchemaMetaDataNode.getSchemaName(event.getKey());
-        if (!schemaName.isPresent() || Strings.isNullOrEmpty(event.getValue())) {
+        Optional<String> databaseName = DatabaseMetaDataNode.getDatabaseName(event.getKey());
+        if (!databaseName.isPresent() || Strings.isNullOrEmpty(event.getValue())) {
             return Optional.empty();
         }
-        if (event.getKey().equals(SchemaMetaDataNode.getActiveVersionPath(schemaName.get()))) {
-            return Optional.of(new SchemaVersionChangedEvent(schemaName.get(), event.getValue()));
+        if (event.getKey().equals(DatabaseMetaDataNode.getActiveVersionPath(databaseName.get()))) {
+            return Optional.of(new SchemaVersionChangedEvent(databaseName.get(), event.getValue()));
         }
-        Optional<String> schemaVersion = SchemaMetaDataNode.getVersionByDataSourcesPath(event.getKey());
+        Optional<String> schemaVersion = DatabaseMetaDataNode.getVersionByDataSourcesPath(event.getKey());
         if (schemaVersion.isPresent()) {
-            return Optional.of(createDataSourceChangedEvent(schemaName.get(), schemaVersion.get(), event));
+            return Optional.of(createDataSourceChangedEvent(databaseName.get(), schemaVersion.get(), event));
         }
-        schemaVersion = SchemaMetaDataNode.getVersionByRulesPath(event.getKey());
+        schemaVersion = DatabaseMetaDataNode.getVersionByRulesPath(event.getKey());
         if (schemaVersion.isPresent()) {
-            return Optional.of(createRuleChangedEvent(schemaName.get(), schemaVersion.get(), event));
+            return Optional.of(createRuleChangedEvent(databaseName.get(), schemaVersion.get(), event));
         }
         return Optional.empty();
     }
@@ -141,11 +141,11 @@ public final class MetaDataChangedWatcher implements GovernanceWatcher<Governanc
     }
     
     private Optional<GovernanceEvent> buildTableMetaDataChangedEvent(final DataChangedEvent event) {
-        String schemaName = SchemaMetaDataNode.getSchemaName(event.getKey()).get();
-        String tableName = SchemaMetaDataNode.getTableName(event.getKey()).get();
+        String databaseName = DatabaseMetaDataNode.getDatabaseName(event.getKey()).get();
+        String tableName = DatabaseMetaDataNode.getTableName(event.getKey()).get();
         if (DataChangedEvent.Type.DELETED == event.getType()) {
-            return Optional.of(new SchemaChangedEvent(schemaName, null, tableName));
+            return Optional.of(new SchemaChangedEvent(databaseName, null, tableName));
         }
-        return Optional.of(new SchemaChangedEvent(schemaName, new TableMetaDataYamlSwapper().swapToObject(YamlEngine.unmarshal(event.getValue(), YamlTableMetaData.class)), null));
+        return Optional.of(new SchemaChangedEvent(databaseName, new TableMetaDataYamlSwapper().swapToObject(YamlEngine.unmarshal(event.getValue(), YamlTableMetaData.class)), null));
     }
 }
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/cache/subscriber/ScalingRegistrySubscriberTest.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/cache/subscriber/ScalingRegistrySubscriberTest.java
index dc27d43087a..4552eca150f 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/cache/subscriber/ScalingRegistrySubscriberTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/cache/subscriber/ScalingRegistrySubscriberTest.java
@@ -17,7 +17,7 @@
 
 package org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.cache.subscriber;
 
-import org.apache.shardingsphere.mode.metadata.persist.service.SchemaVersionPersistService;
+import org.apache.shardingsphere.mode.metadata.persist.service.DatabaseVersionPersistService;
 import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
 import org.junit.Before;
 import org.junit.Test;
@@ -34,26 +34,20 @@ public final class ScalingRegistrySubscriberTest {
     private ClusterPersistRepository repository;
     
     @Mock
-    private SchemaVersionPersistService schemaVersionPersistService;
+    private DatabaseVersionPersistService databaseVersionPersistService;
     
     private ScalingRegistrySubscriber scalingRegistrySubscriber;
     
     @Before
     public void setUp() throws ReflectiveOperationException {
         scalingRegistrySubscriber = new ScalingRegistrySubscriber(repository);
-        Field persistServiceField = ScalingRegistrySubscriber.class.getDeclaredField("schemaVersionPersistService");
+        Field persistServiceField = ScalingRegistrySubscriber.class.getDeclaredField("databaseVersionPersistService");
         persistServiceField.setAccessible(true);
-        persistServiceField.set(scalingRegistrySubscriber, schemaVersionPersistService);
+        persistServiceField.set(scalingRegistrySubscriber, databaseVersionPersistService);
     }
     
     @Test
     public void assertCacheRuleConfiguration() {
         // TODO finish test case
     }
-    
-//    @SneakyThrows({IOException.class, URISyntaxException.class})
-//    private String readYAML() {
-//        return Files.readAllLines(Paths.get(ClassLoader.getSystemResource("yaml/regcenter/data-schema-rule.yaml").toURI()))
-//                .stream().map(each -> each + System.lineSeparator()).collect(Collectors.joining());
-//    }
 }
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcherTest.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcherTest.java
index 0f1cf5fbb1a..4407b02707b 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcherTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcherTest.java
@@ -60,7 +60,7 @@ public final class MetaDataChangedWatcherTest {
     
     @Test
     public void assertEmptyValue() {
-        String key = "/metadata/sharding_db/sharding_schema/dataSources";
+        String key = "/metadata/sharding_db/dataSources";
         Optional<GovernanceEvent> actual = createEvent(key, null, Type.UPDATED);
         assertFalse(actual.isPresent());
     }
@@ -75,7 +75,7 @@ public final class MetaDataChangedWatcherTest {
     
     @Test
     public void assertCreateDataSourceChangedEvent() {
-        String key = "/metadata/sharding_db/sharding_schema/versions/0/dataSources";
+        String key = "/metadata/sharding_db/versions/0/dataSources";
         String value = "{}";
         Optional<GovernanceEvent> actual = createEvent(key, value, Type.UPDATED);
         assertTrue(actual.isPresent());
@@ -83,21 +83,21 @@ public final class MetaDataChangedWatcherTest {
     
     @Test
     public void assertCreateRuleChangedEvent() {
-        String key = "/metadata/sharding_db/sharding_schema/versions/0/rules";
+        String key = "/metadata/sharding_db/versions/0/rules";
         Optional<GovernanceEvent> actual = createEvent(key, "[]", Type.UPDATED);
         assertTrue(actual.isPresent());
     }
     
     @Test
     public void assertCreateTableSchemaChangedEvent() {
-        String key = "/metadata/sharding_db/sharding_schema/tables/t_order";
+        String key = "/metadata/sharding_db/schemas/sharding_schema/tables/t_order";
         Optional<GovernanceEvent> actual = createEvent(key, "{}", Type.UPDATED);
         assertTrue(actual.isPresent());
     }
     
     @Test
     public void assertCreateTableSchemaDeletedEvent() {
-        String key = "/metadata/sharding_db/sharding_schema/tables/t_order";
+        String key = "/metadata/sharding_db/schemas/sharding_schema/tables/t_order";
         Optional<GovernanceEvent> actual = createEvent(key, "{}", Type.DELETED);
         assertTrue(actual.isPresent());
         assertThat(((SchemaChangedEvent) actual.get()).getDeletedTable(), is("t_order"));
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
index cbabcac2c2b..93c083211e1 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
@@ -72,7 +72,7 @@ public final class StandaloneContextManagerBuilder implements ContextManagerBuil
         Properties props = metaDataPersistService.getPropsService().load();
         MetaDataContextsBuilder builder = new MetaDataContextsBuilder(globalRuleConfigs, props);
         Collection<String> databaseNames = InstanceType.JDBC == parameter.getInstanceDefinition().getInstanceType()
-                ? parameter.getDatabaseConfigs().keySet() : metaDataPersistService.getSchemaMetaDataService().loadAllNames();
+                ? parameter.getDatabaseConfigs().keySet() : metaDataPersistService.getSchemaMetaDataService().loadAllDatabaseNames();
         DatabaseType databaseType = DatabaseTypeFactory.getDatabaseType(parameter.getDatabaseConfigs(), new ConfigurationProperties(parameter.getProps()));
         for (String each : databaseNames) {
             if (databaseType.getSystemSchemas().contains(each)) {
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilderTextTest.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilderTextTest.java
index bac8229f21f..dc5c9ee3910 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilderTextTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilderTextTest.java
@@ -25,7 +25,7 @@ import org.apache.shardingsphere.infra.instance.definition.InstanceType;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
 import org.apache.shardingsphere.mode.metadata.persist.node.GlobalNode;
-import org.apache.shardingsphere.mode.metadata.persist.node.SchemaMetaDataNode;
+import org.apache.shardingsphere.mode.metadata.persist.node.DatabaseMetaDataNode;
 import org.apache.shardingsphere.mode.persist.PersistRepository;
 import org.apache.shardingsphere.test.mock.MockedDataSource;
 import org.junit.Test;
@@ -52,8 +52,8 @@ public final class StandaloneContextManagerBuilderTextTest {
         assertTrue(actual.getMetaDataContexts().getMetaDataPersistService().isPresent());
         PersistRepository repository = actual.getMetaDataContexts().getMetaDataPersistService().get().getRepository();
         assertNotNull(repository.get(GlobalNode.getGlobalRuleNode()));
-        assertNotNull(repository.get(SchemaMetaDataNode.getMetaDataDataSourcePath("foo_schema", "0")));
-        assertNotNull(repository.get(SchemaMetaDataNode.getRulePath("foo_schema", "0")));
+        assertNotNull(repository.get(DatabaseMetaDataNode.getMetaDataDataSourcePath("foo_schema", "0")));
+        assertNotNull(repository.get(DatabaseMetaDataNode.getRulePath("foo_schema", "0")));
         assertNotNull(actual.getTransactionContexts().getEngines().get("foo_schema"));
     }
 }