You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@skywalking.apache.org by wu...@apache.org on 2018/06/14 14:21:22 UTC

[incubator-skywalking] branch master updated: support shardingjdbc database storage feature (#1347)

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/incubator-skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new 6279c8d  support shardingjdbc database storage feature (#1347)
6279c8d is described below

commit 6279c8dd3c5c9a3378e8283fca07f1fc5c67d420
Author: 林嘉琦 Lin Jiaqi <li...@dangdang.com>
AuthorDate: Thu Jun 14 22:21:03 2018 +0800

    support shardingjdbc database storage feature (#1347)
    
    * support shardingjdbc database storage feature
---
 apm-collector/apm-collector-boot/pom.xml           |   5 +
 .../client-component/pom.xml                       |   8 +
 .../client/shardingjdbc/ShardingjdbcClient.java    | 160 ++++++++
 .../shardingjdbc/ShardingjdbcClientConfig.java     |  76 ++++
 .../shardingjdbc/ShardingjdbcClientException.java  |  36 ++
 .../pom.xml                                        |  28 +-
 .../storage/shardingjdbc/MetricTransformUtil.java  |  78 ++++
 .../StorageModuleShardingjdbcConfig.java           |  27 ++
 .../StorageModuleShardingjdbcProvider.java         | 440 +++++++++++++++++++++
 .../dao/AbstractPersistenceShardingjdbcDAO.java    | 117 ++++++
 .../base/dao/BatchShardingjdbcDAO.java             |  91 +++++
 .../shardingjdbc/base/dao/ShardingjdbcDAO.java     |  74 ++++
 .../base/define/ShardingjdbcColumnDefine.java      |  36 ++
 .../base/define/ShardingjdbcSqlEntity.java         |  44 +++
 .../base/define/ShardingjdbcStorageInstaller.java  |  99 +++++
 .../base/define/ShardingjdbcTableDefine.java       |  38 ++
 .../dao/GlobalTraceShardingjdbcPersistenceDAO.java |  71 ++++
 ...nstanceHeartBeatShardingjdbcPersistenceDAO.java |  85 ++++
 .../SegmentDurationShardingjdbcPersistenceDAO.java |  85 ++++
 .../dao/SegmentShardingjdbcPersistenceDAO.java     |  70 ++++
 ...iceNameHeartBeatShardingjdbcPersistenceDAO.java |  97 +++++
 ...icationComponentShardingjdbcPersistenceDAO.java |  71 ++++
 ...tionComponentDayShardingjdbcPersistenceDAO.java |  41 ++
 ...ionComponentHourShardingjdbcPersistenceDAO.java |  41 ++
 ...nComponentMinuteShardingjdbcPersistenceDAO.java |  41 ++
 ...onComponentMonthShardingjdbcPersistenceDAO.java |  41 ++
 ...icationAlarmListShardingjdbcPersistenceDAO.java |  80 ++++
 ...tionAlarmListShardingjdbcDayPersistenceDAO.java |  41 ++
 ...ionAlarmListShardingjdbcHourPersistenceDAO.java |  41 ++
 ...nAlarmListShardingjdbcMinutePersistenceDAO.java |  41 ++
 ...onAlarmListShardingjdbcMonthPersistenceDAO.java |  41 ++
 ...ApplicationAlarmShardingjdbcPersistenceDAO.java |  84 ++++
 ...ferenceAlarmListShardingjdbcPersistenceDAO.java |  86 ++++
 ...onReferenceAlarmShardingjdbcPersistenceDAO.java |  86 ++++
 ...nstanceAlarmListShardingjdbcPersistenceDAO.java |  86 ++++
 .../InstanceAlarmShardingjdbcPersistenceDAO.java   |  86 ++++
 ...ferenceAlarmListShardingjdbcPersistenceDAO.java |  90 +++++
 ...ceReferenceAlarmShardingjdbcPersistenceDAO.java |  91 +++++
 ...ServiceAlarmListShardingjdbcPersistenceDAO.java |  88 +++++
 .../ServiceAlarmShardingjdbcPersistenceDAO.java    |  88 +++++
 ...ferenceAlarmListShardingjdbcPersistenceDAO.java |  94 +++++
 ...ceReferenceAlarmShardingjdbcPersistenceDAO.java |  94 +++++
 ...pplicationMetricShardingjdbcPersistenceDAO.java |  81 ++++
 ...icationDayMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...cationHourMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...tionMinuteMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...ationMonthMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...plicationMappingShardingjdbcPersistenceDAO.java |  71 ++++
 ...cationMappingDayShardingjdbcPersistenceDAO.java |  41 ++
 ...ationMappingHourShardingjdbcPersistenceDAO.java |  41 ++
 ...ionMappingMinuteShardingjdbcPersistenceDAO.java |  41 ++
 ...tionMappingMonthShardingjdbcPersistenceDAO.java |  41 ++
 ...nReferenceMetricShardingjdbcPersistenceDAO.java |  83 ++++
 ...ferenceDayMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...erenceHourMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...enceMinuteMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...renceMonthMetricShardingjdbcPersistenceDAO.java |  41 ++
 .../dao/cache/ApplicationShardingjdbcCacheDAO.java | 113 ++++++
 .../dao/cache/InstanceShardingjdbcCacheDAO.java    | 108 +++++
 .../cache/NetworkAddressShardingjdbcCacheDAO.java  |  98 +++++
 .../dao/cache/ServiceNameShardingjdbcCacheDAO.java |  92 +++++
 ...bstractCpuMetricShardingjdbcPersistenceDAO.java |  75 ++++
 .../CpuDayMetricShardingjdbcPersistenceDAO.java    |  41 ++
 .../CpuHourMetricShardingjdbcPersistenceDAO.java   |  41 ++
 .../CpuMinuteMetricShardingjdbcPersistenceDAO.java |  41 ++
 .../CpuMonthMetricShardingjdbcPersistenceDAO.java  |  41 ++
 ...AbstractGCMetricShardingjdbcPersistenceDAO.java |  77 ++++
 .../gc/GCDayMetricShardingjdbcPersistenceDAO.java  |  41 ++
 .../gc/GCHourMetricShardingjdbcPersistenceDAO.java |  41 ++
 .../GCMinuteMetricShardingjdbcPersistenceDAO.java  |  41 ++
 .../GCMonthMetricShardingjdbcPersistenceDAO.java   |  41 ++
 ...ctInstanceMetricShardingjdbcPersistenceDAO.java |  74 ++++
 ...nstanceDayMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...stanceHourMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...anceMinuteMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...tanceMonthMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...tInstanceMappingShardingjdbcPersistenceDAO.java |  73 ++++
 ...stanceMappingDayShardingjdbcPersistenceDAO.java |  41 ++
 ...tanceMappingHourShardingjdbcPersistenceDAO.java |  41 ++
 ...nceMappingMinuteShardingjdbcPersistenceDAO.java |  41 ++
 ...anceMappingMonthShardingjdbcPersistenceDAO.java |  41 ++
 ...eReferenceMetricShardingjdbcPersistenceDAO.java |  79 ++++
 ...ferenceDayMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...erenceHourMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...enceMinuteMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...renceMonthMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...ractMemoryMetricShardingjdbcPersistenceDAO.java |  83 ++++
 .../MemoryDayMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...MemoryHourMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...moryMinuteMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...emoryMonthMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...MemoryPoolMetricShardingjdbcPersistenceDAO.java |  84 ++++
 ...oryPoolDayMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...ryPoolHourMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...PoolMinuteMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...yPoolMonthMetricShardingjdbcPersistenceDAO.java |  41 ++
 .../ApplicationRegisterShardingjdbcDAO.java        |  73 ++++
 .../register/InstanceRegisterShardingjdbcDAO.java  |  89 +++++
 .../NetworkAddressRegisterShardingjdbcDAO.java     |  91 +++++
 .../ServiceNameRegisterShardingjdbcDAO.java        |  72 ++++
 ...TimeDistributionShardingjdbcPersistenceDAO.java |  79 ++++
 ...eDistributionDayShardingjdbcPersistenceDAO.java |  41 ++
 ...DistributionHourShardingjdbcPersistenceDAO.java |  41 ++
 ...stributionMinuteShardingjdbcPersistenceDAO.java |  41 ++
 ...istributionMonthShardingjdbcPersistenceDAO.java |  41 ++
 ...actServiceMetricShardingjdbcPersistenceDAO.java |  77 ++++
 ...ServiceDayMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...erviceHourMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...viceMinuteMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...rviceMonthMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...eReferenceMetricShardingjdbcPersistenceDAO.java |  83 ++++
 ...ferenceDayMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...erenceHourMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...enceMinuteMetricShardingjdbcPersistenceDAO.java |  41 ++
 ...renceMonthMetricShardingjdbcPersistenceDAO.java |  41 ++
 .../ui/ApplicationAlarmListShardingjdbcUIDAO.java  |  81 ++++
 .../dao/ui/ApplicationAlarmShardingjdbcUIDAO.java  |  98 +++++
 .../ui/ApplicationComponentShardingjdbcUIDAO.java  |  80 ++++
 .../ui/ApplicationMappingShardingjdbcUIDAO.java    |  80 ++++
 .../dao/ui/ApplicationMetricShardingjdbcUIDAO.java | 138 +++++++
 ...pplicationReferenceMetricShardingjdbcUIDAO.java | 131 ++++++
 .../dao/ui/CpuMetricShardingjdbcUIDAO.java         |  80 ++++
 .../dao/ui/GCMetricShardingjdbcUIDAO.java          |  92 +++++
 .../dao/ui/GlobalTraceShardingjdbcUIDAO.java       |  95 +++++
 .../dao/ui/InstanceAlarmShardingjdbcUIDAO.java     |  96 +++++
 .../dao/ui/InstanceMetricShardingjdbcUIDAO.java    | 145 +++++++
 .../dao/ui/InstanceShardingjdbcUIDAO.java          | 216 ++++++++++
 .../dao/ui/MemoryMetricShardingjdbcUIDAO.java      |  98 +++++
 .../dao/ui/NetworkAddressShardingjdbcUIDAO.java    |  91 +++++
 .../ResponseTimeDistributionShardingjdbcUIDAO.java |  76 ++++
 .../dao/ui/SegmentDurationShardingjdbcUIDAO.java   | 155 ++++++++
 .../dao/ui/SegmentShardingjdbcUIDAO.java           |  73 ++++
 .../dao/ui/ServiceAlarmShardingjdbcUIDAO.java      |  96 +++++
 .../dao/ui/ServiceMetricShardingjdbcUIDAO.java     | 225 +++++++++++
 .../ui/ServiceNameServiceShardingjdbcUIDAO.java    |  92 +++++
 .../ServiceReferenceShardingjdbcMetricUIDAO.java   | 138 +++++++
 .../define/GlobalTraceShardingjdbcTableDefine.java |  40 ++
 .../SegmentDurationShardingjdbcTableDefine.java    |  46 +++
 .../define/SegmentShardingjdbcTableDefine.java     |  39 ++
 ...pplicationComponentShardingjdbcTableDefine.java |  41 ++
 ...icationComponentDayShardingjdbcTableDefine.java |  33 ++
 ...cationComponentHourShardingjdbcTableDefine.java |  33 ++
 ...tionComponentMinuteShardingjdbcTableDefine.java |  33 ++
 ...ationComponentMonthShardingjdbcTableDefine.java |  33 ++
 ...pplicationAlarmListShardingjdbcTableDefine.java |  43 ++
 ...icationAlarmListDayShardingjdbcTableDefine.java |  33 ++
 ...cationAlarmListHourShardingjdbcTableDefine.java |  33 ++
 ...tionAlarmListMinuteShardingjdbcTableDefine.java |  33 ++
 ...ationAlarmListMonthShardingjdbcTableDefine.java |  33 ++
 .../ApplicationAlarmShardingjdbcTableDefine.java   |  45 +++
 ...nReferenceAlarmListShardingjdbcTableDefine.java |  46 +++
 ...ationReferenceAlarmShardingjdbcTableDefine.java |  46 +++
 .../InstanceAlarmListShardingjdbcTableDefine.java  |  46 +++
 .../InstanceAlarmShardingjdbcTableDefine.java      |  46 +++
 ...eReferenceAlarmListShardingjdbcTableDefine.java |  48 +++
 ...tanceReferenceAlarmShardingjdbcTableDefine.java |  48 +++
 .../ServiceAlarmListShardingjdbcTableDefine.java   |  47 +++
 .../alarm/ServiceAlarmShardingjdbcTableDefine.java |  47 +++
 ...eReferenceAlarmListShardingjdbcTableDefine.java |  50 +++
 ...rviceReferenceAlarmShardingjdbcTableDefine.java |  50 +++
 ...ctApplicationMetricShardingjdbcTableDefine.java |  64 +++
 ...pplicationDayMetricShardingjdbcTableDefine.java |  33 ++
 ...plicationHourMetricShardingjdbcTableDefine.java |  33 ++
 ...icationMinuteMetricShardingjdbcTableDefine.java |  33 ++
 ...licationMonthMetricShardingjdbcTableDefine.java |  33 ++
 ...tApplicationMappingShardingjdbcTableDefine.java |  41 ++
 ...plicationMappingDayShardingjdbcTableDefine.java |  33 ++
 ...licationMappingHourShardingjdbcTableDefine.java |  33 ++
 ...cationMappingMinuteShardingjdbcTableDefine.java |  33 ++
 ...icationMappingMonthShardingjdbcTableDefine.java |  33 ++
 ...tionReferenceMetricShardingjdbcTableDefine.java |  64 +++
 ...nReferenceDayMetricShardingjdbcTableDefine.java |  33 ++
 ...ReferenceHourMetricShardingjdbcTableDefine.java |  33 ++
 ...ferenceMinuteMetricShardingjdbcTableDefine.java |  33 ++
 ...eferenceMonthMetricShardingjdbcTableDefine.java |  33 ++
 .../AbstractCpuMetricShardingjdbcTableDefine.java  |  42 ++
 .../cpu/CpuDayMetricShardingjdbcTableDefine.java   |  33 ++
 .../cpu/CpuHourMetricShardingjdbcTableDefine.java  |  33 ++
 .../CpuMinuteMetricShardingjdbcTableDefine.java    |  33 ++
 .../cpu/CpuMonthMetricShardingjdbcTableDefine.java |  33 ++
 .../AbstractGCMetricShardingjdbcTableDefine.java   |  43 ++
 .../gc/GCDayMetricShardingjdbcTableDefine.java     |  33 ++
 .../gc/GCHourMetricShardingjdbcTableDefine.java    |  33 ++
 .../gc/GCMinuteMetricShardingjdbcTableDefine.java  |  33 ++
 .../gc/GCMonthMetricShardingjdbcTableDefine.java   |  33 ++
 ...tractInstanceMetricShardingjdbcTableDefine.java |  61 +++
 .../InstanceDayMetricShardingjdbcTableDefine.java  |  33 ++
 .../InstanceHourMetricShardingjdbcTableDefine.java |  33 ++
 ...nstanceMinuteMetricShardingjdbcTableDefine.java |  33 ++
 ...InstanceMonthMetricShardingjdbcTableDefine.java |  33 ++
 ...ractInstanceMappingShardingjdbcTableDefine.java |  42 ++
 .../InstanceMappingDayShardingjdbcTableDefine.java |  33 ++
 ...InstanceMappingHourShardingjdbcTableDefine.java |  33 ++
 ...stanceMappingMinuteShardingjdbcTableDefine.java |  33 ++
 ...nstanceMappingMonthShardingjdbcTableDefine.java |  33 ++
 ...anceReferenceMetricShardingjdbcTableDefine.java |  63 +++
 ...eReferenceDayMetricShardingjdbcTableDefine.java |  34 ++
 ...ReferenceHourMetricShardingjdbcTableDefine.java |  34 ++
 ...ferenceMinuteMetricShardingjdbcTableDefine.java |  34 ++
 ...eferenceMonthMetricShardingjdbcTableDefine.java |  34 ++
 ...bstractMemoryMetricShardingjdbcTableDefine.java |  46 +++
 .../MemoryDayMetricShardingjdbcTableDefine.java    |  33 ++
 .../MemoryHourMetricShardingjdbcTableDefine.java   |  33 ++
 .../MemoryMinuteMetricShardingjdbcTableDefine.java |  33 ++
 .../MemoryMonthMetricShardingjdbcTableDefine.java  |  33 ++
 ...actMemoryPoolMetricShardingjdbcTableDefine.java |  46 +++
 ...MemoryPoolDayMetricShardingjdbcTableDefine.java |  33 ++
 ...emoryPoolHourMetricShardingjdbcTableDefine.java |  33 ++
 ...oryPoolMinuteMetricShardingjdbcTableDefine.java |  33 ++
 ...moryPoolMonthMetricShardingjdbcTableDefine.java |  33 ++
 .../ApplicationShardingjdbcTableDefine.java        |  41 ++
 .../register/InstanceShardingjdbcTableDefine.java  |  46 +++
 .../NetworkAddressShardingjdbcTableDefine.java     |  41 ++
 .../ServiceNameShardingjdbcTableDefine.java        |  44 +++
 ...nseTimeDistributionShardingjdbcTableDefine.java |  43 ++
 ...TimeDistributionDayShardingjdbcTableDefine.java |  33 ++
 ...imeDistributionHourShardingjdbcTableDefine.java |  33 ++
 ...eDistributionMinuteShardingjdbcTableDefine.java |  33 ++
 ...meDistributionMonthShardingjdbcTableDefine.java |  33 ++
 ...stractServiceMetricShardingjdbcTableDefine.java |  62 +++
 .../ServiceDayMetricShardingjdbcTableDefine.java   |  33 ++
 .../ServiceHourMetricShardingjdbcTableDefine.java  |  33 ++
 ...ServiceMinuteMetricShardingjdbcTableDefine.java |  33 ++
 .../ServiceMonthMetricShardingjdbcTableDefine.java |  33 ++
 ...viceReferenceMetricShardingjdbcTableDefine.java |  66 ++++
 ...eReferenceDayMetricShardingjdbcTableDefine.java |  33 ++
 ...ReferenceHourMetricShardingjdbcTableDefine.java |  33 ++
 ...ferenceMinuteMetricShardingjdbcTableDefine.java |  33 ++
 ...eferenceMonthMetricShardingjdbcTableDefine.java |  33 ++
 .../strategy/ShardingjdbcStrategy.java             | 198 ++++++++++
 .../main/resources/META-INF/defines/storage.define | 117 ++++++
 ...alking.apm.collector.core.module.ModuleProvider |  19 +
 apm-collector/apm-collector-storage/pom.xml        |   1 +
 apm-collector/pom.xml                              |  12 +
 apm-dist/release-docs/LICENSE                      |   3 +
 apm-dist/release-docs/NOTICE                       |  16 +
 .../release-docs/licenses/LICENSE-commons-dbcp.txt | 202 ++++++++++
 apm-dist/release-docs/licenses/LICENSE-groovy.txt  | 215 ++++++++++
 .../licenses/LICENSE-sharding-jdbc-core.txt        | 201 ++++++++++
 docs/README.md                                     |   1 +
 docs/README_ZH.md                                  |   1 +
 .../Use-ShardingJDBC-as-storage-implementor-CN.md  |  21 +
 docs/en/Use-ShardingJDBC-as-storage-implementor.md |  21 +
 243 files changed, 14051 insertions(+), 24 deletions(-)

diff --git a/apm-collector/apm-collector-boot/pom.xml b/apm-collector/apm-collector-boot/pom.xml
index 4bc2cc6..22981fc 100644
--- a/apm-collector/apm-collector-boot/pom.xml
+++ b/apm-collector/apm-collector-boot/pom.xml
@@ -146,6 +146,11 @@
             <artifactId>collector-storage-h2-provider</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.skywalking</groupId>
+            <artifactId>collector-storage-shardingjdbc-provider</artifactId>
+            <version>${project.version}</version>
+        </dependency>
         <!-- storage provider -->
         <!-- remote provider -->
         <dependency>
diff --git a/apm-collector/apm-collector-component/client-component/pom.xml b/apm-collector/apm-collector-component/client-component/pom.xml
index da21115..25cf79e 100644
--- a/apm-collector/apm-collector-component/client-component/pom.xml
+++ b/apm-collector/apm-collector-component/client-component/pom.xml
@@ -101,5 +101,13 @@
                 </exclusion>
             </exclusions>
         </dependency>
+        <dependency>
+            <groupId>io.shardingjdbc</groupId>
+            <artifactId>sharding-jdbc-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-dbcp</groupId>
+            <artifactId>commons-dbcp</artifactId>
+        </dependency>
     </dependencies>
 </project>
diff --git a/apm-collector/apm-collector-component/client-component/src/main/java/org/apache/skywalking/apm/collector/client/shardingjdbc/ShardingjdbcClient.java b/apm-collector/apm-collector-component/client-component/src/main/java/org/apache/skywalking/apm/collector/client/shardingjdbc/ShardingjdbcClient.java
new file mode 100644
index 0000000..0a2fd3b
--- /dev/null
+++ b/apm-collector/apm-collector-component/client-component/src/main/java/org/apache/skywalking/apm/collector/client/shardingjdbc/ShardingjdbcClient.java
@@ -0,0 +1,160 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+package org.apache.skywalking.apm.collector.client.shardingjdbc;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.sql.DataSource;
+
+import org.apache.commons.dbcp.BasicDataSource;
+import org.apache.skywalking.apm.collector.client.Client;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.shardingjdbc.core.api.ShardingDataSourceFactory;
+import io.shardingjdbc.core.api.config.ShardingRuleConfiguration;
+
+/**
+ * @author linjiaqi
+ */
+public class ShardingjdbcClient implements Client {
+
+    private final Logger logger = LoggerFactory.getLogger(ShardingjdbcClient.class);
+    
+    private Map<String, ShardingjdbcClientConfig> shardingjdbcClientConfig;
+    
+    private ShardingRuleConfiguration shardingRuleConfiguration;
+
+    private Map<String, DataSource> shardingDataSource = new HashMap<String, DataSource>();
+
+    private DataSource dataSource;
+
+    public ShardingjdbcClient(Map<String, ShardingjdbcClientConfig> shardingjdbcClientConfig, ShardingRuleConfiguration shardingRuleConfiguration) {
+        this.shardingjdbcClientConfig = shardingjdbcClientConfig;
+        this.shardingRuleConfiguration = shardingRuleConfiguration;
+    }
+
+    @Override public void initialize() throws ShardingjdbcClientException {
+        try {
+            shardingjdbcClientConfig.forEach((key, value) -> {
+                BasicDataSource basicDataSource = new BasicDataSource();
+                basicDataSource.setDriverClassName(value.getDriverClass());
+                basicDataSource.setUrl(value.getUrl());
+                basicDataSource.setUsername(value.getUserName());
+                basicDataSource.setPassword(value.getPassword());
+                shardingDataSource.put(key, basicDataSource);
+                logger.info("add sharding datasource: {}, url: {}", key, value.getUrl());
+            });
+            dataSource = ShardingDataSourceFactory.createDataSource(shardingDataSource, shardingRuleConfiguration,
+                    new HashMap<String, Object>(), new Properties());
+        } catch (Exception e) {
+            logger.error("case the exception is 'Cannot load JDBC driver class', please add the driver mysql-connector-java-5.1.36.jar to collector-libs manual");
+            throw new ShardingjdbcClientException(e.getMessage(), e);
+        }
+    }
+
+    @Override public void shutdown() {
+        
+    }
+
+    public Connection getConnection() throws SQLException {
+        return dataSource.getConnection();
+    }
+
+    public void execute(String sql) throws ShardingjdbcClientException {
+        Connection conn = null;
+        Statement statement = null;
+        try {
+            conn = getConnection();
+            statement = conn.createStatement();
+            statement.execute(sql);
+        } catch (SQLException e) {
+            throw new ShardingjdbcClientException(e.getMessage(), e);
+        } finally {
+            try {
+                if (statement != null) {
+                    statement.close();
+                }
+                if (conn != null) {
+                    conn.close();
+                }
+            } catch (SQLException e) {
+                throw new ShardingjdbcClientException(e.getMessage(), e);
+            }
+        }
+    }
+
+    public ResultSet executeQuery(String sql, Object[] params) throws ShardingjdbcClientException {
+        logger.debug("execute query with result: {}", sql);
+        ResultSet rs;
+        PreparedStatement statement;
+        try {
+            statement = getConnection().prepareStatement(sql);
+            if (params != null) {
+                for (int i = 0; i < params.length; i++) {
+                    statement.setObject(i + 1, params[i]);
+                }
+            }
+            rs = statement.executeQuery();
+        } catch (SQLException e) {
+            throw new ShardingjdbcClientException(e.getMessage(), e);
+        }
+        return rs;
+    }
+
+    public boolean execute(String sql, Object[] params) throws ShardingjdbcClientException {
+        logger.debug("execute insert/update/delete: {}", sql);
+        boolean flag;
+        Connection conn = null;
+        PreparedStatement statement = null;
+        try {
+            conn = getConnection();
+            conn.setAutoCommit(true);
+            statement = conn.prepareStatement(sql);
+            if (params != null) {
+                for (int i = 0; i < params.length; i++) {
+                    statement.setObject(i + 1, params[i]);
+                }
+            }
+            flag = statement.execute();
+        } catch (SQLException e) {
+            throw new ShardingjdbcClientException(e.getMessage(), e);
+        } finally {
+            try {
+                if (statement != null) {
+                    statement.close();
+                }
+                if (conn != null) {
+                    conn.close();
+                }
+            } catch (SQLException e) {
+                throw new ShardingjdbcClientException(e.getMessage(), e);
+            }
+        }
+        return flag;
+    }
+}
diff --git a/apm-collector/apm-collector-component/client-component/src/main/java/org/apache/skywalking/apm/collector/client/shardingjdbc/ShardingjdbcClientConfig.java b/apm-collector/apm-collector-component/client-component/src/main/java/org/apache/skywalking/apm/collector/client/shardingjdbc/ShardingjdbcClientConfig.java
new file mode 100644
index 0000000..5e132cb
--- /dev/null
+++ b/apm-collector/apm-collector-component/client-component/src/main/java/org/apache/skywalking/apm/collector/client/shardingjdbc/ShardingjdbcClientConfig.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+package org.apache.skywalking.apm.collector.client.shardingjdbc;
+
+import org.apache.skywalking.apm.collector.core.module.ModuleConfig;
+
+/**
+ * @author linjiaqi
+ */
+public class ShardingjdbcClientConfig extends ModuleConfig {
+    
+    private String driverClass;
+    private String url;
+    private String userName;
+    private String password;
+    
+    public ShardingjdbcClientConfig() {
+        
+    }
+    
+    public ShardingjdbcClientConfig(String driverClass, String url, String username, String password) {
+        this.driverClass = driverClass;
+        this.url = url;
+        this.userName = username;
+        this.password = password;
+    }
+
+    public String getDriverClass() {
+        return driverClass;
+    }
+
+    public void setDriverClass(String driverClass) {
+        this.driverClass = driverClass;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+}
diff --git a/apm-collector/apm-collector-component/client-component/src/main/java/org/apache/skywalking/apm/collector/client/shardingjdbc/ShardingjdbcClientException.java b/apm-collector/apm-collector-component/client-component/src/main/java/org/apache/skywalking/apm/collector/client/shardingjdbc/ShardingjdbcClientException.java
new file mode 100644
index 0000000..6b99dd9
--- /dev/null
+++ b/apm-collector/apm-collector-component/client-component/src/main/java/org/apache/skywalking/apm/collector/client/shardingjdbc/ShardingjdbcClientException.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+package org.apache.skywalking.apm.collector.client.shardingjdbc;
+
+import org.apache.skywalking.apm.collector.client.ClientException;
+
+/**
+ * @author linjiaqi
+ */
+public class ShardingjdbcClientException extends ClientException {
+
+    public ShardingjdbcClientException(String message) {
+        super(message);
+    }
+
+    public ShardingjdbcClientException(String message, Throwable cause) {
+        super(message, cause);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/pom.xml b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/pom.xml
similarity index 59%
copy from apm-collector/apm-collector-storage/pom.xml
copy to apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/pom.xml
index ca1e25e..35133a5 100644
--- a/apm-collector/apm-collector-storage/pom.xml
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/pom.xml
@@ -20,39 +20,19 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>apm-collector</artifactId>
+        <artifactId>apm-collector-storage</artifactId>
         <groupId>org.apache.skywalking</groupId>
         <version>5.0.0-beta2-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>apm-collector-storage</artifactId>
-    <packaging>pom</packaging>
-    <modules>
-        <module>collector-storage-define</module>
-        <module>collector-storage-es-provider</module>
-        <module>collector-storage-h2-provider</module>
-    </modules>
+    <artifactId>collector-storage-shardingjdbc-provider</artifactId>
+    <packaging>jar</packaging>
 
     <dependencies>
         <dependency>
             <groupId>org.apache.skywalking</groupId>
-            <artifactId>apm-collector-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.skywalking</groupId>
-            <artifactId>client-component</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.skywalking</groupId>
-            <artifactId>collector-configuration-define</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.skywalking</groupId>
-            <artifactId>collector-remote-define</artifactId>
+            <artifactId>collector-storage-define</artifactId>
             <version>${project.version}</version>
         </dependency>
     </dependencies>
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/MetricTransformUtil.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/MetricTransformUtil.java
new file mode 100644
index 0000000..8e87ee7
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/MetricTransformUtil.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.storage.table.Metric;
+import org.apache.skywalking.apm.collector.storage.table.MetricColumns;
+
+/**
+ * @author linjiaqi
+ */
+public enum MetricTransformUtil {
+    INSTANCE;
+
+    public void shardingjdbcDataToStreamData(ResultSet source, Metric target) throws SQLException {
+        target.setSourceValue(source.getInt(MetricColumns.SOURCE_VALUE.getName()));
+        target.setTimeBucket(source.getLong(MetricColumns.TIME_BUCKET.getName()));
+
+        target.setTransactionCalls(source.getLong(MetricColumns.TRANSACTION_CALLS.getName()));
+        target.setTransactionErrorCalls(source.getLong(MetricColumns.TRANSACTION_ERROR_CALLS.getName()));
+        target.setTransactionDurationSum(source.getLong(MetricColumns.TRANSACTION_DURATION_SUM.getName()));
+        target.setTransactionErrorDurationSum(source.getLong(MetricColumns.TRANSACTION_ERROR_DURATION_SUM.getName()));
+        target.setTransactionAverageDuration(source.getLong(MetricColumns.TRANSACTION_AVERAGE_DURATION.getName()));
+
+        target.setBusinessTransactionCalls(source.getLong(MetricColumns.BUSINESS_TRANSACTION_CALLS.getName()));
+        target.setBusinessTransactionErrorCalls(source.getLong(MetricColumns.BUSINESS_TRANSACTION_ERROR_CALLS.getName()));
+        target.setBusinessTransactionDurationSum(source.getLong(MetricColumns.BUSINESS_TRANSACTION_DURATION_SUM.getName()));
+        target.setBusinessTransactionErrorDurationSum(source.getLong(MetricColumns.BUSINESS_TRANSACTION_ERROR_DURATION_SUM.getName()));
+        target.setBusinessTransactionAverageDuration(source.getLong(MetricColumns.BUSINESS_TRANSACTION_AVERAGE_DURATION.getName()));
+
+        target.setMqTransactionCalls(source.getLong(MetricColumns.MQ_TRANSACTION_CALLS.getName()));
+        target.setMqTransactionErrorCalls(source.getLong(MetricColumns.MQ_TRANSACTION_ERROR_CALLS.getName()));
+        target.setMqTransactionDurationSum(source.getLong(MetricColumns.MQ_TRANSACTION_DURATION_SUM.getName()));
+        target.setMqTransactionErrorDurationSum(source.getLong(MetricColumns.MQ_TRANSACTION_ERROR_DURATION_SUM.getName()));
+        target.setMqTransactionAverageDuration(source.getLong(MetricColumns.MQ_TRANSACTION_AVERAGE_DURATION.getName()));
+    }
+
+    public void streamDataToShardingjdbcData(Metric source, Map<String, Object> target) {
+        target.put(MetricColumns.SOURCE_VALUE.getName(), source.getSourceValue());
+        target.put(MetricColumns.TIME_BUCKET.getName(), source.getTimeBucket());
+
+        target.put(MetricColumns.TRANSACTION_CALLS.getName(), source.getTransactionCalls());
+        target.put(MetricColumns.TRANSACTION_ERROR_CALLS.getName(), source.getTransactionErrorCalls());
+        target.put(MetricColumns.TRANSACTION_DURATION_SUM.getName(), source.getTransactionDurationSum());
+        target.put(MetricColumns.TRANSACTION_ERROR_DURATION_SUM.getName(), source.getTransactionErrorDurationSum());
+        target.put(MetricColumns.TRANSACTION_AVERAGE_DURATION.getName(), source.getTransactionAverageDuration());
+
+        target.put(MetricColumns.BUSINESS_TRANSACTION_CALLS.getName(), source.getBusinessTransactionCalls());
+        target.put(MetricColumns.BUSINESS_TRANSACTION_ERROR_CALLS.getName(), source.getBusinessTransactionErrorCalls());
+        target.put(MetricColumns.BUSINESS_TRANSACTION_DURATION_SUM.getName(), source.getBusinessTransactionDurationSum());
+        target.put(MetricColumns.BUSINESS_TRANSACTION_ERROR_DURATION_SUM.getName(), source.getBusinessTransactionErrorDurationSum());
+        target.put(MetricColumns.BUSINESS_TRANSACTION_AVERAGE_DURATION.getName(), source.getBusinessTransactionAverageDuration());
+
+        target.put(MetricColumns.MQ_TRANSACTION_CALLS.getName(), source.getMqTransactionCalls());
+        target.put(MetricColumns.MQ_TRANSACTION_ERROR_CALLS.getName(), source.getMqTransactionErrorCalls());
+        target.put(MetricColumns.MQ_TRANSACTION_DURATION_SUM.getName(), source.getMqTransactionDurationSum());
+        target.put(MetricColumns.MQ_TRANSACTION_ERROR_DURATION_SUM.getName(), source.getMqTransactionErrorDurationSum());
+        target.put(MetricColumns.MQ_TRANSACTION_AVERAGE_DURATION.getName(), source.getMqTransactionAverageDuration());
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/StorageModuleShardingjdbcConfig.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/StorageModuleShardingjdbcConfig.java
new file mode 100644
index 0000000..e850678
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/StorageModuleShardingjdbcConfig.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientConfig;
+
+/**
+ * @author linjiaqi
+ */
+class StorageModuleShardingjdbcConfig extends ShardingjdbcClientConfig {
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/StorageModuleShardingjdbcProvider.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/StorageModuleShardingjdbcProvider.java
new file mode 100644
index 0000000..627640e
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/StorageModuleShardingjdbcProvider.java
@@ -0,0 +1,440 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc;
+
+import io.shardingjdbc.core.api.config.ShardingRuleConfiguration;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientConfig;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.cluster.ClusterModule;
+import org.apache.skywalking.apm.collector.configuration.ConfigurationModule;
+import org.apache.skywalking.apm.collector.core.module.ModuleConfig;
+import org.apache.skywalking.apm.collector.core.module.ModuleDefine;
+import org.apache.skywalking.apm.collector.core.module.ModuleProvider;
+import org.apache.skywalking.apm.collector.core.module.ServiceNotProvidedException;
+import org.apache.skywalking.apm.collector.remote.RemoteModule;
+import org.apache.skywalking.apm.collector.storage.StorageException;
+import org.apache.skywalking.apm.collector.storage.StorageModule;
+import org.apache.skywalking.apm.collector.storage.base.dao.IBatchDAO;
+import org.apache.skywalking.apm.collector.storage.dao.IGlobalTracePersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.IInstanceHeartBeatPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.ISegmentDurationPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.ISegmentPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.acp.IApplicationComponentDayPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.acp.IApplicationComponentHourPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.acp.IApplicationComponentMinutePersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.acp.IApplicationComponentMonthPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IApplicationAlarmListDayPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IApplicationAlarmListHourPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IApplicationAlarmListMinutePersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IApplicationAlarmListMonthPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IApplicationAlarmPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IApplicationReferenceAlarmListPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IApplicationReferenceAlarmPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IInstanceAlarmListPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IInstanceAlarmPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IInstanceReferenceAlarmListPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IInstanceReferenceAlarmPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IServiceAlarmListPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IServiceAlarmPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IServiceReferenceAlarmListPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IServiceReferenceAlarmPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.amp.IApplicationDayMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.amp.IApplicationHourMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.amp.IApplicationMinuteMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.amp.IApplicationMonthMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.ampp.IApplicationMappingDayPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.ampp.IApplicationMappingHourPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.ampp.IApplicationMappingMinutePersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.ampp.IApplicationMappingMonthPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.armp.IApplicationReferenceDayMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.armp.IApplicationReferenceHourMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.armp.IApplicationReferenceMinuteMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.armp.IApplicationReferenceMonthMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.cache.IApplicationCacheDAO;
+import org.apache.skywalking.apm.collector.storage.dao.cache.IInstanceCacheDAO;
+import org.apache.skywalking.apm.collector.storage.dao.cache.INetworkAddressCacheDAO;
+import org.apache.skywalking.apm.collector.storage.dao.cache.IServiceNameCacheDAO;
+import org.apache.skywalking.apm.collector.storage.dao.cpu.ICpuDayMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.cpu.ICpuHourMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.cpu.ICpuMinuteMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.cpu.ICpuMonthMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.gc.IGCDayMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.gc.IGCHourMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.gc.IGCMinuteMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.gc.IGCMonthMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.imp.IInstanceDayMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.imp.IInstanceHourMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.imp.IInstanceMinuteMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.imp.IInstanceMonthMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.impp.IInstanceMappingDayPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.impp.IInstanceMappingHourPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.impp.IInstanceMappingMinutePersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.impp.IInstanceMappingMonthPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.irmp.IInstanceReferenceDayMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.irmp.IInstanceReferenceHourMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.irmp.IInstanceReferenceMinuteMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.irmp.IInstanceReferenceMonthMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.memory.IMemoryDayMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.memory.IMemoryHourMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.memory.IMemoryMinuteMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.memory.IMemoryMonthMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.mpool.IMemoryPoolDayMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.mpool.IMemoryPoolHourMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.mpool.IMemoryPoolMinuteMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.mpool.IMemoryPoolMonthMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.register.IApplicationRegisterDAO;
+import org.apache.skywalking.apm.collector.storage.dao.register.IInstanceRegisterDAO;
+import org.apache.skywalking.apm.collector.storage.dao.register.INetworkAddressRegisterDAO;
+import org.apache.skywalking.apm.collector.storage.dao.register.IServiceNameRegisterDAO;
+import org.apache.skywalking.apm.collector.storage.dao.rtd.IResponseTimeDistributionDayPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.rtd.IResponseTimeDistributionHourPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.rtd.IResponseTimeDistributionMinutePersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.rtd.IResponseTimeDistributionMonthPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.smp.IServiceDayMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.smp.IServiceHourMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.smp.IServiceMinuteMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.smp.IServiceMonthMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.srmp.IServiceReferenceDayMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.srmp.IServiceReferenceHourMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.srmp.IServiceReferenceMinuteMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.srmp.IServiceReferenceMonthMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.dao.ui.*;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.BatchShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcStorageInstaller;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.GlobalTraceShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.InstanceHeartBeatShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.SegmentDurationShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.SegmentShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.acp.ApplicationComponentDayShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.acp.ApplicationComponentHourShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.acp.ApplicationComponentMinuteShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.acp.ApplicationComponentMonthShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm.ApplicationAlarmListShardingjdbcDayPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm.ApplicationAlarmListShardingjdbcHourPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm.ApplicationAlarmListShardingjdbcMinutePersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm.ApplicationAlarmListShardingjdbcMonthPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm.ApplicationAlarmShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm.ApplicationReferenceAlarmListShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm.ApplicationReferenceAlarmShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm.InstanceAlarmListShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm.InstanceAlarmShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm.InstanceReferenceAlarmListShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm.InstanceReferenceAlarmShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm.ServiceAlarmListShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm.ServiceAlarmShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm.ServiceReferenceAlarmListShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm.ServiceReferenceAlarmShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.amp.ApplicationDayMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.amp.ApplicationHourMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.amp.ApplicationMinuteMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.amp.ApplicationMonthMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ampp.ApplicationMappingDayShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ampp.ApplicationMappingHourShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ampp.ApplicationMappingMinuteShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ampp.ApplicationMappingMonthShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.armp.ApplicationReferenceDayMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.armp.ApplicationReferenceHourMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.armp.ApplicationReferenceMinuteMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.armp.ApplicationReferenceMonthMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.cache.ApplicationShardingjdbcCacheDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.cache.InstanceShardingjdbcCacheDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.cache.NetworkAddressShardingjdbcCacheDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.cache.ServiceNameShardingjdbcCacheDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.cpu.CpuDayMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.cpu.CpuHourMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.cpu.CpuMinuteMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.cpu.CpuMonthMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.gc.GCDayMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.gc.GCHourMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.gc.GCMinuteMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.gc.GCMonthMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.imp.InstanceDayMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.imp.InstanceHourMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.imp.InstanceMinuteMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.imp.InstanceMonthMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.impp.InstanceMappingDayShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.impp.InstanceMappingHourShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.impp.InstanceMappingMinuteShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.impp.InstanceMappingMonthShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.irmp.InstanceReferenceDayMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.irmp.InstanceReferenceHourMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.irmp.InstanceReferenceMinuteMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.irmp.InstanceReferenceMonthMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.memory.MemoryDayMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.memory.MemoryHourMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.memory.MemoryMinuteMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.memory.MemoryMonthMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.mpool.MemoryPoolDayMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.mpool.MemoryPoolHourMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.mpool.MemoryPoolMinuteMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.mpool.MemoryPoolMonthMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.register.ApplicationRegisterShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.register.InstanceRegisterShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.register.NetworkAddressRegisterShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.register.ServiceNameRegisterShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.rtd.ResponseTimeDistributionDayShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.rtd.ResponseTimeDistributionHourShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.rtd.ResponseTimeDistributionMinuteShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.rtd.ResponseTimeDistributionMonthShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.smp.ServiceDayMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.smp.ServiceHourMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.smp.ServiceMinuteMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.smp.ServiceMonthMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.srmp.ServiceReferenceDayMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.srmp.ServiceReferenceHourMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.srmp.ServiceReferenceMinuteMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.srmp.ServiceReferenceMonthMetricShardingjdbcPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ui.*;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.strategy.ShardingjdbcStrategy;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author linjiaqi
+ */
+public class StorageModuleShardingjdbcProvider extends ModuleProvider {
+    
+    private static final Logger logger = LoggerFactory.getLogger(StorageModuleShardingjdbcProvider.class);
+    
+    private ShardingjdbcClient shardingjdbcClient;
+    private final StorageModuleShardingjdbcConfig config;
+    
+    public StorageModuleShardingjdbcProvider() {
+        this.config = new StorageModuleShardingjdbcConfig();
+    }
+    
+    @Override
+    public String name() {
+        return "shardingjdbc";
+    }
+    
+    @Override
+    public Class<? extends ModuleDefine> module() {
+        return StorageModule.class;
+    }
+    
+    @Override
+    public ModuleConfig createConfigBeanIfAbsent() {
+        return config;
+    }
+    
+    @Override
+    public void prepare() throws ServiceNotProvidedException {
+        Map<String, ShardingjdbcClientConfig> shardingjdbcClientConfigs = createShardingjdbcClientConfigs();
+        ShardingRuleConfiguration shardingRuleConfig = createShardingRule(shardingjdbcClientConfigs.size());
+        shardingjdbcClient = new ShardingjdbcClient(shardingjdbcClientConfigs, shardingRuleConfig);
+        
+        this.registerServiceImplementation(IBatchDAO.class, new BatchShardingjdbcDAO(shardingjdbcClient));
+        registerCacheDAO();
+        registerRegisterDAO();
+        registerPersistenceDAO();
+        registerUiDAO();
+        registerAlarmDAO();
+    }
+    
+    @Override
+    public void start() {
+        try {
+            shardingjdbcClient.initialize();
+            
+            ShardingjdbcStorageInstaller installer = new ShardingjdbcStorageInstaller(false);
+            installer.install(shardingjdbcClient);
+        } catch (ShardingjdbcClientException | StorageException e) {
+            logger.error(e.getMessage(), e);
+        }
+    }
+    
+    @Override
+    public void notifyAfterCompleted() {
+    }
+    
+    @Override
+    public String[] requiredModules() {
+        return new String[]{ClusterModule.NAME, ConfigurationModule.NAME, RemoteModule.NAME};
+    }
+    
+    private Map<String, ShardingjdbcClientConfig> createShardingjdbcClientConfigs() {
+        Map<String, ShardingjdbcClientConfig> shardingjdbcClientConfigs = new HashMap<String, ShardingjdbcClientConfig>();
+        if (StringUtils.isEmpty(config.getUrl())) {
+            return shardingjdbcClientConfigs;
+        }
+        String driverClass = config.getDriverClass();
+        String[] url = config.getUrl().split(",");
+        String[] userName = config.getUserName().split(",");
+        String[] password = config.getPassword().split(",");
+        for (int i = 0; i < url.length; i++) {
+            shardingjdbcClientConfigs.put(ShardingjdbcStrategy.SHARDING_DS_PREFIX + i, new ShardingjdbcClientConfig(driverClass, url[i].trim(), userName[i].trim(), password[i].trim()));
+            logger.info("create datasource: {}, url: {}", ShardingjdbcStrategy.SHARDING_DS_PREFIX + i, url[i].trim());
+        }
+        return shardingjdbcClientConfigs;
+    }
+    
+    private ShardingRuleConfiguration createShardingRule(int shardingNodeSize) {
+        ShardingjdbcStrategy strategy = new ShardingjdbcStrategy(shardingNodeSize);
+        ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
+        shardingRuleConfig.getTableRuleConfigs().addAll(strategy.tableRules());
+        shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(strategy.defaultDatabaseSharding());
+        return shardingRuleConfig;
+    }
+    
+    private void registerCacheDAO() throws ServiceNotProvidedException {
+        this.registerServiceImplementation(IApplicationCacheDAO.class, new ApplicationShardingjdbcCacheDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IInstanceCacheDAO.class, new InstanceShardingjdbcCacheDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IServiceNameCacheDAO.class, new ServiceNameShardingjdbcCacheDAO(shardingjdbcClient));
+        this.registerServiceImplementation(INetworkAddressCacheDAO.class, new NetworkAddressShardingjdbcCacheDAO(shardingjdbcClient));
+    }
+    
+    private void registerRegisterDAO() throws ServiceNotProvidedException {
+        this.registerServiceImplementation(INetworkAddressRegisterDAO.class, new NetworkAddressRegisterShardingjdbcDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationRegisterDAO.class, new ApplicationRegisterShardingjdbcDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IInstanceRegisterDAO.class, new InstanceRegisterShardingjdbcDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IServiceNameRegisterDAO.class, new ServiceNameRegisterShardingjdbcDAO(shardingjdbcClient));
+    }
+    
+    private void registerPersistenceDAO() throws ServiceNotProvidedException {
+        this.registerServiceImplementation(ICpuMinuteMetricPersistenceDAO.class, new CpuMinuteMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(ICpuHourMetricPersistenceDAO.class, new CpuHourMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(ICpuDayMetricPersistenceDAO.class, new CpuDayMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(ICpuMonthMetricPersistenceDAO.class, new CpuMonthMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(IGCMinuteMetricPersistenceDAO.class, new GCMinuteMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IGCHourMetricPersistenceDAO.class, new GCHourMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IGCDayMetricPersistenceDAO.class, new GCDayMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IGCMonthMetricPersistenceDAO.class, new GCMonthMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(IMemoryMinuteMetricPersistenceDAO.class, new MemoryMinuteMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IMemoryHourMetricPersistenceDAO.class, new MemoryHourMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IMemoryDayMetricPersistenceDAO.class, new MemoryDayMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IMemoryMonthMetricPersistenceDAO.class, new MemoryMonthMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(IMemoryPoolMinuteMetricPersistenceDAO.class, new MemoryPoolMinuteMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IMemoryPoolHourMetricPersistenceDAO.class, new MemoryPoolHourMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IMemoryPoolDayMetricPersistenceDAO.class, new MemoryPoolDayMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IMemoryPoolMonthMetricPersistenceDAO.class, new MemoryPoolMonthMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(IGlobalTracePersistenceDAO.class, new GlobalTraceShardingjdbcPersistenceDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(IResponseTimeDistributionMinutePersistenceDAO.class, new ResponseTimeDistributionMinuteShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IResponseTimeDistributionHourPersistenceDAO.class, new ResponseTimeDistributionHourShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IResponseTimeDistributionDayPersistenceDAO.class, new ResponseTimeDistributionDayShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IResponseTimeDistributionMonthPersistenceDAO.class, new ResponseTimeDistributionMonthShardingjdbcPersistenceDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(ISegmentDurationPersistenceDAO.class, new SegmentDurationShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(ISegmentPersistenceDAO.class, new SegmentShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IInstanceHeartBeatPersistenceDAO.class, new InstanceHeartBeatShardingjdbcPersistenceDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(IApplicationComponentMinutePersistenceDAO.class, new ApplicationComponentMinuteShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationComponentHourPersistenceDAO.class, new ApplicationComponentHourShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationComponentDayPersistenceDAO.class, new ApplicationComponentDayShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationComponentMonthPersistenceDAO.class, new ApplicationComponentMonthShardingjdbcPersistenceDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(IApplicationMappingMinutePersistenceDAO.class, new ApplicationMappingMinuteShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationMappingHourPersistenceDAO.class, new ApplicationMappingHourShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationMappingDayPersistenceDAO.class, new ApplicationMappingDayShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationMappingMonthPersistenceDAO.class, new ApplicationMappingMonthShardingjdbcPersistenceDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(IInstanceMappingMinutePersistenceDAO.class, new InstanceMappingMinuteShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IInstanceMappingHourPersistenceDAO.class, new InstanceMappingHourShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IInstanceMappingDayPersistenceDAO.class, new InstanceMappingDayShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IInstanceMappingMonthPersistenceDAO.class, new InstanceMappingMonthShardingjdbcPersistenceDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(IApplicationMinuteMetricPersistenceDAO.class, new ApplicationMinuteMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationHourMetricPersistenceDAO.class, new ApplicationHourMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationDayMetricPersistenceDAO.class, new ApplicationDayMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationMonthMetricPersistenceDAO.class, new ApplicationMonthMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(IApplicationReferenceMinuteMetricPersistenceDAO.class, new ApplicationReferenceMinuteMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationReferenceHourMetricPersistenceDAO.class, new ApplicationReferenceHourMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationReferenceDayMetricPersistenceDAO.class, new ApplicationReferenceDayMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationReferenceMonthMetricPersistenceDAO.class, new ApplicationReferenceMonthMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(IInstanceMinuteMetricPersistenceDAO.class, new InstanceMinuteMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IInstanceHourMetricPersistenceDAO.class, new InstanceHourMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IInstanceDayMetricPersistenceDAO.class, new InstanceDayMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IInstanceMonthMetricPersistenceDAO.class, new InstanceMonthMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(IInstanceReferenceMinuteMetricPersistenceDAO.class, new InstanceReferenceMinuteMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IInstanceReferenceHourMetricPersistenceDAO.class, new InstanceReferenceHourMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IInstanceReferenceDayMetricPersistenceDAO.class, new InstanceReferenceDayMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IInstanceReferenceMonthMetricPersistenceDAO.class, new InstanceReferenceMonthMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(IServiceMinuteMetricPersistenceDAO.class, new ServiceMinuteMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IServiceHourMetricPersistenceDAO.class, new ServiceHourMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IServiceDayMetricPersistenceDAO.class, new ServiceDayMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IServiceMonthMetricPersistenceDAO.class, new ServiceMonthMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(IServiceReferenceMinuteMetricPersistenceDAO.class, new ServiceReferenceMinuteMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IServiceReferenceHourMetricPersistenceDAO.class, new ServiceReferenceHourMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IServiceReferenceDayMetricPersistenceDAO.class, new ServiceReferenceDayMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IServiceReferenceMonthMetricPersistenceDAO.class, new ServiceReferenceMonthMetricShardingjdbcPersistenceDAO(shardingjdbcClient));
+    }
+    
+    private void registerUiDAO() throws ServiceNotProvidedException {
+        this.registerServiceImplementation(IInstanceUIDAO.class, new InstanceShardingjdbcUIDAO(shardingjdbcClient));
+        this.registerServiceImplementation(INetworkAddressUIDAO.class, new NetworkAddressShardingjdbcUIDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IServiceNameServiceUIDAO.class, new ServiceNameServiceShardingjdbcUIDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IServiceMetricUIDAO.class, new ServiceMetricShardingjdbcUIDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(ICpuMetricUIDAO.class, new CpuMetricShardingjdbcUIDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IGCMetricUIDAO.class, new GCMetricShardingjdbcUIDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IMemoryMetricUIDAO.class, new MemoryMetricShardingjdbcUIDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(IGlobalTraceUIDAO.class, new GlobalTraceShardingjdbcUIDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IInstanceMetricUIDAO.class, new InstanceMetricShardingjdbcUIDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationComponentUIDAO.class, new ApplicationComponentShardingjdbcUIDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationMappingUIDAO.class, new ApplicationMappingShardingjdbcUIDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationMetricUIDAO.class, new ApplicationMetricShardingjdbcUIDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationReferenceMetricUIDAO.class, new ApplicationReferenceMetricShardingjdbcUIDAO(shardingjdbcClient));
+        this.registerServiceImplementation(ISegmentDurationUIDAO.class, new SegmentDurationShardingjdbcUIDAO(shardingjdbcClient));
+        this.registerServiceImplementation(ISegmentUIDAO.class, new SegmentShardingjdbcUIDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IServiceReferenceMetricUIDAO.class, new ServiceReferenceShardingjdbcMetricUIDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(IApplicationAlarmUIDAO.class, new ApplicationAlarmShardingjdbcUIDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IInstanceAlarmUIDAO.class, new InstanceAlarmShardingjdbcUIDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IServiceAlarmUIDAO.class, new ServiceAlarmShardingjdbcUIDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(IApplicationAlarmListUIDAO.class, new ApplicationAlarmListShardingjdbcUIDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IResponseTimeDistributionUIDAO.class, new ResponseTimeDistributionShardingjdbcUIDAO(shardingjdbcClient));
+    }
+    
+    private void registerAlarmDAO() throws ServiceNotProvidedException {
+        this.registerServiceImplementation(IServiceReferenceAlarmPersistenceDAO.class, new ServiceReferenceAlarmShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IServiceReferenceAlarmListPersistenceDAO.class, new ServiceReferenceAlarmListShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IInstanceReferenceAlarmPersistenceDAO.class, new InstanceReferenceAlarmShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IInstanceReferenceAlarmListPersistenceDAO.class, new InstanceReferenceAlarmListShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationReferenceAlarmPersistenceDAO.class, new ApplicationReferenceAlarmShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationReferenceAlarmListPersistenceDAO.class, new ApplicationReferenceAlarmListShardingjdbcPersistenceDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(IServiceAlarmPersistenceDAO.class, new ServiceAlarmShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IServiceAlarmListPersistenceDAO.class, new ServiceAlarmListShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IInstanceAlarmPersistenceDAO.class, new InstanceAlarmShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IInstanceAlarmListPersistenceDAO.class, new InstanceAlarmListShardingjdbcPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationAlarmPersistenceDAO.class, new ApplicationAlarmShardingjdbcPersistenceDAO(shardingjdbcClient));
+        
+        this.registerServiceImplementation(IApplicationAlarmListMinutePersistenceDAO.class, new ApplicationAlarmListShardingjdbcMinutePersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationAlarmListHourPersistenceDAO.class, new ApplicationAlarmListShardingjdbcHourPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationAlarmListDayPersistenceDAO.class, new ApplicationAlarmListShardingjdbcDayPersistenceDAO(shardingjdbcClient));
+        this.registerServiceImplementation(IApplicationAlarmListMonthPersistenceDAO.class, new ApplicationAlarmListShardingjdbcMonthPersistenceDAO(shardingjdbcClient));
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/dao/AbstractPersistenceShardingjdbcDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/dao/AbstractPersistenceShardingjdbcDAO.java
new file mode 100644
index 0000000..341e37a
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/dao/AbstractPersistenceShardingjdbcDAO.java
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.core.data.CommonTable;
+import org.apache.skywalking.apm.collector.core.data.StreamData;
+import org.apache.skywalking.apm.collector.storage.base.dao.IPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public abstract class AbstractPersistenceShardingjdbcDAO<STREAM_DATA extends StreamData> extends ShardingjdbcDAO implements IPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, STREAM_DATA> {
+
+    private static final Logger logger = LoggerFactory.getLogger(AbstractPersistenceShardingjdbcDAO.class);
+
+    public AbstractPersistenceShardingjdbcDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    private static final String GET_SQL = "select * from {0} where {1} = ?";
+
+    protected abstract STREAM_DATA shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException;
+
+    protected abstract String tableName();
+
+    @Override public STREAM_DATA get(String id) {
+        String sql = SqlBuilder.buildSql(GET_SQL, tableName(), CommonTable.ID.getName());
+
+        Object[] params = new Object[] {id};
+        try (
+                ResultSet rs = getClient().executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            if (rs.next()) {
+                return shardingjdbcDataToStreamData(rs);
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return null;
+    }
+
+    protected abstract Map<String, Object> streamDataToShardingjdbcData(STREAM_DATA streamData);
+
+    @Override public final ShardingjdbcSqlEntity prepareBatchInsert(STREAM_DATA streamData) {
+        Map<String, Object> source = streamDataToShardingjdbcData(streamData);
+        source.put(CommonTable.ID.getName(), streamData.getId());
+
+        ShardingjdbcSqlEntity entity = new ShardingjdbcSqlEntity();
+
+        String sql = SqlBuilder.buildBatchInsertSql(tableName(), source.keySet());
+        entity.setSql(sql);
+        entity.setParams(source.values().toArray(new Object[0]));
+        return entity;
+    }
+
+    @Override public final ShardingjdbcSqlEntity prepareBatchUpdate(STREAM_DATA streamData) {
+        Map<String, Object> source = streamDataToShardingjdbcData(streamData);
+
+        ShardingjdbcSqlEntity entity = new ShardingjdbcSqlEntity();
+        String sql = SqlBuilder.buildBatchUpdateSql(tableName(), source.keySet(), CommonTable.ID.getName());
+        entity.setSql(sql);
+        List<Object> values = new ArrayList<>(source.values());
+        values.add(streamData.getId());
+        entity.setParams(values.toArray(new Object[0]));
+        return entity;
+    }
+    
+    protected abstract String timeBucketColumnNameForDelete();
+
+    @Override public void deleteHistory(Long timeBucketBefore) {
+        ShardingjdbcClient client = getClient();
+        
+        String dynamicSql = "delete from {0} where {1} <= ?";
+        String sql = SqlBuilder.buildSql(dynamicSql, tableName(), timeBucketColumnNameForDelete());
+        
+        Object[] params = new Object[] {timeBucketBefore};
+        
+        try {
+            client.execute(sql, params);
+            logger.info("Deleted history rows from {} table.", tableName());
+        } catch (ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/dao/BatchShardingjdbcDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/dao/BatchShardingjdbcDAO.java
new file mode 100644
index 0000000..39070ec
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/dao/BatchShardingjdbcDAO.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.storage.base.dao.IBatchDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class BatchShardingjdbcDAO extends ShardingjdbcDAO implements IBatchDAO {
+
+    private static final Logger logger = LoggerFactory.getLogger(BatchShardingjdbcDAO.class);
+
+    public BatchShardingjdbcDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override
+    public void batchPersistence(List<?> batchCollection) {
+        if (batchCollection != null && batchCollection.size() > 0) {
+            logger.debug("the batch collection size is {}", batchCollection.size());
+            Connection conn;
+            final Map<String, PreparedStatement> batchSqls = new HashMap<>();
+            try {
+                conn = getClient().getConnection();
+                conn.setAutoCommit(true);
+                PreparedStatement ps;
+                for (Object entity : batchCollection) {
+                    ShardingjdbcSqlEntity e = getShardingjdbcSqlEntity(entity);
+                    String sql = e.getSql();
+                    if (batchSqls.containsKey(sql)) {
+                        ps = batchSqls.get(sql);
+                    } else {
+                        ps = conn.prepareStatement(sql);
+                        batchSqls.put(sql, ps);
+                    }
+
+                    Object[] params = e.getParams();
+                    if (params != null) {
+                        logger.debug("the sql is {}, params size is {}, params: {}", e.getSql(), params.length, params);
+                        for (int i = 0; i < params.length; i++) {
+                            ps.setObject(i + 1, params[i]);
+                        }
+                    }
+                    ps.addBatch();
+                }
+
+                for (String k : batchSqls.keySet()) {
+                    batchSqls.get(k).executeBatch();
+                }
+            } catch (SQLException e) {
+                logger.error(e.getMessage(), e);
+            }
+            batchSqls.clear();
+        }
+    }
+
+    private ShardingjdbcSqlEntity getShardingjdbcSqlEntity(Object entity) {
+        if (entity instanceof ShardingjdbcSqlEntity) {
+            return (ShardingjdbcSqlEntity)entity;
+        }
+        return null;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/dao/ShardingjdbcDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/dao/ShardingjdbcDAO.java
new file mode 100644
index 0000000..13f0434
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/dao/ShardingjdbcDAO.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.storage.base.dao.AbstractDAO;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public abstract class ShardingjdbcDAO extends AbstractDAO<ShardingjdbcClient> {
+
+    private static final Logger logger = LoggerFactory.getLogger(ShardingjdbcDAO.class);
+
+    public ShardingjdbcDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    protected final int getMaxId(String tableName, String columnName) {
+        String sql = "select max(" + columnName + ") from " + tableName;
+        return getIntValueBySQL(sql);
+    }
+
+    protected final int getMinId(String tableName, String columnName) {
+        String sql = "select min(" + columnName + ") from " + tableName;
+        return getIntValueBySQL(sql);
+    }
+
+    private int getIntValueBySQL(String sql) {
+        ShardingjdbcClient client = getClient();
+        try (
+                ResultSet rs = client.executeQuery(sql, null);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            if (rs.next()) {
+                int id = rs.getInt(1);
+                if (id == Integer.MAX_VALUE || id == Integer.MIN_VALUE) {
+                    return 0;
+                } else {
+                    return id;
+                }
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return 0;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/define/ShardingjdbcColumnDefine.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/define/ShardingjdbcColumnDefine.java
new file mode 100644
index 0000000..7f1d28e
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/define/ShardingjdbcColumnDefine.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define;
+
+import org.apache.skywalking.apm.collector.core.data.ColumnDefine;
+import org.apache.skywalking.apm.collector.core.data.ColumnName;
+
+/**
+ * @author linjiaqi
+ */
+public class ShardingjdbcColumnDefine extends ColumnDefine {
+
+    public ShardingjdbcColumnDefine(ColumnName columnName, String type) {
+        super(columnName, type);
+    }
+
+    public enum Type {
+        Varchar, Int, Bigint, BINARY, Double, BLOB
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/define/ShardingjdbcSqlEntity.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/define/ShardingjdbcSqlEntity.java
new file mode 100644
index 0000000..2d82575
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/define/ShardingjdbcSqlEntity.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define;
+
+/**
+ * @author linjiaqi
+ */
+public class ShardingjdbcSqlEntity {
+    private String sql;
+    private Object[] params;
+
+    public String getSql() {
+        return sql;
+    }
+
+    public void setSql(String sql) {
+        this.sql = sql;
+    }
+
+    public Object[] getParams() {
+        return params;
+    }
+
+    public void setParams(Object[] params) {
+        this.params = params;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/define/ShardingjdbcStorageInstaller.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/define/ShardingjdbcStorageInstaller.java
new file mode 100644
index 0000000..716f66c
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/define/ShardingjdbcStorageInstaller.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define;
+
+import java.util.List;
+
+import org.apache.skywalking.apm.collector.client.Client;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.core.data.TableDefine;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.StorageException;
+import org.apache.skywalking.apm.collector.storage.StorageInstallException;
+import org.apache.skywalking.apm.collector.storage.StorageInstaller;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class ShardingjdbcStorageInstaller extends StorageInstaller {
+
+    private final Logger logger = LoggerFactory.getLogger(ShardingjdbcStorageInstaller.class);
+
+    public ShardingjdbcStorageInstaller(boolean isHighPerformanceMode) {
+        super(isHighPerformanceMode);
+    }
+
+    @Override protected void defineFilter(List<TableDefine> tableDefines) {
+        int size = tableDefines.size();
+        for (int i = size - 1; i >= 0; i--) {
+            if (!(tableDefines.get(i) instanceof ShardingjdbcTableDefine)) {
+                tableDefines.remove(i);
+            }
+        }
+    }
+
+    @Override protected boolean isExists(Client client, TableDefine tableDefine) throws StorageException {
+        logger.info("check if table {} exist ", tableDefine.getName());
+        return false;
+    }
+
+    @Override protected void columnCheck(Client client, TableDefine tableDefine) throws StorageException {
+
+    }
+
+    @Override protected void deleteTable(Client client, TableDefine tableDefine) throws StorageException {
+        ShardingjdbcClient shardingjdbcClient = (ShardingjdbcClient)client;
+        try {
+            shardingjdbcClient.execute("DROP TABLE IF EXISTS " + tableDefine.getName());
+        } catch (ShardingjdbcClientException e) {
+            throw new StorageInstallException(e.getMessage(), e);
+        }
+    }
+
+    @Override protected void createTable(Client client, TableDefine tableDefine) throws StorageException {
+        ShardingjdbcClient shardingjdbcClient = (ShardingjdbcClient)client;
+        ShardingjdbcTableDefine shardingjdbcTableDefine = (ShardingjdbcTableDefine)tableDefine;
+
+        StringBuilder sqlBuilder = new StringBuilder();
+        sqlBuilder.append("CREATE TABLE IF NOT EXISTS ").append(shardingjdbcTableDefine.getName()).append(" (");
+
+        shardingjdbcTableDefine.getColumnDefines().forEach(columnDefine -> {
+            ShardingjdbcColumnDefine shardingjdbcColumnDefine = (ShardingjdbcColumnDefine)columnDefine;
+            if (shardingjdbcColumnDefine.getType().equals(ShardingjdbcColumnDefine.Type.Varchar.name())) {
+                sqlBuilder.append(shardingjdbcColumnDefine.getColumnName().getName()).append(" ").append(shardingjdbcColumnDefine.getType()).append("(255),");
+            } else {
+                sqlBuilder.append(shardingjdbcColumnDefine.getColumnName().getName()).append(" ").append(shardingjdbcColumnDefine.getType()).append(",");
+            }
+        });
+        sqlBuilder.append(" PRIMARY KEY (id)");
+        if (shardingjdbcTableDefine.getIndex() != null) {
+            sqlBuilder.append(", KEY " + shardingjdbcTableDefine.getName() + Const.ID_SPLIT + shardingjdbcTableDefine.getIndex() + " (" + shardingjdbcTableDefine.getIndex() + ")");
+        }
+        sqlBuilder.append(")");
+        try {
+            logger.info("create if not exists shardingjdbc table with sql {}", sqlBuilder);
+            shardingjdbcClient.execute(sqlBuilder.toString());
+        } catch (ShardingjdbcClientException e) {
+            throw new StorageInstallException(e.getMessage(), e);
+        }
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/define/ShardingjdbcTableDefine.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/define/ShardingjdbcTableDefine.java
new file mode 100644
index 0000000..639ecf0
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/base/define/ShardingjdbcTableDefine.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define;
+
+import org.apache.skywalking.apm.collector.core.data.TableDefine;
+
+/**
+ * @author linjiaqi
+ */
+public abstract class ShardingjdbcTableDefine extends TableDefine {
+    private final String index;
+
+    public ShardingjdbcTableDefine(String name, String index) {
+        super(name);
+        this.index = index;
+    }
+
+    public String getIndex() {
+        return index;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/GlobalTraceShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/GlobalTraceShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..f76b759
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/GlobalTraceShardingjdbcPersistenceDAO.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.dao.IGlobalTracePersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.global.GlobalTrace;
+import org.apache.skywalking.apm.collector.storage.table.global.GlobalTraceTable;
+
+/**
+ * @author linjiaqi
+ */
+public class GlobalTraceShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<GlobalTrace> implements IGlobalTracePersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, GlobalTrace> {
+
+    public GlobalTraceShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+    
+    @Override protected String tableName() {
+        return GlobalTraceTable.TABLE;
+    }
+    
+    @Override protected GlobalTrace shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        GlobalTrace globalTrace = new GlobalTrace();
+        globalTrace.setSegmentId(resultSet.getString(GlobalTraceTable.SEGMENT_ID.getName()));
+        globalTrace.setTraceId(resultSet.getString(GlobalTraceTable.TRACE_ID.getName()));
+        globalTrace.setTimeBucket(resultSet.getLong(GlobalTraceTable.TIME_BUCKET.getName()));
+        return globalTrace;
+    }
+
+    @Override protected Map<String, Object> streamDataToShardingjdbcData(GlobalTrace streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(GlobalTraceTable.SEGMENT_ID.getName(), streamData.getSegmentId());
+        target.put(GlobalTraceTable.TRACE_ID.getName(), streamData.getTraceId());
+        target.put(GlobalTraceTable.TIME_BUCKET.getName(), streamData.getTimeBucket());
+        return target;
+    }
+
+    @Override protected String timeBucketColumnNameForDelete() {
+        return GlobalTraceTable.TIME_BUCKET.getName();
+    }
+
+    @GraphComputingMetric(name = "/persistence/get/" + GlobalTraceTable.TABLE)
+    @Override public GlobalTrace get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/InstanceHeartBeatShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/InstanceHeartBeatShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..412756a
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/InstanceHeartBeatShardingjdbcPersistenceDAO.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao;
+
+import java.sql.*;
+import java.util.*;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.*;
+import org.apache.skywalking.apm.collector.core.UnexpectedException;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.IInstanceHeartBeatPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.register.*;
+import org.slf4j.*;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceHeartBeatShardingjdbcPersistenceDAO extends ShardingjdbcDAO implements IInstanceHeartBeatPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, Instance> {
+
+    private static final Logger logger = LoggerFactory.getLogger(InstanceHeartBeatShardingjdbcPersistenceDAO.class);
+
+    public InstanceHeartBeatShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    private static final String GET_INSTANCE_HEARTBEAT_SQL = "select * from {0} where {1} = ?";
+
+    @Override public Instance get(String id) {
+        ShardingjdbcClient client = getClient();
+        String sql = SqlBuilder.buildSql(GET_INSTANCE_HEARTBEAT_SQL, InstanceTable.TABLE, InstanceTable.INSTANCE_ID.getName());
+        Object[] params = new Object[] {id};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            if (rs.next()) {
+                Instance instance = new Instance();
+                instance.setId(id);
+                instance.setInstanceId(rs.getInt(InstanceTable.INSTANCE_ID.getName()));
+                instance.setHeartBeatTime(rs.getLong(InstanceTable.HEARTBEAT_TIME.getName()));
+                return instance;
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return null;
+    }
+
+    @Override public ShardingjdbcSqlEntity prepareBatchInsert(Instance data) {
+        throw new UnexpectedException("There is no need to merge stream data with database data.");
+    }
+
+    @Override public ShardingjdbcSqlEntity prepareBatchUpdate(Instance data) {
+        ShardingjdbcSqlEntity entity = new ShardingjdbcSqlEntity();
+        Map<String, Object> target = new HashMap<>();
+        target.put(InstanceTable.HEARTBEAT_TIME.getName(), data.getHeartBeatTime());
+        String sql = SqlBuilder.buildBatchUpdateSql(InstanceTable.TABLE, target.keySet(), InstanceTable.INSTANCE_ID.getName());
+        entity.setSql(sql);
+        List<Object> params = new ArrayList<>(target.values());
+        params.add(data.getId());
+        entity.setParams(params.toArray(new Object[0]));
+        return entity;
+    }
+
+    @Override public void deleteHistory(Long timeBucketBefore) {
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/SegmentDurationShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/SegmentDurationShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..e7a8956
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/SegmentDurationShardingjdbcPersistenceDAO.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao;
+
+import java.util.*;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.*;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.ISegmentDurationPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.segment.*;
+import org.slf4j.*;
+
+/**
+ * @author linjiaqi
+ */
+public class SegmentDurationShardingjdbcPersistenceDAO extends ShardingjdbcDAO implements ISegmentDurationPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, SegmentDuration> {
+
+    private static final Logger logger = LoggerFactory.getLogger(SegmentDurationShardingjdbcPersistenceDAO.class);
+
+    public SegmentDurationShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override public SegmentDuration get(String id) {
+        return null;
+    }
+
+    @Override public ShardingjdbcSqlEntity prepareBatchInsert(SegmentDuration data) {
+        logger.debug("segment cost prepareBatchInsert, getApplicationId: {}", data.getId());
+        ShardingjdbcSqlEntity entity = new ShardingjdbcSqlEntity();
+        Map<String, Object> target = new HashMap<>();
+        target.put(SegmentDurationTable.ID.getName(), data.getId());
+        target.put(SegmentDurationTable.SEGMENT_ID.getName(), data.getSegmentId());
+        target.put(SegmentDurationTable.APPLICATION_ID.getName(), data.getApplicationId());
+        target.put(SegmentDurationTable.SERVICE_NAME.getName(), data.getServiceName());
+        target.put(SegmentDurationTable.DURATION.getName(), data.getDuration());
+        target.put(SegmentDurationTable.START_TIME.getName(), data.getStartTime());
+        target.put(SegmentDurationTable.END_TIME.getName(), data.getEndTime());
+        target.put(SegmentDurationTable.IS_ERROR.getName(), data.getIsError());
+        target.put(SegmentDurationTable.TIME_BUCKET.getName(), data.getTimeBucket());
+        logger.debug("segment cost source: {}", target.toString());
+
+        String sql = SqlBuilder.buildBatchInsertSql(SegmentDurationTable.TABLE, target.keySet());
+        entity.setSql(sql);
+        entity.setParams(target.values().toArray(new Object[0]));
+        return entity;
+    }
+
+    @Override public ShardingjdbcSqlEntity prepareBatchUpdate(SegmentDuration data) {
+        return null;
+    }
+
+    @Override public void deleteHistory(Long timeBucketBefore) {
+        ShardingjdbcClient client = getClient();
+        
+        String dynamicSql = "delete from {0} where {1} <= ?";
+        String sql = SqlBuilder.buildSql(dynamicSql, SegmentDurationTable.TABLE, SegmentDurationTable.TIME_BUCKET.getName());
+        
+        Object[] params = new Object[] {timeBucketBefore};
+        
+        try {
+            client.execute(sql, params);
+            logger.info("Deleted history rows from {} table.", SegmentDurationTable.TABLE);
+        } catch (ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/SegmentShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/SegmentShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..6216094
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/SegmentShardingjdbcPersistenceDAO.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Base64;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.dao.ISegmentPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.segment.Segment;
+import org.apache.skywalking.apm.collector.storage.table.segment.SegmentTable;
+
+/**
+ * @author linjiaqi
+ */
+public class SegmentShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<Segment> implements ISegmentPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, Segment> {
+
+    public SegmentShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+    
+    @Override protected String tableName() {
+        return SegmentTable.TABLE;
+    }
+    
+    @Override protected Segment shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        Segment segment = new Segment();
+        segment.setDataBinary(Base64.getDecoder().decode(resultSet.getString(SegmentTable.DATA_BINARY.getName())));
+        segment.setTimeBucket(resultSet.getLong(SegmentTable.TIME_BUCKET.getName()));
+        return segment;
+    }
+
+    @Override protected Map<String, Object> streamDataToShardingjdbcData(Segment streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(SegmentTable.DATA_BINARY.getName(), new String(Base64.getEncoder().encode(streamData.getDataBinary())));
+        target.put(SegmentTable.TIME_BUCKET.getName(), streamData.getTimeBucket());
+        return target;
+    }
+
+    @Override protected String timeBucketColumnNameForDelete() {
+        return SegmentTable.TIME_BUCKET.getName();
+    }
+
+    @GraphComputingMetric(name = "/persistence/get/" + SegmentTable.TABLE)
+    @Override public Segment get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ServiceNameHeartBeatShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ServiceNameHeartBeatShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..d07c6f9
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ServiceNameHeartBeatShardingjdbcPersistenceDAO.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.core.UnexpectedException;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.IServiceNameHeartBeatPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.register.ServiceName;
+import org.apache.skywalking.apm.collector.storage.table.register.ServiceNameTable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class ServiceNameHeartBeatShardingjdbcPersistenceDAO extends ShardingjdbcDAO implements IServiceNameHeartBeatPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ServiceName> {
+
+    private static final Logger logger = LoggerFactory.getLogger(ServiceNameHeartBeatShardingjdbcPersistenceDAO.class);
+
+    public ServiceNameHeartBeatShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    private static final String GET_SERVICENAME_HEARTBEAT_SQL = "select * from {0} where {1} = ?";
+    
+    @GraphComputingMetric(name = "/persistence/get/" + ServiceNameTable.TABLE + "/heartbeat")
+    @Override public ServiceName get(String id) {
+        ShardingjdbcClient client = getClient();
+        String sql = SqlBuilder.buildSql(GET_SERVICENAME_HEARTBEAT_SQL, ServiceNameTable.TABLE, ServiceNameTable.SERVICE_ID.getName());
+        Object[] params = new Object[] {id};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            if (rs.next()) {
+                ServiceName serviceName = new ServiceName();
+                serviceName.setId(id);
+                serviceName.setServiceId(rs.getInt(ServiceNameTable.SERVICE_ID.getName()));
+                serviceName.setHeartBeatTime(rs.getLong(ServiceNameTable.HEARTBEAT_TIME.getName()));
+                return serviceName;
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return null;
+    }
+
+    @Override public ShardingjdbcSqlEntity prepareBatchInsert(ServiceName data) {
+        throw new UnexpectedException("Received an service name heart beat message under service id= " + data.getId() + " , which doesn't exist.");
+    }
+
+    @Override public ShardingjdbcSqlEntity prepareBatchUpdate(ServiceName data) {
+        ShardingjdbcSqlEntity entity = new ShardingjdbcSqlEntity();
+        Map<String, Object> target = new HashMap<>();
+        target.put(ServiceNameTable.HEARTBEAT_TIME.getName(), data.getHeartBeatTime());
+        String sql = SqlBuilder.buildBatchUpdateSql(ServiceNameTable.TABLE, target.keySet(), ServiceNameTable.SERVICE_ID.getName());
+        entity.setSql(sql);
+        List<Object> params = new ArrayList<>(target.values());
+        params.add(data.getId());
+        entity.setParams(params.toArray(new Object[0]));
+        return entity;
+    }
+
+    @Override public void deleteHistory(Long timeBucketBefore) {
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/acp/AbstractApplicationComponentShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/acp/AbstractApplicationComponentShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..663f5ab
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/acp/AbstractApplicationComponentShardingjdbcPersistenceDAO.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.acp;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationComponent;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationComponentTable;
+
+/**
+ * @author linjiaqi
+ */
+public abstract class AbstractApplicationComponentShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<ApplicationComponent> {
+
+    AbstractApplicationComponentShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+    
+    @Override protected final String timeBucketColumnNameForDelete() {
+        return ApplicationComponentTable.TIME_BUCKET.getName();
+    }
+
+    @Override protected final ApplicationComponent shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        ApplicationComponent applicationComponent = new ApplicationComponent();
+        applicationComponent.setId(resultSet.getString(ApplicationComponentTable.ID.getName()));
+        applicationComponent.setMetricId(resultSet.getString(ApplicationComponentTable.METRIC_ID.getName()));
+
+        applicationComponent.setComponentId(resultSet.getInt(ApplicationComponentTable.COMPONENT_ID.getName()));
+        applicationComponent.setApplicationId(resultSet.getInt(ApplicationComponentTable.APPLICATION_ID.getName()));
+        applicationComponent.setTimeBucket(resultSet.getLong(ApplicationComponentTable.TIME_BUCKET.getName()));
+        return applicationComponent;
+    }
+
+    @Override protected final Map<String, Object> streamDataToShardingjdbcData(ApplicationComponent streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(ApplicationComponentTable.ID.getName(), streamData.getId());
+        target.put(ApplicationComponentTable.METRIC_ID.getName(), streamData.getMetricId());
+
+        target.put(ApplicationComponentTable.COMPONENT_ID.getName(), streamData.getComponentId());
+        target.put(ApplicationComponentTable.APPLICATION_ID.getName(), streamData.getApplicationId());
+        target.put(ApplicationComponentTable.TIME_BUCKET.getName(), streamData.getTimeBucket());
+
+        return target;
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + ApplicationComponentTable.TABLE)
+    @Override public final ApplicationComponent get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/acp/ApplicationComponentDayShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/acp/ApplicationComponentDayShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..ae60741
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/acp/ApplicationComponentDayShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.acp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.acp.IApplicationComponentDayPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationComponent;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationComponentTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationComponentDayShardingjdbcPersistenceDAO extends AbstractApplicationComponentShardingjdbcPersistenceDAO implements IApplicationComponentDayPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationComponent> {
+
+    public ApplicationComponentDayShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationComponentTable.TABLE + Const.ID_SPLIT + TimePyramid.Day.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/acp/ApplicationComponentHourShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/acp/ApplicationComponentHourShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..0b5ba07
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/acp/ApplicationComponentHourShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.acp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.acp.IApplicationComponentHourPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationComponent;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationComponentTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationComponentHourShardingjdbcPersistenceDAO extends AbstractApplicationComponentShardingjdbcPersistenceDAO implements IApplicationComponentHourPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationComponent> {
+
+    public ApplicationComponentHourShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationComponentTable.TABLE + Const.ID_SPLIT + TimePyramid.Hour.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/acp/ApplicationComponentMinuteShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/acp/ApplicationComponentMinuteShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..742a3a8
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/acp/ApplicationComponentMinuteShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.acp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.acp.IApplicationComponentMinutePersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationComponent;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationComponentTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationComponentMinuteShardingjdbcPersistenceDAO extends AbstractApplicationComponentShardingjdbcPersistenceDAO implements IApplicationComponentMinutePersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationComponent> {
+
+    public ApplicationComponentMinuteShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationComponentTable.TABLE + Const.ID_SPLIT + TimePyramid.Minute.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/acp/ApplicationComponentMonthShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/acp/ApplicationComponentMonthShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..92810bf
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/acp/ApplicationComponentMonthShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.acp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.acp.IApplicationComponentMonthPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationComponent;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationComponentTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationComponentMonthShardingjdbcPersistenceDAO extends AbstractApplicationComponentShardingjdbcPersistenceDAO implements IApplicationComponentMonthPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationComponent> {
+
+    public ApplicationComponentMonthShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationComponentTable.TABLE + Const.ID_SPLIT + TimePyramid.Month.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/AbstractApplicationAlarmListShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/AbstractApplicationAlarmListShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..68fc79e
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/AbstractApplicationAlarmListShardingjdbcPersistenceDAO.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationAlarmList;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationAlarmListTable;
+
+/**
+ * @author linjiaqi
+ */
+public abstract class AbstractApplicationAlarmListShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<ApplicationAlarmList> {
+
+    AbstractApplicationAlarmListShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+    
+    @Override protected final String timeBucketColumnNameForDelete() {
+        return ApplicationAlarmListTable.TIME_BUCKET.getName();
+    }
+
+    @Override protected final ApplicationAlarmList shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        ApplicationAlarmList applicationAlarmList = new ApplicationAlarmList();
+        applicationAlarmList.setId(resultSet.getString(ApplicationAlarmListTable.ID.getName()));
+        applicationAlarmList.setMetricId(resultSet.getString(ApplicationAlarmListTable.METRIC_ID.getName()));
+        applicationAlarmList.setSourceValue(resultSet.getInt(ApplicationAlarmListTable.SOURCE_VALUE.getName()));
+
+        applicationAlarmList.setAlarmType(resultSet.getInt(ApplicationAlarmListTable.ALARM_TYPE.getName()));
+
+        applicationAlarmList.setApplicationId(resultSet.getInt(ApplicationAlarmListTable.APPLICATION_ID.getName()));
+
+        applicationAlarmList.setTimeBucket(resultSet.getLong(ApplicationAlarmListTable.TIME_BUCKET.getName()));
+        applicationAlarmList.setAlarmContent(resultSet.getString(ApplicationAlarmListTable.ALARM_CONTENT.getName()));
+
+        return applicationAlarmList;
+    }
+
+    @Override protected final Map<String, Object> streamDataToShardingjdbcData(ApplicationAlarmList streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(ApplicationAlarmListTable.ID.getName(), streamData.getId());
+        target.put(ApplicationAlarmListTable.METRIC_ID.getName(), streamData.getMetricId());
+        target.put(ApplicationAlarmListTable.SOURCE_VALUE.getName(), streamData.getSourceValue());
+
+        target.put(ApplicationAlarmListTable.ALARM_TYPE.getName(), streamData.getAlarmType());
+
+        target.put(ApplicationAlarmListTable.APPLICATION_ID.getName(), streamData.getApplicationId());
+
+        target.put(ApplicationAlarmListTable.TIME_BUCKET.getName(), streamData.getTimeBucket());
+        target.put(ApplicationAlarmListTable.ALARM_CONTENT.getName(), streamData.getAlarmContent());
+
+        return target;
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + ApplicationAlarmListTable.TABLE)
+    @Override public final ApplicationAlarmList get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationAlarmListShardingjdbcDayPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationAlarmListShardingjdbcDayPersistenceDAO.java
new file mode 100644
index 0000000..3765055
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationAlarmListShardingjdbcDayPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IApplicationAlarmListDayPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationAlarmList;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationAlarmListTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationAlarmListShardingjdbcDayPersistenceDAO extends AbstractApplicationAlarmListShardingjdbcPersistenceDAO implements IApplicationAlarmListDayPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationAlarmList> {
+
+    public ApplicationAlarmListShardingjdbcDayPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationAlarmListTable.TABLE + Const.ID_SPLIT + TimePyramid.Day.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationAlarmListShardingjdbcHourPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationAlarmListShardingjdbcHourPersistenceDAO.java
new file mode 100644
index 0000000..1995582
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationAlarmListShardingjdbcHourPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IApplicationAlarmListHourPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationAlarmList;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationAlarmListTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationAlarmListShardingjdbcHourPersistenceDAO extends AbstractApplicationAlarmListShardingjdbcPersistenceDAO implements IApplicationAlarmListHourPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationAlarmList> {
+
+    public ApplicationAlarmListShardingjdbcHourPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationAlarmListTable.TABLE + Const.ID_SPLIT + TimePyramid.Hour.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationAlarmListShardingjdbcMinutePersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationAlarmListShardingjdbcMinutePersistenceDAO.java
new file mode 100644
index 0000000..5672b45
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationAlarmListShardingjdbcMinutePersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IApplicationAlarmListMinutePersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationAlarmList;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationAlarmListTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationAlarmListShardingjdbcMinutePersistenceDAO extends AbstractApplicationAlarmListShardingjdbcPersistenceDAO implements IApplicationAlarmListMinutePersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationAlarmList> {
+
+    public ApplicationAlarmListShardingjdbcMinutePersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationAlarmListTable.TABLE + Const.ID_SPLIT + TimePyramid.Minute.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationAlarmListShardingjdbcMonthPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationAlarmListShardingjdbcMonthPersistenceDAO.java
new file mode 100644
index 0000000..bbf1b8d
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationAlarmListShardingjdbcMonthPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IApplicationAlarmListMonthPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationAlarmList;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationAlarmListTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationAlarmListShardingjdbcMonthPersistenceDAO extends AbstractApplicationAlarmListShardingjdbcPersistenceDAO implements IApplicationAlarmListMonthPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationAlarmList> {
+
+    public ApplicationAlarmListShardingjdbcMonthPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationAlarmListTable.TABLE + Const.ID_SPLIT + TimePyramid.Month.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationAlarmShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationAlarmShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..ae5ee84
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationAlarmShardingjdbcPersistenceDAO.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IApplicationAlarmPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationAlarm;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationAlarmTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationAlarmShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<ApplicationAlarm> implements IApplicationAlarmPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationAlarm> {
+
+    public ApplicationAlarmShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+    
+    @Override protected String tableName() {
+        return ApplicationAlarmTable.TABLE;
+    }
+
+    @Override protected ApplicationAlarm shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        ApplicationAlarm applicationAlarm = new ApplicationAlarm();
+        applicationAlarm.setId(resultSet.getString(ApplicationAlarmTable.ID.getName()));
+        applicationAlarm.setSourceValue(resultSet.getInt(ApplicationAlarmTable.SOURCE_VALUE.getName()));
+
+        applicationAlarm.setAlarmType(resultSet.getInt(ApplicationAlarmTable.ALARM_TYPE.getName()));
+
+        applicationAlarm.setApplicationId(resultSet.getInt(ApplicationAlarmTable.APPLICATION_ID.getName()));
+
+        applicationAlarm.setLastTimeBucket(resultSet.getLong(ApplicationAlarmTable.LAST_TIME_BUCKET.getName()));
+        applicationAlarm.setAlarmContent(resultSet.getString(ApplicationAlarmTable.ALARM_CONTENT.getName()));
+
+        return applicationAlarm;
+    }
+
+    @Override protected Map<String, Object> streamDataToShardingjdbcData(ApplicationAlarm streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(ApplicationAlarmTable.ID.getName(), streamData.getId());
+        target.put(ApplicationAlarmTable.SOURCE_VALUE.getName(), streamData.getSourceValue());
+
+        target.put(ApplicationAlarmTable.ALARM_TYPE.getName(), streamData.getAlarmType());
+
+        target.put(ApplicationAlarmTable.APPLICATION_ID.getName(), streamData.getApplicationId());
+
+        target.put(ApplicationAlarmTable.LAST_TIME_BUCKET.getName(), streamData.getLastTimeBucket());
+        target.put(ApplicationAlarmTable.ALARM_CONTENT.getName(), streamData.getAlarmContent());
+
+        return target;
+    }
+
+    @Override protected String timeBucketColumnNameForDelete() {
+        return ApplicationAlarmTable.LAST_TIME_BUCKET.getName();
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + ApplicationAlarmTable.TABLE)
+    @Override public ApplicationAlarm get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationReferenceAlarmListShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationReferenceAlarmListShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..d951449
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationReferenceAlarmListShardingjdbcPersistenceDAO.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IApplicationReferenceAlarmListPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationReferenceAlarmList;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationReferenceAlarmListTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationReferenceAlarmListShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<ApplicationReferenceAlarmList> implements IApplicationReferenceAlarmListPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationReferenceAlarmList> {
+
+    public ApplicationReferenceAlarmListShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationReferenceAlarmListTable.TABLE;
+    }
+
+    @Override protected ApplicationReferenceAlarmList shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        ApplicationReferenceAlarmList applicationReferenceAlarmList = new ApplicationReferenceAlarmList();
+        applicationReferenceAlarmList.setId(resultSet.getString(ApplicationReferenceAlarmListTable.ID.getName()));
+        applicationReferenceAlarmList.setSourceValue(resultSet.getInt(ApplicationReferenceAlarmListTable.SOURCE_VALUE.getName()));
+
+        applicationReferenceAlarmList.setAlarmType(resultSet.getInt(ApplicationReferenceAlarmListTable.ALARM_TYPE.getName()));
+
+        applicationReferenceAlarmList.setFrontApplicationId(resultSet.getInt(ApplicationReferenceAlarmListTable.FRONT_APPLICATION_ID.getName()));
+        applicationReferenceAlarmList.setBehindApplicationId(resultSet.getInt(ApplicationReferenceAlarmListTable.BEHIND_APPLICATION_ID.getName()));
+
+        applicationReferenceAlarmList.setTimeBucket(resultSet.getLong(ApplicationReferenceAlarmListTable.TIME_BUCKET.getName()));
+        applicationReferenceAlarmList.setAlarmContent(resultSet.getString(ApplicationReferenceAlarmListTable.ALARM_CONTENT.getName()));
+
+        return applicationReferenceAlarmList;
+    }
+
+    @Override protected Map<String, Object> streamDataToShardingjdbcData(ApplicationReferenceAlarmList streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(ApplicationReferenceAlarmListTable.ID.getName(), streamData.getId());
+        target.put(ApplicationReferenceAlarmListTable.SOURCE_VALUE.getName(), streamData.getSourceValue());
+
+        target.put(ApplicationReferenceAlarmListTable.ALARM_TYPE.getName(), streamData.getAlarmType());
+
+        target.put(ApplicationReferenceAlarmListTable.FRONT_APPLICATION_ID.getName(), streamData.getFrontApplicationId());
+        target.put(ApplicationReferenceAlarmListTable.BEHIND_APPLICATION_ID.getName(), streamData.getBehindApplicationId());
+
+        target.put(ApplicationReferenceAlarmListTable.TIME_BUCKET.getName(), streamData.getTimeBucket());
+        target.put(ApplicationReferenceAlarmListTable.ALARM_CONTENT.getName(), streamData.getAlarmContent());
+
+        return target;
+    }
+    
+    @Override protected String timeBucketColumnNameForDelete() {
+        return ApplicationReferenceAlarmListTable.TIME_BUCKET.getName();
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + ApplicationReferenceAlarmListTable.TABLE)
+    @Override public ApplicationReferenceAlarmList get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationReferenceAlarmShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationReferenceAlarmShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..066deff
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ApplicationReferenceAlarmShardingjdbcPersistenceDAO.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IApplicationReferenceAlarmPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationReferenceAlarm;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationReferenceAlarmTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationReferenceAlarmShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<ApplicationReferenceAlarm> implements IApplicationReferenceAlarmPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationReferenceAlarm> {
+
+    public ApplicationReferenceAlarmShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+    
+    @Override protected String tableName() {
+        return ApplicationReferenceAlarmTable.TABLE;
+    }
+
+    @Override protected ApplicationReferenceAlarm shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        ApplicationReferenceAlarm applicationReferenceAlarm = new ApplicationReferenceAlarm();
+        applicationReferenceAlarm.setId(resultSet.getString(ApplicationReferenceAlarmTable.ID.getName()));
+        applicationReferenceAlarm.setSourceValue(resultSet.getInt(ApplicationReferenceAlarmTable.SOURCE_VALUE.getName()));
+
+        applicationReferenceAlarm.setAlarmType(resultSet.getInt(ApplicationReferenceAlarmTable.ALARM_TYPE.getName()));
+
+        applicationReferenceAlarm.setFrontApplicationId(resultSet.getInt(ApplicationReferenceAlarmTable.FRONT_APPLICATION_ID.getName()));
+        applicationReferenceAlarm.setBehindApplicationId(resultSet.getInt(ApplicationReferenceAlarmTable.BEHIND_APPLICATION_ID.getName()));
+
+        applicationReferenceAlarm.setLastTimeBucket(resultSet.getLong(ApplicationReferenceAlarmTable.LAST_TIME_BUCKET.getName()));
+        applicationReferenceAlarm.setAlarmContent(resultSet.getString(ApplicationReferenceAlarmTable.ALARM_CONTENT.getName()));
+
+        return applicationReferenceAlarm;
+    }
+
+    @Override protected Map<String, Object> streamDataToShardingjdbcData(ApplicationReferenceAlarm streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(ApplicationReferenceAlarmTable.ID.getName(), streamData.getId());
+        target.put(ApplicationReferenceAlarmTable.SOURCE_VALUE.getName(), streamData.getSourceValue());
+
+        target.put(ApplicationReferenceAlarmTable.ALARM_TYPE.getName(), streamData.getAlarmType());
+
+        target.put(ApplicationReferenceAlarmTable.FRONT_APPLICATION_ID.getName(), streamData.getFrontApplicationId());
+        target.put(ApplicationReferenceAlarmTable.BEHIND_APPLICATION_ID.getName(), streamData.getBehindApplicationId());
+
+        target.put(ApplicationReferenceAlarmTable.LAST_TIME_BUCKET.getName(), streamData.getLastTimeBucket());
+        target.put(ApplicationReferenceAlarmTable.ALARM_CONTENT.getName(), streamData.getAlarmContent());
+
+        return target;
+    }
+
+    @Override protected String timeBucketColumnNameForDelete() {
+        return ApplicationReferenceAlarmTable.LAST_TIME_BUCKET.getName();
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + ApplicationReferenceAlarmTable.TABLE)
+    @Override public final ApplicationReferenceAlarm get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/InstanceAlarmListShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/InstanceAlarmListShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..dd1ce87
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/InstanceAlarmListShardingjdbcPersistenceDAO.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IInstanceAlarmListPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.alarm.InstanceAlarmList;
+import org.apache.skywalking.apm.collector.storage.table.alarm.InstanceAlarmListTable;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceAlarmListShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<InstanceAlarmList> implements IInstanceAlarmListPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, InstanceAlarmList> {
+
+    public InstanceAlarmListShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return InstanceAlarmListTable.TABLE;
+    }
+
+    @Override protected InstanceAlarmList shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        InstanceAlarmList instanceAlarmList = new InstanceAlarmList();
+        instanceAlarmList.setId(resultSet.getString(InstanceAlarmListTable.ID.getName()));
+        instanceAlarmList.setSourceValue(resultSet.getInt(InstanceAlarmListTable.SOURCE_VALUE.getName()));
+
+        instanceAlarmList.setAlarmType(resultSet.getInt(InstanceAlarmListTable.ALARM_TYPE.getName()));
+
+        instanceAlarmList.setApplicationId(resultSet.getInt(InstanceAlarmListTable.APPLICATION_ID.getName()));
+        instanceAlarmList.setInstanceId(resultSet.getInt(InstanceAlarmListTable.INSTANCE_ID.getName()));
+
+        instanceAlarmList.setTimeBucket(resultSet.getLong(InstanceAlarmListTable.TIME_BUCKET.getName()));
+        instanceAlarmList.setAlarmContent(resultSet.getString(InstanceAlarmListTable.ALARM_CONTENT.getName()));
+
+        return instanceAlarmList;
+    }
+
+    @Override protected Map<String, Object> streamDataToShardingjdbcData(InstanceAlarmList streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(InstanceAlarmListTable.ID.getName(), streamData.getId());
+        target.put(InstanceAlarmListTable.SOURCE_VALUE.getName(), streamData.getSourceValue());
+
+        target.put(InstanceAlarmListTable.ALARM_TYPE.getName(), streamData.getAlarmType());
+
+        target.put(InstanceAlarmListTable.APPLICATION_ID.getName(), streamData.getApplicationId());
+        target.put(InstanceAlarmListTable.INSTANCE_ID.getName(), streamData.getInstanceId());
+
+        target.put(InstanceAlarmListTable.TIME_BUCKET.getName(), streamData.getTimeBucket());
+        target.put(InstanceAlarmListTable.ALARM_CONTENT.getName(), streamData.getAlarmContent());
+
+        return target;
+    }
+    
+    @Override protected String timeBucketColumnNameForDelete() {
+        return InstanceAlarmListTable.TIME_BUCKET.getName();
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + InstanceAlarmListTable.TABLE)
+    @Override public InstanceAlarmList get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/InstanceAlarmShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/InstanceAlarmShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..ad346cc
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/InstanceAlarmShardingjdbcPersistenceDAO.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IInstanceAlarmPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.alarm.InstanceAlarm;
+import org.apache.skywalking.apm.collector.storage.table.alarm.InstanceAlarmTable;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceAlarmShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<InstanceAlarm> implements IInstanceAlarmPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, InstanceAlarm> {
+
+    public InstanceAlarmShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return InstanceAlarmTable.TABLE;
+    }
+
+    @Override protected InstanceAlarm shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        InstanceAlarm instanceAlarm = new InstanceAlarm();
+        instanceAlarm.setId(resultSet.getString(InstanceAlarmTable.ID.getName()));
+        instanceAlarm.setSourceValue(resultSet.getInt(InstanceAlarmTable.SOURCE_VALUE.getName()));
+
+        instanceAlarm.setAlarmType(resultSet.getInt(InstanceAlarmTable.ALARM_TYPE.getName()));
+
+        instanceAlarm.setApplicationId(resultSet.getInt(InstanceAlarmTable.APPLICATION_ID.getName()));
+        instanceAlarm.setInstanceId(resultSet.getInt(InstanceAlarmTable.INSTANCE_ID.getName()));
+
+        instanceAlarm.setLastTimeBucket(resultSet.getLong(InstanceAlarmTable.LAST_TIME_BUCKET.getName()));
+        instanceAlarm.setAlarmContent(resultSet.getString(InstanceAlarmTable.ALARM_CONTENT.getName()));
+
+        return instanceAlarm;
+    }
+
+    @Override protected Map<String, Object> streamDataToShardingjdbcData(InstanceAlarm streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(InstanceAlarmTable.ID.getName(), streamData.getId());
+        target.put(InstanceAlarmTable.SOURCE_VALUE.getName(), streamData.getSourceValue());
+
+        target.put(InstanceAlarmTable.ALARM_TYPE.getName(), streamData.getAlarmType());
+
+        target.put(InstanceAlarmTable.APPLICATION_ID.getName(), streamData.getApplicationId());
+        target.put(InstanceAlarmTable.INSTANCE_ID.getName(), streamData.getInstanceId());
+
+        target.put(InstanceAlarmTable.LAST_TIME_BUCKET.getName(), streamData.getLastTimeBucket());
+        target.put(InstanceAlarmTable.ALARM_CONTENT.getName(), streamData.getAlarmContent());
+
+        return target;
+    }
+    
+    @Override protected String timeBucketColumnNameForDelete() {
+        return InstanceAlarmTable.LAST_TIME_BUCKET.getName();
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + InstanceAlarmTable.TABLE)
+    @Override public InstanceAlarm get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/InstanceReferenceAlarmListShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/InstanceReferenceAlarmListShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..a9982fc
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/InstanceReferenceAlarmListShardingjdbcPersistenceDAO.java
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IInstanceReferenceAlarmListPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.alarm.InstanceReferenceAlarmList;
+import org.apache.skywalking.apm.collector.storage.table.alarm.InstanceReferenceAlarmListTable;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceReferenceAlarmListShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<InstanceReferenceAlarmList> implements IInstanceReferenceAlarmListPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, InstanceReferenceAlarmList> {
+
+    public InstanceReferenceAlarmListShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return InstanceReferenceAlarmListTable.TABLE;
+    }
+
+    @Override protected InstanceReferenceAlarmList shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        InstanceReferenceAlarmList instanceReferenceAlarmList = new InstanceReferenceAlarmList();
+        instanceReferenceAlarmList.setId(resultSet.getString(InstanceReferenceAlarmListTable.ID.getName()));
+        instanceReferenceAlarmList.setSourceValue(resultSet.getInt(InstanceReferenceAlarmListTable.SOURCE_VALUE.getName()));
+
+        instanceReferenceAlarmList.setAlarmType(resultSet.getInt(InstanceReferenceAlarmListTable.ALARM_TYPE.getName()));
+
+        instanceReferenceAlarmList.setFrontApplicationId(resultSet.getInt(InstanceReferenceAlarmListTable.FRONT_APPLICATION_ID.getName()));
+        instanceReferenceAlarmList.setFrontInstanceId(resultSet.getInt(InstanceReferenceAlarmListTable.FRONT_INSTANCE_ID.getName()));
+        instanceReferenceAlarmList.setBehindApplicationId(resultSet.getInt(InstanceReferenceAlarmListTable.BEHIND_APPLICATION_ID.getName()));
+        instanceReferenceAlarmList.setBehindInstanceId(resultSet.getInt(InstanceReferenceAlarmListTable.BEHIND_INSTANCE_ID.getName()));
+
+        instanceReferenceAlarmList.setTimeBucket(resultSet.getLong(InstanceReferenceAlarmListTable.TIME_BUCKET.getName()));
+        instanceReferenceAlarmList.setAlarmContent(resultSet.getString(InstanceReferenceAlarmListTable.ALARM_CONTENT.getName()));
+
+        return instanceReferenceAlarmList;
+    }
+
+    @Override protected Map<String, Object> streamDataToShardingjdbcData(InstanceReferenceAlarmList streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(InstanceReferenceAlarmListTable.ID.getName(), streamData.getId());
+        target.put(InstanceReferenceAlarmListTable.SOURCE_VALUE.getName(), streamData.getSourceValue());
+
+        target.put(InstanceReferenceAlarmListTable.ALARM_TYPE.getName(), streamData.getAlarmType());
+
+        target.put(InstanceReferenceAlarmListTable.FRONT_APPLICATION_ID.getName(), streamData.getFrontApplicationId());
+        target.put(InstanceReferenceAlarmListTable.FRONT_INSTANCE_ID.getName(), streamData.getFrontInstanceId());
+        target.put(InstanceReferenceAlarmListTable.BEHIND_APPLICATION_ID.getName(), streamData.getBehindApplicationId());
+        target.put(InstanceReferenceAlarmListTable.BEHIND_INSTANCE_ID.getName(), streamData.getBehindInstanceId());
+
+        target.put(InstanceReferenceAlarmListTable.TIME_BUCKET.getName(), streamData.getTimeBucket());
+        target.put(InstanceReferenceAlarmListTable.ALARM_CONTENT.getName(), streamData.getAlarmContent());
+
+        return target;
+    }
+    
+    @Override protected String timeBucketColumnNameForDelete() {
+        return InstanceReferenceAlarmListTable.TIME_BUCKET.getName();
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + InstanceReferenceAlarmListTable.TABLE)
+    @Override public InstanceReferenceAlarmList get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/InstanceReferenceAlarmShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/InstanceReferenceAlarmShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..4046357
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/InstanceReferenceAlarmShardingjdbcPersistenceDAO.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IInstanceReferenceAlarmPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.alarm.InstanceReferenceAlarm;
+import org.apache.skywalking.apm.collector.storage.table.alarm.InstanceReferenceAlarmTable;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ServiceReferenceAlarmTable;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceReferenceAlarmShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<InstanceReferenceAlarm> implements IInstanceReferenceAlarmPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, InstanceReferenceAlarm> {
+
+    public InstanceReferenceAlarmShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return InstanceReferenceAlarmTable.TABLE;
+    }
+
+    @Override protected InstanceReferenceAlarm shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        InstanceReferenceAlarm instanceReferenceAlarm = new InstanceReferenceAlarm();
+        instanceReferenceAlarm.setId(resultSet.getString(ServiceReferenceAlarmTable.ID.getName()));
+        instanceReferenceAlarm.setSourceValue(resultSet.getInt(ServiceReferenceAlarmTable.SOURCE_VALUE.getName()));
+
+        instanceReferenceAlarm.setAlarmType(resultSet.getInt(ServiceReferenceAlarmTable.ALARM_TYPE.getName()));
+
+        instanceReferenceAlarm.setFrontApplicationId(resultSet.getInt(ServiceReferenceAlarmTable.FRONT_APPLICATION_ID.getName()));
+        instanceReferenceAlarm.setFrontInstanceId(resultSet.getInt(ServiceReferenceAlarmTable.FRONT_INSTANCE_ID.getName()));
+        instanceReferenceAlarm.setBehindApplicationId(resultSet.getInt(ServiceReferenceAlarmTable.BEHIND_APPLICATION_ID.getName()));
+        instanceReferenceAlarm.setBehindInstanceId(resultSet.getInt(ServiceReferenceAlarmTable.BEHIND_INSTANCE_ID.getName()));
+
+        instanceReferenceAlarm.setLastTimeBucket(resultSet.getLong(ServiceReferenceAlarmTable.LAST_TIME_BUCKET.getName()));
+        instanceReferenceAlarm.setAlarmContent(resultSet.getString(ServiceReferenceAlarmTable.ALARM_CONTENT.getName()));
+
+        return instanceReferenceAlarm;
+    }
+
+    @Override protected Map<String, Object> streamDataToShardingjdbcData(InstanceReferenceAlarm streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(ServiceReferenceAlarmTable.ID.getName(), streamData.getId());
+        target.put(ServiceReferenceAlarmTable.SOURCE_VALUE.getName(), streamData.getSourceValue());
+
+        target.put(ServiceReferenceAlarmTable.ALARM_TYPE.getName(), streamData.getAlarmType());
+
+        target.put(ServiceReferenceAlarmTable.FRONT_APPLICATION_ID.getName(), streamData.getFrontApplicationId());
+        target.put(ServiceReferenceAlarmTable.FRONT_INSTANCE_ID.getName(), streamData.getFrontInstanceId());
+        target.put(ServiceReferenceAlarmTable.BEHIND_APPLICATION_ID.getName(), streamData.getBehindApplicationId());
+        target.put(ServiceReferenceAlarmTable.BEHIND_INSTANCE_ID.getName(), streamData.getBehindInstanceId());
+
+        target.put(ServiceReferenceAlarmTable.LAST_TIME_BUCKET.getName(), streamData.getLastTimeBucket());
+        target.put(ServiceReferenceAlarmTable.ALARM_CONTENT.getName(), streamData.getAlarmContent());
+
+        return target;
+    }
+    
+    @Override protected String timeBucketColumnNameForDelete() {
+        return InstanceReferenceAlarmTable.LAST_TIME_BUCKET.getName();
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + InstanceReferenceAlarmTable.TABLE)
+    @Override public InstanceReferenceAlarm get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ServiceAlarmListShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ServiceAlarmListShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..2e92c09
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ServiceAlarmListShardingjdbcPersistenceDAO.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IServiceAlarmListPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ServiceAlarmList;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ServiceAlarmListTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ServiceAlarmListShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<ServiceAlarmList> implements IServiceAlarmListPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ServiceAlarmList> {
+
+    public ServiceAlarmListShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ServiceAlarmListTable.TABLE;
+    }
+
+    @Override protected ServiceAlarmList shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        ServiceAlarmList serviceAlarmList = new ServiceAlarmList();
+        serviceAlarmList.setId(resultSet.getString(ServiceAlarmListTable.ID.getName()));
+        serviceAlarmList.setSourceValue(resultSet.getInt(ServiceAlarmListTable.SOURCE_VALUE.getName()));
+
+        serviceAlarmList.setAlarmType(resultSet.getInt(ServiceAlarmListTable.ALARM_TYPE.getName()));
+
+        serviceAlarmList.setApplicationId(resultSet.getInt(ServiceAlarmListTable.APPLICATION_ID.getName()));
+        serviceAlarmList.setInstanceId(resultSet.getInt(ServiceAlarmListTable.INSTANCE_ID.getName()));
+        serviceAlarmList.setServiceId(resultSet.getInt(ServiceAlarmListTable.SERVICE_ID.getName()));
+
+        serviceAlarmList.setTimeBucket(resultSet.getLong(ServiceAlarmListTable.TIME_BUCKET.getName()));
+        serviceAlarmList.setAlarmContent(resultSet.getString(ServiceAlarmListTable.ALARM_CONTENT.getName()));
+
+        return serviceAlarmList;
+    }
+
+    @Override protected Map<String, Object> streamDataToShardingjdbcData(ServiceAlarmList streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(ServiceAlarmListTable.ID.getName(), streamData.getId());
+        target.put(ServiceAlarmListTable.SOURCE_VALUE.getName(), streamData.getSourceValue());
+
+        target.put(ServiceAlarmListTable.ALARM_TYPE.getName(), streamData.getAlarmType());
+
+        target.put(ServiceAlarmListTable.APPLICATION_ID.getName(), streamData.getApplicationId());
+        target.put(ServiceAlarmListTable.INSTANCE_ID.getName(), streamData.getInstanceId());
+        target.put(ServiceAlarmListTable.SERVICE_ID.getName(), streamData.getServiceId());
+
+        target.put(ServiceAlarmListTable.TIME_BUCKET.getName(), streamData.getTimeBucket());
+        target.put(ServiceAlarmListTable.ALARM_CONTENT.getName(), streamData.getAlarmContent());
+
+        return target;
+    }
+    
+    @Override protected String timeBucketColumnNameForDelete() {
+        return ServiceAlarmListTable.TIME_BUCKET.getName();
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + ServiceAlarmListTable.TABLE)
+    @Override public ServiceAlarmList get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ServiceAlarmShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ServiceAlarmShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..babda2f
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ServiceAlarmShardingjdbcPersistenceDAO.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IServiceAlarmPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ServiceAlarm;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ServiceAlarmTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ServiceAlarmShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<ServiceAlarm> implements IServiceAlarmPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ServiceAlarm> {
+
+    public ServiceAlarmShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ServiceAlarmTable.TABLE;
+    }
+
+    @Override protected ServiceAlarm shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        ServiceAlarm serviceAlarm = new ServiceAlarm();
+        serviceAlarm.setId(resultSet.getString(ServiceAlarmTable.ID.getName()));
+        serviceAlarm.setSourceValue(resultSet.getInt(ServiceAlarmTable.SOURCE_VALUE.getName()));
+
+        serviceAlarm.setAlarmType(resultSet.getInt(ServiceAlarmTable.ALARM_TYPE.getName()));
+
+        serviceAlarm.setApplicationId(resultSet.getInt(ServiceAlarmTable.APPLICATION_ID.getName()));
+        serviceAlarm.setInstanceId(resultSet.getInt(ServiceAlarmTable.INSTANCE_ID.getName()));
+        serviceAlarm.setServiceId(resultSet.getInt(ServiceAlarmTable.SERVICE_ID.getName()));
+
+        serviceAlarm.setLastTimeBucket(resultSet.getLong(ServiceAlarmTable.LAST_TIME_BUCKET.getName()));
+        serviceAlarm.setAlarmContent(resultSet.getString(ServiceAlarmTable.ALARM_CONTENT.getName()));
+
+        return serviceAlarm;
+    }
+
+    @Override protected Map<String, Object> streamDataToShardingjdbcData(ServiceAlarm streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(ServiceAlarmTable.ID.getName(), streamData.getId());
+        target.put(ServiceAlarmTable.SOURCE_VALUE.getName(), streamData.getSourceValue());
+
+        target.put(ServiceAlarmTable.ALARM_TYPE.getName(), streamData.getAlarmType());
+
+        target.put(ServiceAlarmTable.APPLICATION_ID.getName(), streamData.getApplicationId());
+        target.put(ServiceAlarmTable.INSTANCE_ID.getName(), streamData.getInstanceId());
+        target.put(ServiceAlarmTable.SERVICE_ID.getName(), streamData.getServiceId());
+
+        target.put(ServiceAlarmTable.LAST_TIME_BUCKET.getName(), streamData.getLastTimeBucket());
+        target.put(ServiceAlarmTable.ALARM_CONTENT.getName(), streamData.getAlarmContent());
+
+        return target;
+    }
+    
+    @Override protected String timeBucketColumnNameForDelete() {
+        return ServiceAlarmTable.LAST_TIME_BUCKET.getName();
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + ServiceAlarmTable.TABLE)
+    @Override public ServiceAlarm get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ServiceReferenceAlarmListShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ServiceReferenceAlarmListShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..21971fc
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ServiceReferenceAlarmListShardingjdbcPersistenceDAO.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IServiceReferenceAlarmListPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ServiceReferenceAlarmList;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ServiceReferenceAlarmListTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ServiceReferenceAlarmListShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<ServiceReferenceAlarmList> implements IServiceReferenceAlarmListPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ServiceReferenceAlarmList> {
+
+    public ServiceReferenceAlarmListShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ServiceReferenceAlarmListTable.TABLE;
+    }
+
+    @Override protected ServiceReferenceAlarmList shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        ServiceReferenceAlarmList serviceReferenceAlarmList = new ServiceReferenceAlarmList();
+        serviceReferenceAlarmList.setId(resultSet.getString(ServiceReferenceAlarmListTable.ID.getName()));
+        serviceReferenceAlarmList.setSourceValue(resultSet.getInt(ServiceReferenceAlarmListTable.SOURCE_VALUE.getName()));
+
+        serviceReferenceAlarmList.setAlarmType(resultSet.getInt(ServiceReferenceAlarmListTable.ALARM_TYPE.getName()));
+
+        serviceReferenceAlarmList.setFrontApplicationId(resultSet.getInt(ServiceReferenceAlarmListTable.FRONT_APPLICATION_ID.getName()));
+        serviceReferenceAlarmList.setFrontInstanceId(resultSet.getInt(ServiceReferenceAlarmListTable.FRONT_INSTANCE_ID.getName()));
+        serviceReferenceAlarmList.setFrontServiceId(resultSet.getInt(ServiceReferenceAlarmListTable.FRONT_SERVICE_ID.getName()));
+        serviceReferenceAlarmList.setBehindApplicationId(resultSet.getInt(ServiceReferenceAlarmListTable.BEHIND_APPLICATION_ID.getName()));
+        serviceReferenceAlarmList.setBehindInstanceId(resultSet.getInt(ServiceReferenceAlarmListTable.BEHIND_INSTANCE_ID.getName()));
+        serviceReferenceAlarmList.setBehindServiceId(resultSet.getInt(ServiceReferenceAlarmListTable.BEHIND_SERVICE_ID.getName()));
+
+        serviceReferenceAlarmList.setTimeBucket(resultSet.getLong(ServiceReferenceAlarmListTable.TIME_BUCKET.getName()));
+        serviceReferenceAlarmList.setAlarmContent(resultSet.getString(ServiceReferenceAlarmListTable.ALARM_CONTENT.getName()));
+
+        return serviceReferenceAlarmList;
+    }
+
+    @Override protected Map<String, Object> streamDataToShardingjdbcData(ServiceReferenceAlarmList streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(ServiceReferenceAlarmListTable.ID.getName(), streamData.getId());
+        target.put(ServiceReferenceAlarmListTable.SOURCE_VALUE.getName(), streamData.getSourceValue());
+
+        target.put(ServiceReferenceAlarmListTable.ALARM_TYPE.getName(), streamData.getAlarmType());
+
+        target.put(ServiceReferenceAlarmListTable.FRONT_APPLICATION_ID.getName(), streamData.getFrontApplicationId());
+        target.put(ServiceReferenceAlarmListTable.FRONT_INSTANCE_ID.getName(), streamData.getFrontInstanceId());
+        target.put(ServiceReferenceAlarmListTable.FRONT_SERVICE_ID.getName(), streamData.getFrontServiceId());
+        target.put(ServiceReferenceAlarmListTable.BEHIND_APPLICATION_ID.getName(), streamData.getBehindApplicationId());
+        target.put(ServiceReferenceAlarmListTable.BEHIND_INSTANCE_ID.getName(), streamData.getBehindInstanceId());
+        target.put(ServiceReferenceAlarmListTable.BEHIND_SERVICE_ID.getName(), streamData.getBehindServiceId());
+
+        target.put(ServiceReferenceAlarmListTable.TIME_BUCKET.getName(), streamData.getTimeBucket());
+        target.put(ServiceReferenceAlarmListTable.ALARM_CONTENT.getName(), streamData.getAlarmContent());
+
+        return target;
+    }
+    
+    @Override protected String timeBucketColumnNameForDelete() {
+        return ServiceReferenceAlarmListTable.TIME_BUCKET.getName();
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + ServiceReferenceAlarmListTable.TABLE)
+    @Override public ServiceReferenceAlarmList get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ServiceReferenceAlarmShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ServiceReferenceAlarmShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..afd94af
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/alarm/ServiceReferenceAlarmShardingjdbcPersistenceDAO.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.alarm;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.dao.alarm.IServiceReferenceAlarmPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ServiceReferenceAlarm;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ServiceReferenceAlarmTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ServiceReferenceAlarmShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<ServiceReferenceAlarm> implements IServiceReferenceAlarmPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ServiceReferenceAlarm> {
+
+    public ServiceReferenceAlarmShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ServiceReferenceAlarmTable.TABLE;
+    }
+
+    @Override protected ServiceReferenceAlarm shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        ServiceReferenceAlarm serviceReferenceAlarm = new ServiceReferenceAlarm();
+        serviceReferenceAlarm.setId(resultSet.getString(ServiceReferenceAlarmTable.ID.getName()));
+        serviceReferenceAlarm.setSourceValue(resultSet.getInt(ServiceReferenceAlarmTable.SOURCE_VALUE.getName()));
+
+        serviceReferenceAlarm.setAlarmType(resultSet.getInt(ServiceReferenceAlarmTable.ALARM_TYPE.getName()));
+
+        serviceReferenceAlarm.setFrontApplicationId(resultSet.getInt(ServiceReferenceAlarmTable.FRONT_APPLICATION_ID.getName()));
+        serviceReferenceAlarm.setFrontInstanceId(resultSet.getInt(ServiceReferenceAlarmTable.FRONT_INSTANCE_ID.getName()));
+        serviceReferenceAlarm.setFrontServiceId(resultSet.getInt(ServiceReferenceAlarmTable.FRONT_SERVICE_ID.getName()));
+        serviceReferenceAlarm.setBehindApplicationId(resultSet.getInt(ServiceReferenceAlarmTable.BEHIND_APPLICATION_ID.getName()));
+        serviceReferenceAlarm.setBehindInstanceId(resultSet.getInt(ServiceReferenceAlarmTable.BEHIND_INSTANCE_ID.getName()));
+        serviceReferenceAlarm.setBehindServiceId(resultSet.getInt(ServiceReferenceAlarmTable.BEHIND_SERVICE_ID.getName()));
+
+        serviceReferenceAlarm.setLastTimeBucket(resultSet.getLong(ServiceReferenceAlarmTable.LAST_TIME_BUCKET.getName()));
+        serviceReferenceAlarm.setAlarmContent(resultSet.getString(ServiceReferenceAlarmTable.ALARM_CONTENT.getName()));
+
+        return serviceReferenceAlarm;
+    }
+
+    @Override protected Map<String, Object> streamDataToShardingjdbcData(ServiceReferenceAlarm streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(ServiceReferenceAlarmTable.ID.getName(), streamData.getId());
+        target.put(ServiceReferenceAlarmTable.SOURCE_VALUE.getName(), streamData.getSourceValue());
+
+        target.put(ServiceReferenceAlarmTable.ALARM_TYPE.getName(), streamData.getAlarmType());
+
+        target.put(ServiceReferenceAlarmTable.FRONT_APPLICATION_ID.getName(), streamData.getFrontApplicationId());
+        target.put(ServiceReferenceAlarmTable.FRONT_INSTANCE_ID.getName(), streamData.getFrontInstanceId());
+        target.put(ServiceReferenceAlarmTable.FRONT_SERVICE_ID.getName(), streamData.getFrontServiceId());
+        target.put(ServiceReferenceAlarmTable.BEHIND_APPLICATION_ID.getName(), streamData.getBehindApplicationId());
+        target.put(ServiceReferenceAlarmTable.BEHIND_INSTANCE_ID.getName(), streamData.getBehindInstanceId());
+        target.put(ServiceReferenceAlarmTable.BEHIND_SERVICE_ID.getName(), streamData.getBehindServiceId());
+
+        target.put(ServiceReferenceAlarmTable.LAST_TIME_BUCKET.getName(), streamData.getLastTimeBucket());
+        target.put(ServiceReferenceAlarmTable.ALARM_CONTENT.getName(), streamData.getAlarmContent());
+
+        return target;
+    }
+    
+    @Override protected String timeBucketColumnNameForDelete() {
+        return ServiceReferenceAlarmTable.LAST_TIME_BUCKET.getName();
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + ServiceReferenceAlarmTable.TABLE)
+    @Override public ServiceReferenceAlarm get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/amp/AbstractApplicationMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/amp/AbstractApplicationMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..5e96776
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/amp/AbstractApplicationMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.amp;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.MetricTransformUtil;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMetric;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public abstract class AbstractApplicationMetricShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<ApplicationMetric> {
+
+    AbstractApplicationMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+    
+    @Override protected final String timeBucketColumnNameForDelete() {
+        return ApplicationMetricTable.TIME_BUCKET.getName();
+    }
+
+    @Override protected final ApplicationMetric shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        ApplicationMetric applicationMetric = new ApplicationMetric();
+        applicationMetric.setId(resultSet.getString(ApplicationMetricTable.ID.getName()));
+        applicationMetric.setMetricId(resultSet.getString(ApplicationMetricTable.METRIC_ID.getName()));
+
+        applicationMetric.setApplicationId(resultSet.getInt(ApplicationMetricTable.APPLICATION_ID.getName()));
+
+        MetricTransformUtil.INSTANCE.shardingjdbcDataToStreamData(resultSet, applicationMetric);
+
+        applicationMetric.setSatisfiedCount(resultSet.getLong(ApplicationMetricTable.SATISFIED_COUNT.getName()));
+        applicationMetric.setToleratingCount(resultSet.getLong(ApplicationMetricTable.TOLERATING_COUNT.getName()));
+        applicationMetric.setFrustratedCount(resultSet.getLong(ApplicationMetricTable.FRUSTRATED_COUNT.getName()));
+
+        return applicationMetric;
+    }
+
+    @Override protected final Map<String, Object> streamDataToShardingjdbcData(ApplicationMetric streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(ApplicationMetricTable.ID.getName(), streamData.getId());
+        target.put(ApplicationMetricTable.METRIC_ID.getName(), streamData.getMetricId());
+
+        target.put(ApplicationMetricTable.APPLICATION_ID.getName(), streamData.getApplicationId());
+
+        MetricTransformUtil.INSTANCE.streamDataToShardingjdbcData(streamData, target);
+
+        target.put(ApplicationMetricTable.SATISFIED_COUNT.getName(), streamData.getSatisfiedCount());
+        target.put(ApplicationMetricTable.TOLERATING_COUNT.getName(), streamData.getToleratingCount());
+        target.put(ApplicationMetricTable.FRUSTRATED_COUNT.getName(), streamData.getFrustratedCount());
+
+        return target;
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + ApplicationMetricTable.TABLE)
+    @Override public final ApplicationMetric get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/amp/ApplicationDayMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/amp/ApplicationDayMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..49df723
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/amp/ApplicationDayMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.amp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.amp.IApplicationDayMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMetric;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationDayMetricShardingjdbcPersistenceDAO extends AbstractApplicationMetricShardingjdbcPersistenceDAO implements IApplicationDayMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationMetric> {
+
+    public ApplicationDayMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Day.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/amp/ApplicationHourMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/amp/ApplicationHourMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..95dc4c6
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/amp/ApplicationHourMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.amp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.amp.IApplicationHourMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMetric;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationHourMetricShardingjdbcPersistenceDAO extends AbstractApplicationMetricShardingjdbcPersistenceDAO implements IApplicationHourMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationMetric> {
+
+    public ApplicationHourMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Hour.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/amp/ApplicationMinuteMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/amp/ApplicationMinuteMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..521e31c
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/amp/ApplicationMinuteMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.amp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.amp.IApplicationMinuteMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMetric;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationMinuteMetricShardingjdbcPersistenceDAO extends AbstractApplicationMetricShardingjdbcPersistenceDAO implements IApplicationMinuteMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationMetric> {
+
+    public ApplicationMinuteMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Minute.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/amp/ApplicationMonthMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/amp/ApplicationMonthMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..39f46e1
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/amp/ApplicationMonthMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.amp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.amp.IApplicationMonthMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMetric;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationMonthMetricShardingjdbcPersistenceDAO extends AbstractApplicationMetricShardingjdbcPersistenceDAO implements IApplicationMonthMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationMetric> {
+
+    public ApplicationMonthMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Month.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ampp/AbstractApplicationMappingShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ampp/AbstractApplicationMappingShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..f4ff616
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ampp/AbstractApplicationMappingShardingjdbcPersistenceDAO.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ampp;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMapping;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMappingTable;
+
+/**
+ * @author linjiaqi
+ */
+public abstract class AbstractApplicationMappingShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<ApplicationMapping> {
+
+    AbstractApplicationMappingShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+    
+    @Override protected final String timeBucketColumnNameForDelete() {
+        return ApplicationMappingTable.TIME_BUCKET.getName();
+    }
+
+    @Override protected final ApplicationMapping shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        ApplicationMapping applicationMapping = new ApplicationMapping();
+        applicationMapping.setId(resultSet.getString(ApplicationMappingTable.ID.getName()));
+        applicationMapping.setMetricId(resultSet.getString(ApplicationMappingTable.METRIC_ID.getName()));
+
+        applicationMapping.setApplicationId(resultSet.getInt(ApplicationMappingTable.APPLICATION_ID.getName()));
+        applicationMapping.setMappingApplicationId(resultSet.getInt(ApplicationMappingTable.MAPPING_APPLICATION_ID.getName()));
+        applicationMapping.setTimeBucket(resultSet.getLong(ApplicationMappingTable.TIME_BUCKET.getName()));
+        return applicationMapping;
+    }
+
+    @Override protected final Map<String, Object> streamDataToShardingjdbcData(ApplicationMapping streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(ApplicationMappingTable.ID.getName(), streamData.getId());
+        target.put(ApplicationMappingTable.METRIC_ID.getName(), streamData.getMetricId());
+
+        target.put(ApplicationMappingTable.APPLICATION_ID.getName(), streamData.getApplicationId());
+        target.put(ApplicationMappingTable.MAPPING_APPLICATION_ID.getName(), streamData.getMappingApplicationId());
+        target.put(ApplicationMappingTable.TIME_BUCKET.getName(), streamData.getTimeBucket());
+
+        return target;
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + ApplicationMappingTable.TABLE)
+    @Override public final ApplicationMapping get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ampp/ApplicationMappingDayShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ampp/ApplicationMappingDayShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..f354b37
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ampp/ApplicationMappingDayShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ampp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.ampp.IApplicationMappingDayPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMapping;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMappingTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationMappingDayShardingjdbcPersistenceDAO extends AbstractApplicationMappingShardingjdbcPersistenceDAO implements IApplicationMappingDayPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationMapping> {
+
+    public ApplicationMappingDayShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationMappingTable.TABLE + Const.ID_SPLIT + TimePyramid.Day.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ampp/ApplicationMappingHourShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ampp/ApplicationMappingHourShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..8300e4f
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ampp/ApplicationMappingHourShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ampp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.ampp.IApplicationMappingHourPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMapping;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMappingTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationMappingHourShardingjdbcPersistenceDAO extends AbstractApplicationMappingShardingjdbcPersistenceDAO implements IApplicationMappingHourPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationMapping> {
+
+    public ApplicationMappingHourShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationMappingTable.TABLE + Const.ID_SPLIT + TimePyramid.Hour.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ampp/ApplicationMappingMinuteShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ampp/ApplicationMappingMinuteShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..ecef0f2
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ampp/ApplicationMappingMinuteShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ampp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.ampp.IApplicationMappingMinutePersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMapping;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMappingTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationMappingMinuteShardingjdbcPersistenceDAO extends AbstractApplicationMappingShardingjdbcPersistenceDAO implements IApplicationMappingMinutePersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationMapping> {
+
+    public ApplicationMappingMinuteShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationMappingTable.TABLE + Const.ID_SPLIT + TimePyramid.Minute.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ampp/ApplicationMappingMonthShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ampp/ApplicationMappingMonthShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..f467893
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ampp/ApplicationMappingMonthShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ampp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.ampp.IApplicationMappingMonthPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMapping;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMappingTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationMappingMonthShardingjdbcPersistenceDAO extends AbstractApplicationMappingShardingjdbcPersistenceDAO implements IApplicationMappingMonthPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationMapping> {
+
+    public ApplicationMappingMonthShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationMappingTable.TABLE + Const.ID_SPLIT + TimePyramid.Month.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/armp/AbstractApplicationReferenceMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/armp/AbstractApplicationReferenceMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..8ecea3d
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/armp/AbstractApplicationReferenceMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.armp;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.MetricTransformUtil;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationReferenceMetric;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationReferenceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public abstract class AbstractApplicationReferenceMetricShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<ApplicationReferenceMetric> {
+
+    AbstractApplicationReferenceMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+    
+    @Override protected final String timeBucketColumnNameForDelete() {
+        return ApplicationReferenceMetricTable.TIME_BUCKET.getName();
+    }
+
+    @Override protected final ApplicationReferenceMetric shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        ApplicationReferenceMetric applicationReferenceMetric = new ApplicationReferenceMetric();
+        applicationReferenceMetric.setId(resultSet.getString(ApplicationReferenceMetricTable.ID.getName()));
+        applicationReferenceMetric.setMetricId(resultSet.getString(ApplicationReferenceMetricTable.METRIC_ID.getName()));
+
+        applicationReferenceMetric.setFrontApplicationId(resultSet.getInt(ApplicationReferenceMetricTable.FRONT_APPLICATION_ID.getName()));
+        applicationReferenceMetric.setBehindApplicationId(resultSet.getInt(ApplicationReferenceMetricTable.BEHIND_APPLICATION_ID.getName()));
+
+        MetricTransformUtil.INSTANCE.shardingjdbcDataToStreamData(resultSet, applicationReferenceMetric);
+
+        applicationReferenceMetric.setSatisfiedCount(resultSet.getLong(ApplicationReferenceMetricTable.SATISFIED_COUNT.getName()));
+        applicationReferenceMetric.setToleratingCount(resultSet.getLong(ApplicationReferenceMetricTable.TOLERATING_COUNT.getName()));
+        applicationReferenceMetric.setFrustratedCount(resultSet.getLong(ApplicationReferenceMetricTable.FRUSTRATED_COUNT.getName()));
+
+        return applicationReferenceMetric;
+    }
+
+    @Override protected final Map<String, Object> streamDataToShardingjdbcData(ApplicationReferenceMetric streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(ApplicationReferenceMetricTable.ID.getName(), streamData.getId());
+        target.put(ApplicationReferenceMetricTable.METRIC_ID.getName(), streamData.getMetricId());
+
+        target.put(ApplicationReferenceMetricTable.FRONT_APPLICATION_ID.getName(), streamData.getFrontApplicationId());
+        target.put(ApplicationReferenceMetricTable.BEHIND_APPLICATION_ID.getName(), streamData.getBehindApplicationId());
+
+        MetricTransformUtil.INSTANCE.streamDataToShardingjdbcData(streamData, target);
+
+        target.put(ApplicationReferenceMetricTable.SATISFIED_COUNT.getName(), streamData.getSatisfiedCount());
+        target.put(ApplicationReferenceMetricTable.TOLERATING_COUNT.getName(), streamData.getToleratingCount());
+        target.put(ApplicationReferenceMetricTable.FRUSTRATED_COUNT.getName(), streamData.getFrustratedCount());
+
+        return target;
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + ApplicationReferenceMetricTable.TABLE)
+    @Override public final ApplicationReferenceMetric get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/armp/ApplicationReferenceDayMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/armp/ApplicationReferenceDayMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..8065d76
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/armp/ApplicationReferenceDayMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.armp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.armp.IApplicationReferenceDayMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationReferenceMetric;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationReferenceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationReferenceDayMetricShardingjdbcPersistenceDAO extends AbstractApplicationReferenceMetricShardingjdbcPersistenceDAO implements IApplicationReferenceDayMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationReferenceMetric> {
+
+    public ApplicationReferenceDayMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationReferenceMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Day.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/armp/ApplicationReferenceHourMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/armp/ApplicationReferenceHourMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..9267b5e
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/armp/ApplicationReferenceHourMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.armp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.armp.IApplicationReferenceHourMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationReferenceMetric;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationReferenceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationReferenceHourMetricShardingjdbcPersistenceDAO extends AbstractApplicationReferenceMetricShardingjdbcPersistenceDAO implements IApplicationReferenceHourMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationReferenceMetric> {
+
+    public ApplicationReferenceHourMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationReferenceMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Hour.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/armp/ApplicationReferenceMinuteMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/armp/ApplicationReferenceMinuteMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..c5089c7
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/armp/ApplicationReferenceMinuteMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.armp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.armp.IApplicationReferenceMinuteMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationReferenceMetric;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationReferenceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationReferenceMinuteMetricShardingjdbcPersistenceDAO extends AbstractApplicationReferenceMetricShardingjdbcPersistenceDAO implements IApplicationReferenceMinuteMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationReferenceMetric> {
+
+    public ApplicationReferenceMinuteMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationReferenceMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Minute.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/armp/ApplicationReferenceMonthMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/armp/ApplicationReferenceMonthMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..26df6f4
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/armp/ApplicationReferenceMonthMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.armp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.armp.IApplicationReferenceMonthMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationReferenceMetric;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationReferenceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationReferenceMonthMetricShardingjdbcPersistenceDAO extends AbstractApplicationReferenceMetricShardingjdbcPersistenceDAO implements IApplicationReferenceMonthMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ApplicationReferenceMetric> {
+
+    public ApplicationReferenceMonthMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ApplicationReferenceMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Month.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cache/ApplicationShardingjdbcCacheDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cache/ApplicationShardingjdbcCacheDAO.java
new file mode 100644
index 0000000..422c466
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cache/ApplicationShardingjdbcCacheDAO.java
@@ -0,0 +1,113 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.cache;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.cache.IApplicationCacheDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.register.Application;
+import org.apache.skywalking.apm.collector.storage.table.register.ApplicationTable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationShardingjdbcCacheDAO extends ShardingjdbcDAO implements IApplicationCacheDAO {
+
+    private static final Logger logger = LoggerFactory.getLogger(ApplicationShardingjdbcCacheDAO.class);
+
+    private static final String GET_APPLICATION_ID_SQL = "select {0} from {1} where {2} = ? and {3} = ?";
+    private static final String GET_APPLICATION_SQL = "select {0},{1} from {2} where {3} = ?";
+
+    public ApplicationShardingjdbcCacheDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override
+    public int getApplicationIdByCode(String applicationCode) {
+        logger.info("get the application id with application code = {}", applicationCode);
+        ShardingjdbcClient client = getClient();
+        String sql = SqlBuilder.buildSql(GET_APPLICATION_ID_SQL, ApplicationTable.APPLICATION_ID.getName(), ApplicationTable.TABLE, ApplicationTable.APPLICATION_CODE.getName(), ApplicationTable.IS_ADDRESS.getName());
+
+        Object[] params = new Object[] {applicationCode, false};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            if (rs.next()) {
+                return rs.getInt(1);
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return 0;
+    }
+
+    @Override public Application getApplication(int applicationId) {
+        logger.debug("get application code, applicationId: {}", applicationId);
+        ShardingjdbcClient client = getClient();
+        String sql = SqlBuilder.buildSql(GET_APPLICATION_SQL, ApplicationTable.APPLICATION_CODE.getName(), ApplicationTable.IS_ADDRESS.getName(), ApplicationTable.TABLE, ApplicationTable.APPLICATION_ID.getName());
+        Object[] params = new Object[] {applicationId};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            if (rs.next()) {
+                Application application = new Application();
+                application.setApplicationId(applicationId);
+                application.setApplicationCode(rs.getString(1));
+                application.setIsAddress(rs.getInt(2));
+                return application;
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return null;
+    }
+
+    @Override public int getApplicationIdByAddressId(int addressId) {
+        logger.info("get the application id with address id = {}", addressId);
+        ShardingjdbcClient client = getClient();
+        String sql = SqlBuilder.buildSql(GET_APPLICATION_ID_SQL, ApplicationTable.APPLICATION_ID.getName(), ApplicationTable.TABLE, ApplicationTable.ADDRESS_ID.getName(), ApplicationTable.IS_ADDRESS.getName());
+
+        Object[] params = new Object[] {addressId, true};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            if (rs.next()) {
+                return rs.getInt(1);
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return 0;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cache/InstanceShardingjdbcCacheDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cache/InstanceShardingjdbcCacheDAO.java
new file mode 100644
index 0000000..eeb748a
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cache/InstanceShardingjdbcCacheDAO.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.cache;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.core.util.BooleanUtils;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.cache.IInstanceCacheDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.register.InstanceTable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceShardingjdbcCacheDAO extends ShardingjdbcDAO implements IInstanceCacheDAO {
+
+    private static final Logger logger = LoggerFactory.getLogger(InstanceShardingjdbcCacheDAO.class);
+
+    private static final String GET_APPLICATION_ID_SQL = "select {0} from {1} where {2} = ?";
+    private static final String GET_INSTANCE_ID_SQL = "select {0} from {1} where {2} = ? and {3} = ? and {4} = ?";
+
+    public InstanceShardingjdbcCacheDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override public int getApplicationId(int instanceId) {
+        logger.info("get the application id by instance id = {}", instanceId);
+        ShardingjdbcClient client = getClient();
+        String sql = SqlBuilder.buildSql(GET_APPLICATION_ID_SQL, InstanceTable.APPLICATION_ID.getName(), InstanceTable.TABLE, InstanceTable.INSTANCE_ID.getName());
+        Object[] params = new Object[] {instanceId};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            if (rs.next()) {
+                return rs.getInt(InstanceTable.APPLICATION_ID.getName());
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return 0;
+    }
+
+    @Override public int getInstanceIdByAgentUUID(int applicationId, String agentUUID) {
+        logger.info("get the instance id by application id = {}, agentUUID = {}", applicationId, agentUUID);
+        ShardingjdbcClient client = getClient();
+        String sql = SqlBuilder.buildSql(GET_INSTANCE_ID_SQL, InstanceTable.INSTANCE_ID.getName(), InstanceTable.TABLE, InstanceTable.APPLICATION_ID.getName(),
+            InstanceTable.AGENT_UUID.getName(), InstanceTable.IS_ADDRESS.getName());
+        Object[] params = new Object[] {applicationId, agentUUID, BooleanUtils.FALSE};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            if (rs.next()) {
+                return rs.getInt(InstanceTable.INSTANCE_ID.getName());
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return 0;
+    }
+
+    @Override public int getInstanceIdByAddressId(int applicationId, int addressId) {
+        logger.info("get the instance id by application id = {}, address id = {}", applicationId, addressId);
+        ShardingjdbcClient client = getClient();
+        String sql = SqlBuilder.buildSql(GET_INSTANCE_ID_SQL, InstanceTable.INSTANCE_ID.getName(), InstanceTable.TABLE, InstanceTable.APPLICATION_ID.getName(),
+            InstanceTable.ADDRESS_ID.getName(), InstanceTable.IS_ADDRESS.getName());
+        Object[] params = new Object[] {applicationId, addressId, BooleanUtils.TRUE};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            if (rs.next()) {
+                return rs.getInt(InstanceTable.INSTANCE_ID.getName());
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return 0;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cache/NetworkAddressShardingjdbcCacheDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cache/NetworkAddressShardingjdbcCacheDAO.java
new file mode 100644
index 0000000..a5d6864
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cache/NetworkAddressShardingjdbcCacheDAO.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.cache;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.cache.INetworkAddressCacheDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.register.NetworkAddress;
+import org.apache.skywalking.apm.collector.storage.table.register.NetworkAddressTable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class NetworkAddressShardingjdbcCacheDAO extends ShardingjdbcDAO implements INetworkAddressCacheDAO {
+
+    private static final Logger logger = LoggerFactory.getLogger(NetworkAddressShardingjdbcCacheDAO.class);
+
+    private static final String GET_ADDRESS_ID_OR_CODE_SQL = "select {0} from {1} where {2} = ?";
+
+    public NetworkAddressShardingjdbcCacheDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override
+    public int getAddressId(String networkAddress) {
+        logger.info("get the address id with network address = {}", networkAddress);
+        ShardingjdbcClient client = getClient();
+
+        String sql = SqlBuilder.buildSql(GET_ADDRESS_ID_OR_CODE_SQL, NetworkAddressTable.ADDRESS_ID.getName(), NetworkAddressTable.TABLE, NetworkAddressTable.NETWORK_ADDRESS.getName());
+
+        Object[] params = new Object[] {networkAddress};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            if (rs.next()) {
+                return rs.getInt(1);
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return Const.NONE;
+    }
+
+    @Override public NetworkAddress getAddressById(int addressId) {
+        logger.debug("get network address, address id: {}", addressId);
+        ShardingjdbcClient client = getClient();
+
+        String dynamicSql = "select * from {0} where {1} = ?";
+        String sql = SqlBuilder.buildSql(dynamicSql, NetworkAddressTable.TABLE, NetworkAddressTable.ADDRESS_ID.getName());
+        Object[] params = new Object[] {addressId};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            if (rs.next()) {
+                NetworkAddress networkAddress = new NetworkAddress();
+                networkAddress.setId(rs.getString(NetworkAddressTable.ID.getName()));
+                networkAddress.setAddressId(rs.getInt(NetworkAddressTable.ADDRESS_ID.getName()));
+                networkAddress.setNetworkAddress(rs.getString(NetworkAddressTable.NETWORK_ADDRESS.getName()));
+                networkAddress.setSrcSpanLayer(rs.getInt(NetworkAddressTable.SRC_SPAN_LAYER.getName()));
+                networkAddress.setServerType(rs.getInt(NetworkAddressTable.SERVER_TYPE.getName()));
+                return networkAddress;
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return null;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cache/ServiceNameShardingjdbcCacheDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cache/ServiceNameShardingjdbcCacheDAO.java
new file mode 100644
index 0000000..594a3b9
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cache/ServiceNameShardingjdbcCacheDAO.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.cache;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.cache.IServiceNameCacheDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.register.ServiceName;
+import org.apache.skywalking.apm.collector.storage.table.register.ServiceNameTable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class ServiceNameShardingjdbcCacheDAO extends ShardingjdbcDAO implements IServiceNameCacheDAO {
+
+    private static final Logger logger = LoggerFactory.getLogger(ServiceNameShardingjdbcCacheDAO.class);
+
+    private static final String GET_SERVICE_NAME_SQL = "select {0},{1} from {2} where {3} = ?";
+    private static final String GET_SERVICE_ID_SQL = "select {0} from {1} where {2} = ? and {3} = ? and {4} = ? limit 1";
+
+    public ServiceNameShardingjdbcCacheDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override public ServiceName get(int serviceId) {
+        ShardingjdbcClient client = getClient();
+        String sql = SqlBuilder.buildSql(GET_SERVICE_NAME_SQL, ServiceNameTable.APPLICATION_ID.getName(), ServiceNameTable.SERVICE_NAME.getName(),
+            ServiceNameTable.TABLE, ServiceNameTable.SERVICE_ID.getName());
+        Object[] params = new Object[] {serviceId};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            if (rs.next()) {
+                ServiceName serviceName = new ServiceName();
+                serviceName.setServiceId(serviceId);
+                serviceName.setApplicationId(rs.getInt(ServiceNameTable.APPLICATION_ID.getName()));
+                serviceName.setServiceName(rs.getString(ServiceNameTable.SERVICE_NAME.getName()));
+                return serviceName;
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return null;
+    }
+
+    @Override public int getServiceId(int applicationId, int srcSpanType, String serviceName) {
+        ShardingjdbcClient client = getClient();
+        String sql = SqlBuilder.buildSql(GET_SERVICE_ID_SQL, ServiceNameTable.SERVICE_ID.getName(), ServiceNameTable.TABLE,
+            ServiceNameTable.APPLICATION_ID.getName(), ServiceNameTable.SRC_SPAN_TYPE.getName(), ServiceNameTable.SERVICE_NAME.getName());
+
+        Object[] params = new Object[] {applicationId, srcSpanType, serviceName};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            if (rs.next()) {
+                return rs.getInt(ServiceNameTable.SERVICE_ID.getName());
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return 0;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cpu/AbstractCpuMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cpu/AbstractCpuMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..93905f9
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cpu/AbstractCpuMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.cpu;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.jvm.CpuMetric;
+import org.apache.skywalking.apm.collector.storage.table.jvm.CpuMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public abstract class AbstractCpuMetricShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<CpuMetric> {
+
+    AbstractCpuMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+    
+    @Override protected final String timeBucketColumnNameForDelete() {
+        return CpuMetricTable.TIME_BUCKET.getName();
+    }
+
+    @Override protected final CpuMetric shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        CpuMetric cpuMetric = new CpuMetric();
+        cpuMetric.setId(resultSet.getString(CpuMetricTable.ID.getName()));
+        cpuMetric.setMetricId(resultSet.getString(CpuMetricTable.METRIC_ID.getName()));
+
+        cpuMetric.setInstanceId(resultSet.getInt(CpuMetricTable.INSTANCE_ID.getName()));
+
+        cpuMetric.setUsagePercent(resultSet.getDouble(CpuMetricTable.USAGE_PERCENT.getName()));
+        cpuMetric.setTimes(resultSet.getLong(CpuMetricTable.TIMES.getName()));
+        cpuMetric.setTimeBucket(resultSet.getLong(CpuMetricTable.TIME_BUCKET.getName()));
+
+        return cpuMetric;
+    }
+
+    @Override protected final Map<String, Object> streamDataToShardingjdbcData(CpuMetric streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(CpuMetricTable.ID.getName(), streamData.getId());
+        target.put(CpuMetricTable.METRIC_ID.getName(), streamData.getMetricId());
+
+        target.put(CpuMetricTable.INSTANCE_ID.getName(), streamData.getInstanceId());
+        target.put(CpuMetricTable.USAGE_PERCENT.getName(), streamData.getUsagePercent());
+        target.put(CpuMetricTable.TIMES.getName(), streamData.getTimes());
+        target.put(CpuMetricTable.TIME_BUCKET.getName(), streamData.getTimeBucket());
+
+        return target;
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + CpuMetricTable.TABLE)
+    @Override public final CpuMetric get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cpu/CpuDayMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cpu/CpuDayMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..1d0a33d
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cpu/CpuDayMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.cpu;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.cpu.ICpuDayMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.jvm.CpuMetric;
+import org.apache.skywalking.apm.collector.storage.table.jvm.CpuMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class CpuDayMetricShardingjdbcPersistenceDAO extends AbstractCpuMetricShardingjdbcPersistenceDAO implements ICpuDayMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, CpuMetric> {
+
+    public CpuDayMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return CpuMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Day.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cpu/CpuHourMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cpu/CpuHourMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..3982dd1
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cpu/CpuHourMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.cpu;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.cpu.ICpuHourMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.jvm.CpuMetric;
+import org.apache.skywalking.apm.collector.storage.table.jvm.CpuMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class CpuHourMetricShardingjdbcPersistenceDAO extends AbstractCpuMetricShardingjdbcPersistenceDAO implements ICpuHourMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, CpuMetric> {
+
+    public CpuHourMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return CpuMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Hour.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cpu/CpuMinuteMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cpu/CpuMinuteMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..546a30f
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cpu/CpuMinuteMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.cpu;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.cpu.ICpuMinuteMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.jvm.CpuMetric;
+import org.apache.skywalking.apm.collector.storage.table.jvm.CpuMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class CpuMinuteMetricShardingjdbcPersistenceDAO extends AbstractCpuMetricShardingjdbcPersistenceDAO implements ICpuMinuteMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, CpuMetric> {
+
+    public CpuMinuteMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return CpuMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Minute.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cpu/CpuMonthMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cpu/CpuMonthMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..cb3df78
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/cpu/CpuMonthMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.cpu;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.cpu.ICpuMonthMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.jvm.CpuMetric;
+import org.apache.skywalking.apm.collector.storage.table.jvm.CpuMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class CpuMonthMetricShardingjdbcPersistenceDAO extends AbstractCpuMetricShardingjdbcPersistenceDAO implements ICpuMonthMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, CpuMetric> {
+
+    public CpuMonthMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return CpuMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Month.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/gc/AbstractGCMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/gc/AbstractGCMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..8b35960
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/gc/AbstractGCMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.gc;
+
+import java.sql.*;
+import java.util.*;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.jvm.*;
+
+/**
+ * @author linjiaqi
+ */
+public abstract class AbstractGCMetricShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<GCMetric> {
+
+    AbstractGCMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+    
+    @Override protected final String timeBucketColumnNameForDelete() {
+        return GCMetricTable.TIME_BUCKET.getName();
+    }
+
+    @Override protected final GCMetric shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        GCMetric gcMetric = new GCMetric();
+        gcMetric.setId(resultSet.getString(GCMetricTable.ID.getName()));
+        gcMetric.setMetricId(resultSet.getString(GCMetricTable.METRIC_ID.getName()));
+
+        gcMetric.setInstanceId(resultSet.getInt(GCMetricTable.INSTANCE_ID.getName()));
+        gcMetric.setPhrase(resultSet.getInt(GCMetricTable.PHRASE.getName()));
+
+        gcMetric.setCount(resultSet.getLong(GCMetricTable.COUNT.getName()));
+        gcMetric.setTimes(resultSet.getLong(GCMetricTable.TIMES.getName()));
+        gcMetric.setDuration(resultSet.getLong(GCMetricTable.DURATION.getName()));
+
+        gcMetric.setTimeBucket(resultSet.getLong(GCMetricTable.TIME_BUCKET.getName()));
+
+        return gcMetric;
+    }
+
+    @Override protected final Map<String, Object> streamDataToShardingjdbcData(GCMetric streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(GCMetricTable.ID.getName(), streamData.getId());
+        target.put(GCMetricTable.METRIC_ID.getName(), streamData.getMetricId());
+
+        target.put(GCMetricTable.INSTANCE_ID.getName(), streamData.getInstanceId());
+        target.put(GCMetricTable.PHRASE.getName(), streamData.getPhrase());
+        target.put(GCMetricTable.COUNT.getName(), streamData.getCount());
+        target.put(GCMetricTable.TIMES.getName(), streamData.getTimes());
+        target.put(GCMetricTable.DURATION.getName(), streamData.getDuration());
+        target.put(GCMetricTable.TIME_BUCKET.getName(), streamData.getTimeBucket());
+
+        return target;
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + GCMetricTable.TABLE)
+    @Override public final GCMetric get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/gc/GCDayMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/gc/GCDayMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..4697634
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/gc/GCDayMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.gc;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.gc.IGCDayMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.jvm.GCMetric;
+import org.apache.skywalking.apm.collector.storage.table.jvm.GCMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class GCDayMetricShardingjdbcPersistenceDAO extends AbstractGCMetricShardingjdbcPersistenceDAO implements IGCDayMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, GCMetric> {
+
+    public GCDayMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return GCMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Day.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/gc/GCHourMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/gc/GCHourMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..aeb539e
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/gc/GCHourMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.gc;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.gc.IGCHourMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.jvm.GCMetric;
+import org.apache.skywalking.apm.collector.storage.table.jvm.GCMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class GCHourMetricShardingjdbcPersistenceDAO extends AbstractGCMetricShardingjdbcPersistenceDAO implements IGCHourMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, GCMetric> {
+
+    public GCHourMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return GCMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Hour.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/gc/GCMinuteMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/gc/GCMinuteMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..fa24670
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/gc/GCMinuteMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.gc;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.gc.IGCMinuteMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.jvm.GCMetric;
+import org.apache.skywalking.apm.collector.storage.table.jvm.GCMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class GCMinuteMetricShardingjdbcPersistenceDAO extends AbstractGCMetricShardingjdbcPersistenceDAO implements IGCMinuteMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, GCMetric> {
+
+    public GCMinuteMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return GCMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Minute.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/gc/GCMonthMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/gc/GCMonthMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..52129bd
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/gc/GCMonthMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.gc;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.gc.IGCMonthMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.jvm.GCMetric;
+import org.apache.skywalking.apm.collector.storage.table.jvm.GCMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class GCMonthMetricShardingjdbcPersistenceDAO extends AbstractGCMetricShardingjdbcPersistenceDAO implements IGCMonthMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, GCMetric> {
+
+    public GCMonthMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return GCMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Month.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/imp/AbstractInstanceMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/imp/AbstractInstanceMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..d1814cb
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/imp/AbstractInstanceMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.imp;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.MetricTransformUtil;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMetric;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public abstract class AbstractInstanceMetricShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<InstanceMetric> {
+
+    AbstractInstanceMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+    
+    @Override protected final String timeBucketColumnNameForDelete() {
+        return InstanceMetricTable.TIME_BUCKET.getName();
+    }
+
+    @Override protected final InstanceMetric shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        InstanceMetric instanceMetric = new InstanceMetric();
+
+        instanceMetric.setId(resultSet.getString(InstanceMetricTable.ID.getName()));
+        instanceMetric.setMetricId(resultSet.getString(InstanceMetricTable.METRIC_ID.getName()));
+        instanceMetric.setApplicationId(resultSet.getInt(InstanceMetricTable.APPLICATION_ID.getName()));
+        instanceMetric.setInstanceId(resultSet.getInt(InstanceMetricTable.INSTANCE_ID.getName()));
+
+        MetricTransformUtil.INSTANCE.shardingjdbcDataToStreamData(resultSet, instanceMetric);
+        return instanceMetric;
+    }
+
+    @Override protected final Map<String, Object> streamDataToShardingjdbcData(InstanceMetric streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(InstanceMetricTable.ID.getName(), streamData.getId());
+        target.put(InstanceMetricTable.METRIC_ID.getName(), streamData.getMetricId());
+
+        target.put(InstanceMetricTable.APPLICATION_ID.getName(), streamData.getApplicationId());
+        target.put(InstanceMetricTable.INSTANCE_ID.getName(), streamData.getInstanceId());
+
+        MetricTransformUtil.INSTANCE.streamDataToShardingjdbcData(streamData, target);
+
+        return target;
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + InstanceMetricTable.TABLE)
+    @Override public final InstanceMetric get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/imp/InstanceDayMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/imp/InstanceDayMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..f81a0ab
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/imp/InstanceDayMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.imp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.imp.IInstanceDayMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMetric;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceDayMetricShardingjdbcPersistenceDAO extends AbstractInstanceMetricShardingjdbcPersistenceDAO implements IInstanceDayMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, InstanceMetric> {
+
+    public InstanceDayMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return InstanceMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Day.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/imp/InstanceHourMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/imp/InstanceHourMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..f9a8998
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/imp/InstanceHourMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.imp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.imp.IInstanceHourMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMetric;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceHourMetricShardingjdbcPersistenceDAO extends AbstractInstanceMetricShardingjdbcPersistenceDAO implements IInstanceHourMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, InstanceMetric> {
+
+    public InstanceHourMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return InstanceMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Hour.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/imp/InstanceMinuteMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/imp/InstanceMinuteMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..619ae20
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/imp/InstanceMinuteMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.imp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.imp.IInstanceMinuteMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMetric;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceMinuteMetricShardingjdbcPersistenceDAO extends AbstractInstanceMetricShardingjdbcPersistenceDAO implements IInstanceMinuteMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, InstanceMetric> {
+
+    public InstanceMinuteMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return InstanceMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Minute.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/imp/InstanceMonthMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/imp/InstanceMonthMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..58bc59a
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/imp/InstanceMonthMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.imp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.imp.IInstanceMonthMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMetric;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceMonthMetricShardingjdbcPersistenceDAO extends AbstractInstanceMetricShardingjdbcPersistenceDAO implements IInstanceMonthMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, InstanceMetric> {
+
+    public InstanceMonthMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return InstanceMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Month.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/impp/AbstractInstanceMappingShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/impp/AbstractInstanceMappingShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..476f6f3
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/impp/AbstractInstanceMappingShardingjdbcPersistenceDAO.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.impp;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMapping;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMappingTable;
+
+/**
+ * @author linjiaqi
+ */
+public abstract class AbstractInstanceMappingShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<InstanceMapping> {
+
+    AbstractInstanceMappingShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+    
+    @Override protected final String timeBucketColumnNameForDelete() {
+        return InstanceMappingTable.TIME_BUCKET.getName();
+    }
+
+    @Override protected final InstanceMapping shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        InstanceMapping instanceMapping = new InstanceMapping();
+        instanceMapping.setId(resultSet.getString(InstanceMappingTable.ID.getName()));
+        instanceMapping.setMetricId(resultSet.getString(InstanceMappingTable.METRIC_ID.getName()));
+
+        instanceMapping.setApplicationId(resultSet.getInt(InstanceMappingTable.APPLICATION_ID.getName()));
+        instanceMapping.setInstanceId(resultSet.getInt(InstanceMappingTable.INSTANCE_ID.getName()));
+        instanceMapping.setAddressId(resultSet.getInt(InstanceMappingTable.ADDRESS_ID.getName()));
+        instanceMapping.setTimeBucket(resultSet.getLong(InstanceMappingTable.TIME_BUCKET.getName()));
+        return instanceMapping;
+    }
+
+    @Override protected final Map<String, Object> streamDataToShardingjdbcData(InstanceMapping streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(InstanceMappingTable.ID.getName(), streamData.getId());
+        target.put(InstanceMappingTable.METRIC_ID.getName(), streamData.getMetricId());
+
+        target.put(InstanceMappingTable.APPLICATION_ID.getName(), streamData.getApplicationId());
+        target.put(InstanceMappingTable.INSTANCE_ID.getName(), streamData.getInstanceId());
+        target.put(InstanceMappingTable.ADDRESS_ID.getName(), streamData.getAddressId());
+        target.put(InstanceMappingTable.TIME_BUCKET.getName(), streamData.getTimeBucket());
+
+        return target;
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + InstanceMappingTable.TABLE)
+    @Override public final InstanceMapping get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/impp/InstanceMappingDayShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/impp/InstanceMappingDayShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..007f4ce
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/impp/InstanceMappingDayShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.impp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.impp.IInstanceMappingDayPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMapping;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMappingTable;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceMappingDayShardingjdbcPersistenceDAO extends AbstractInstanceMappingShardingjdbcPersistenceDAO implements IInstanceMappingDayPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, InstanceMapping> {
+
+    public InstanceMappingDayShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return InstanceMappingTable.TABLE + Const.ID_SPLIT + TimePyramid.Day.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/impp/InstanceMappingHourShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/impp/InstanceMappingHourShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..5d9ea47
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/impp/InstanceMappingHourShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.impp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.impp.IInstanceMappingHourPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMapping;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMappingTable;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceMappingHourShardingjdbcPersistenceDAO extends AbstractInstanceMappingShardingjdbcPersistenceDAO implements IInstanceMappingHourPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, InstanceMapping> {
+
+    public InstanceMappingHourShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return InstanceMappingTable.TABLE + Const.ID_SPLIT + TimePyramid.Hour.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/impp/InstanceMappingMinuteShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/impp/InstanceMappingMinuteShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..ff74bed
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/impp/InstanceMappingMinuteShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.impp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.impp.IInstanceMappingMinutePersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMapping;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMappingTable;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceMappingMinuteShardingjdbcPersistenceDAO extends AbstractInstanceMappingShardingjdbcPersistenceDAO implements IInstanceMappingMinutePersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, InstanceMapping> {
+
+    public InstanceMappingMinuteShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return InstanceMappingTable.TABLE + Const.ID_SPLIT + TimePyramid.Minute.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/impp/InstanceMappingMonthShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/impp/InstanceMappingMonthShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..48a4e8f
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/impp/InstanceMappingMonthShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.impp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.impp.IInstanceMappingMonthPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMapping;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMappingTable;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceMappingMonthShardingjdbcPersistenceDAO extends AbstractInstanceMappingShardingjdbcPersistenceDAO implements IInstanceMappingMonthPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, InstanceMapping> {
+
+    public InstanceMappingMonthShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return InstanceMappingTable.TABLE + Const.ID_SPLIT + TimePyramid.Month.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/irmp/AbstractInstanceReferenceMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/irmp/AbstractInstanceReferenceMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..55196a9
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/irmp/AbstractInstanceReferenceMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.irmp;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.MetricTransformUtil;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceReferenceMetric;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceReferenceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public abstract class AbstractInstanceReferenceMetricShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<InstanceReferenceMetric> {
+
+    AbstractInstanceReferenceMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+    
+    @Override protected final String timeBucketColumnNameForDelete() {
+        return InstanceReferenceMetricTable.TIME_BUCKET.getName();
+    }
+
+    @Override protected final InstanceReferenceMetric shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        InstanceReferenceMetric instanceReferenceMetric = new InstanceReferenceMetric();
+        instanceReferenceMetric.setId(resultSet.getString(InstanceReferenceMetricTable.ID.getName()));
+        instanceReferenceMetric.setMetricId(resultSet.getString(InstanceReferenceMetricTable.METRIC_ID.getName()));
+
+        instanceReferenceMetric.setFrontApplicationId(resultSet.getInt(InstanceReferenceMetricTable.FRONT_APPLICATION_ID.getName()));
+        instanceReferenceMetric.setBehindApplicationId(resultSet.getInt(InstanceReferenceMetricTable.BEHIND_APPLICATION_ID.getName()));
+        instanceReferenceMetric.setFrontInstanceId(resultSet.getInt(InstanceReferenceMetricTable.FRONT_INSTANCE_ID.getName()));
+        instanceReferenceMetric.setBehindInstanceId(resultSet.getInt(InstanceReferenceMetricTable.BEHIND_INSTANCE_ID.getName()));
+
+        MetricTransformUtil.INSTANCE.shardingjdbcDataToStreamData(resultSet, instanceReferenceMetric);
+
+        return instanceReferenceMetric;
+    }
+
+    @Override protected final Map<String, Object> streamDataToShardingjdbcData(InstanceReferenceMetric streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(InstanceReferenceMetricTable.ID.getName(), streamData.getId());
+        target.put(InstanceReferenceMetricTable.METRIC_ID.getName(), streamData.getMetricId());
+
+        target.put(InstanceReferenceMetricTable.FRONT_APPLICATION_ID.getName(), streamData.getFrontApplicationId());
+        target.put(InstanceReferenceMetricTable.BEHIND_APPLICATION_ID.getName(), streamData.getBehindApplicationId());
+        target.put(InstanceReferenceMetricTable.FRONT_INSTANCE_ID.getName(), streamData.getFrontInstanceId());
+        target.put(InstanceReferenceMetricTable.BEHIND_INSTANCE_ID.getName(), streamData.getBehindInstanceId());
+
+        MetricTransformUtil.INSTANCE.streamDataToShardingjdbcData(streamData, target);
+
+        return target;
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + InstanceReferenceMetricTable.TABLE)
+    @Override public final InstanceReferenceMetric get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/irmp/InstanceReferenceDayMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/irmp/InstanceReferenceDayMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..48ee4c5
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/irmp/InstanceReferenceDayMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.irmp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.irmp.IInstanceReferenceDayMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceReferenceMetric;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceReferenceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceReferenceDayMetricShardingjdbcPersistenceDAO extends AbstractInstanceReferenceMetricShardingjdbcPersistenceDAO implements IInstanceReferenceDayMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, InstanceReferenceMetric> {
+
+    public InstanceReferenceDayMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return InstanceReferenceMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Day.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/irmp/InstanceReferenceHourMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/irmp/InstanceReferenceHourMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..0fabe53
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/irmp/InstanceReferenceHourMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.irmp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.irmp.IInstanceReferenceHourMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceReferenceMetric;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceReferenceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceReferenceHourMetricShardingjdbcPersistenceDAO extends AbstractInstanceReferenceMetricShardingjdbcPersistenceDAO implements IInstanceReferenceHourMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, InstanceReferenceMetric> {
+
+    public InstanceReferenceHourMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return InstanceReferenceMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Hour.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/irmp/InstanceReferenceMinuteMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/irmp/InstanceReferenceMinuteMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..43ff6a5
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/irmp/InstanceReferenceMinuteMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.irmp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.irmp.IInstanceReferenceMinuteMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceReferenceMetric;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceReferenceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceReferenceMinuteMetricShardingjdbcPersistenceDAO extends AbstractInstanceReferenceMetricShardingjdbcPersistenceDAO implements IInstanceReferenceMinuteMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, InstanceReferenceMetric> {
+
+    public InstanceReferenceMinuteMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return InstanceReferenceMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Minute.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/irmp/InstanceReferenceMonthMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/irmp/InstanceReferenceMonthMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..7112dfa
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/irmp/InstanceReferenceMonthMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.irmp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.irmp.IInstanceReferenceMonthMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceReferenceMetric;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceReferenceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceReferenceMonthMetricShardingjdbcPersistenceDAO extends AbstractInstanceReferenceMetricShardingjdbcPersistenceDAO implements IInstanceReferenceMonthMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, InstanceReferenceMetric> {
+
+    public InstanceReferenceMonthMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return InstanceReferenceMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Month.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/memory/AbstractMemoryMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/memory/AbstractMemoryMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..b86b47f
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/memory/AbstractMemoryMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.memory;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryMetric;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public abstract class AbstractMemoryMetricShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<MemoryMetric> {
+
+    AbstractMemoryMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+    
+    @Override protected final String timeBucketColumnNameForDelete() {
+        return MemoryMetricTable.TIME_BUCKET.getName();
+    }
+
+    @Override protected final MemoryMetric shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        MemoryMetric memoryMetric = new MemoryMetric();
+        memoryMetric.setId(resultSet.getString(MemoryMetricTable.ID.getName()));
+        memoryMetric.setMetricId(resultSet.getString(MemoryMetricTable.METRIC_ID.getName()));
+
+        memoryMetric.setInstanceId(resultSet.getInt(MemoryMetricTable.INSTANCE_ID.getName()));
+        memoryMetric.setIsHeap(resultSet.getInt(MemoryMetricTable.IS_HEAP.getName()));
+
+        memoryMetric.setInit(resultSet.getLong(MemoryMetricTable.INIT.getName()));
+        memoryMetric.setMax(resultSet.getLong(MemoryMetricTable.MAX.getName()));
+        memoryMetric.setUsed(resultSet.getLong(MemoryMetricTable.USED.getName()));
+        memoryMetric.setCommitted(resultSet.getLong(MemoryMetricTable.COMMITTED.getName()));
+        memoryMetric.setTimes(resultSet.getLong(MemoryMetricTable.TIMES.getName()));
+
+        memoryMetric.setTimeBucket(resultSet.getLong(MemoryMetricTable.TIME_BUCKET.getName()));
+        return memoryMetric;
+    }
+
+    @Override protected final Map<String, Object> streamDataToShardingjdbcData(MemoryMetric streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(MemoryMetricTable.ID.getName(), streamData.getId());
+        target.put(MemoryMetricTable.METRIC_ID.getName(), streamData.getMetricId());
+
+        target.put(MemoryMetricTable.INSTANCE_ID.getName(), streamData.getInstanceId());
+        target.put(MemoryMetricTable.IS_HEAP.getName(), streamData.getIsHeap());
+        target.put(MemoryMetricTable.INIT.getName(), streamData.getInit());
+        target.put(MemoryMetricTable.MAX.getName(), streamData.getMax());
+        target.put(MemoryMetricTable.USED.getName(), streamData.getUsed());
+        target.put(MemoryMetricTable.COMMITTED.getName(), streamData.getCommitted());
+        target.put(MemoryMetricTable.TIMES.getName(), streamData.getTimes());
+        target.put(MemoryMetricTable.TIME_BUCKET.getName(), streamData.getTimeBucket());
+
+        return target;
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + MemoryMetricTable.TABLE)
+    @Override public final MemoryMetric get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/memory/MemoryDayMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/memory/MemoryDayMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..d979521
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/memory/MemoryDayMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.memory;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.memory.IMemoryDayMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryMetric;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class MemoryDayMetricShardingjdbcPersistenceDAO extends AbstractMemoryMetricShardingjdbcPersistenceDAO implements IMemoryDayMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, MemoryMetric> {
+
+    public MemoryDayMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return MemoryMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Day.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/memory/MemoryHourMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/memory/MemoryHourMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..982f506
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/memory/MemoryHourMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.memory;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.memory.IMemoryHourMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryMetric;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class MemoryHourMetricShardingjdbcPersistenceDAO extends AbstractMemoryMetricShardingjdbcPersistenceDAO implements IMemoryHourMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, MemoryMetric> {
+
+    public MemoryHourMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return MemoryMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Hour.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/memory/MemoryMinuteMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/memory/MemoryMinuteMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..abf32bb
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/memory/MemoryMinuteMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.memory;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.memory.IMemoryMinuteMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryMetric;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class MemoryMinuteMetricShardingjdbcPersistenceDAO extends AbstractMemoryMetricShardingjdbcPersistenceDAO implements IMemoryMinuteMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, MemoryMetric> {
+
+    public MemoryMinuteMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return MemoryMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Minute.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/memory/MemoryMonthMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/memory/MemoryMonthMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..de3119e
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/memory/MemoryMonthMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.memory;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.memory.IMemoryMonthMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryMetric;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class MemoryMonthMetricShardingjdbcPersistenceDAO extends AbstractMemoryMetricShardingjdbcPersistenceDAO implements IMemoryMonthMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, MemoryMetric> {
+
+    public MemoryMonthMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return MemoryMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Month.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/mpool/AbstractMemoryPoolMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/mpool/AbstractMemoryPoolMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..d0a0dba
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/mpool/AbstractMemoryPoolMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.mpool;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryPoolMetric;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryPoolMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public abstract class AbstractMemoryPoolMetricShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<MemoryPoolMetric> {
+
+    AbstractMemoryPoolMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+    
+    @Override
+    protected final String timeBucketColumnNameForDelete() {
+        return MemoryPoolMetricTable.TIME_BUCKET.getName();
+    }
+
+    @Override protected final MemoryPoolMetric shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        MemoryPoolMetric memoryPoolMetric = new MemoryPoolMetric();
+        memoryPoolMetric.setId(resultSet.getString(MemoryPoolMetricTable.ID.getName()));
+        memoryPoolMetric.setMetricId(resultSet.getString(MemoryPoolMetricTable.METRIC_ID.getName()));
+
+        memoryPoolMetric.setInstanceId(resultSet.getInt(MemoryPoolMetricTable.INSTANCE_ID.getName()));
+        memoryPoolMetric.setPoolType(resultSet.getInt(MemoryPoolMetricTable.POOL_TYPE.getName()));
+
+        memoryPoolMetric.setInit(resultSet.getLong(MemoryPoolMetricTable.INIT.getName()));
+        memoryPoolMetric.setMax(resultSet.getLong(MemoryPoolMetricTable.MAX.getName()));
+        memoryPoolMetric.setUsed(resultSet.getLong(MemoryPoolMetricTable.USED.getName()));
+        memoryPoolMetric.setCommitted(resultSet.getLong(MemoryPoolMetricTable.COMMITTED.getName()));
+        memoryPoolMetric.setTimes(resultSet.getLong(MemoryPoolMetricTable.TIMES.getName()));
+
+        memoryPoolMetric.setTimeBucket(resultSet.getLong(MemoryPoolMetricTable.TIME_BUCKET.getName()));
+        return memoryPoolMetric;
+    }
+
+    @Override protected final Map<String, Object> streamDataToShardingjdbcData(MemoryPoolMetric streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(MemoryPoolMetricTable.ID.getName(), streamData.getId());
+        target.put(MemoryPoolMetricTable.METRIC_ID.getName(), streamData.getMetricId());
+
+        target.put(MemoryPoolMetricTable.INSTANCE_ID.getName(), streamData.getInstanceId());
+        target.put(MemoryPoolMetricTable.POOL_TYPE.getName(), streamData.getPoolType());
+        target.put(MemoryPoolMetricTable.INIT.getName(), streamData.getInit());
+        target.put(MemoryPoolMetricTable.MAX.getName(), streamData.getMax());
+        target.put(MemoryPoolMetricTable.USED.getName(), streamData.getUsed());
+        target.put(MemoryPoolMetricTable.COMMITTED.getName(), streamData.getCommitted());
+        target.put(MemoryPoolMetricTable.TIMES.getName(), streamData.getTimes());
+        target.put(MemoryPoolMetricTable.TIME_BUCKET.getName(), streamData.getTimeBucket());
+
+        return target;
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + MemoryPoolMetricTable.TABLE)
+    @Override public final MemoryPoolMetric get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/mpool/MemoryPoolDayMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/mpool/MemoryPoolDayMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..c4b2b16
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/mpool/MemoryPoolDayMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.mpool;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.mpool.IMemoryPoolDayMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryPoolMetric;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryPoolMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class MemoryPoolDayMetricShardingjdbcPersistenceDAO extends AbstractMemoryPoolMetricShardingjdbcPersistenceDAO implements IMemoryPoolDayMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, MemoryPoolMetric> {
+
+    public MemoryPoolDayMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return MemoryPoolMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Day.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/mpool/MemoryPoolHourMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/mpool/MemoryPoolHourMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..12dddd9
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/mpool/MemoryPoolHourMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.mpool;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.mpool.IMemoryPoolHourMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryPoolMetric;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryPoolMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class MemoryPoolHourMetricShardingjdbcPersistenceDAO extends AbstractMemoryPoolMetricShardingjdbcPersistenceDAO implements IMemoryPoolHourMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, MemoryPoolMetric> {
+
+    public MemoryPoolHourMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return MemoryPoolMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Hour.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/mpool/MemoryPoolMinuteMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/mpool/MemoryPoolMinuteMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..beceade
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/mpool/MemoryPoolMinuteMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.mpool;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.mpool.IMemoryPoolMinuteMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryPoolMetric;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryPoolMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class MemoryPoolMinuteMetricShardingjdbcPersistenceDAO extends AbstractMemoryPoolMetricShardingjdbcPersistenceDAO implements IMemoryPoolMinuteMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, MemoryPoolMetric> {
+
+    public MemoryPoolMinuteMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return MemoryPoolMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Minute.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/mpool/MemoryPoolMonthMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/mpool/MemoryPoolMonthMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..a046798
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/mpool/MemoryPoolMonthMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.mpool;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.mpool.IMemoryPoolMonthMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryPoolMetric;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryPoolMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class MemoryPoolMonthMetricShardingjdbcPersistenceDAO extends AbstractMemoryPoolMetricShardingjdbcPersistenceDAO implements IMemoryPoolMonthMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, MemoryPoolMetric> {
+
+    public MemoryPoolMonthMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return MemoryPoolMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Month.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/register/ApplicationRegisterShardingjdbcDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/register/ApplicationRegisterShardingjdbcDAO.java
new file mode 100644
index 0000000..5fce391
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/register/ApplicationRegisterShardingjdbcDAO.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.register;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.register.IApplicationRegisterDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.register.Application;
+import org.apache.skywalking.apm.collector.storage.table.register.ApplicationTable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationRegisterShardingjdbcDAO extends ShardingjdbcDAO implements IApplicationRegisterDAO {
+
+    private static final Logger logger = LoggerFactory.getLogger(ApplicationRegisterShardingjdbcDAO.class);
+
+    public ApplicationRegisterShardingjdbcDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override
+    public int getMaxApplicationId() {
+        return getMaxId(ApplicationTable.TABLE, ApplicationTable.APPLICATION_ID.getName());
+    }
+
+    @Override
+    public int getMinApplicationId() {
+        return getMinId(ApplicationTable.TABLE, ApplicationTable.APPLICATION_ID.getName());
+    }
+
+    @Override
+    public void save(Application application) {
+        ShardingjdbcClient client = getClient();
+
+        Map<String, Object> target = new HashMap<>();
+        target.put(ApplicationTable.ID.getName(), application.getId());
+        target.put(ApplicationTable.APPLICATION_CODE.getName(), application.getApplicationCode());
+        target.put(ApplicationTable.APPLICATION_ID.getName(), application.getApplicationId());
+        target.put(ApplicationTable.ADDRESS_ID.getName(), application.getAddressId());
+        target.put(ApplicationTable.IS_ADDRESS.getName(), application.getIsAddress());
+
+        String sql = SqlBuilder.buildBatchInsertSql(ApplicationTable.TABLE, target.keySet());
+        Object[] params = target.values().toArray(new Object[0]);
+        try {
+            client.execute(sql, params);
+        } catch (ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/register/InstanceRegisterShardingjdbcDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/register/InstanceRegisterShardingjdbcDAO.java
new file mode 100644
index 0000000..ec88fe8
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/register/InstanceRegisterShardingjdbcDAO.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.register;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.core.util.TimeBucketUtils;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.register.IInstanceRegisterDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.register.Instance;
+import org.apache.skywalking.apm.collector.storage.table.register.InstanceTable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceRegisterShardingjdbcDAO extends ShardingjdbcDAO implements IInstanceRegisterDAO {
+
+    private static final Logger logger = LoggerFactory.getLogger(InstanceRegisterShardingjdbcDAO.class);
+
+    public InstanceRegisterShardingjdbcDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    private static final String UPDATE_HEARTBEAT_TIME_SQL = "update {0} set {1} = ? where {2} = ?";
+
+    @Override public int getMaxInstanceId() {
+        return getMaxId(InstanceTable.TABLE, InstanceTable.INSTANCE_ID.getName());
+    }
+
+    @Override public int getMinInstanceId() {
+        return getMinId(InstanceTable.TABLE, InstanceTable.INSTANCE_ID.getName());
+    }
+
+    @Override public void save(Instance instance) {
+        ShardingjdbcClient client = getClient();
+        Map<String, Object> target = new HashMap<>();
+        target.put(InstanceTable.ID.getName(), instance.getId());
+        target.put(InstanceTable.INSTANCE_ID.getName(), instance.getInstanceId());
+        target.put(InstanceTable.APPLICATION_ID.getName(), instance.getApplicationId());
+        target.put(InstanceTable.APPLICATION_CODE.getName(), instance.getApplicationCode());
+        target.put(InstanceTable.AGENT_UUID.getName(), instance.getAgentUUID());
+        target.put(InstanceTable.REGISTER_TIME.getName(), TimeBucketUtils.INSTANCE.getSecondTimeBucket(instance.getRegisterTime()));
+        target.put(InstanceTable.HEARTBEAT_TIME.getName(), TimeBucketUtils.INSTANCE.getSecondTimeBucket(instance.getHeartBeatTime()));
+        target.put(InstanceTable.OS_INFO.getName(), instance.getOsInfo());
+        target.put(InstanceTable.ADDRESS_ID.getName(), instance.getAddressId());
+        target.put(InstanceTable.IS_ADDRESS.getName(), instance.getIsAddress());
+
+        String sql = SqlBuilder.buildBatchInsertSql(InstanceTable.TABLE, target.keySet());
+        Object[] params = target.values().toArray(new Object[0]);
+        try {
+            client.execute(sql, params);
+        } catch (ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+    }
+
+    @Override public void updateHeartbeatTime(int instanceId, long heartbeatTime) {
+        ShardingjdbcClient client = getClient();
+        String sql = SqlBuilder.buildSql(UPDATE_HEARTBEAT_TIME_SQL, InstanceTable.TABLE, InstanceTable.HEARTBEAT_TIME.getName(),
+            InstanceTable.ID.getName());
+        Object[] params = new Object[] {TimeBucketUtils.INSTANCE.getSecondTimeBucket(heartbeatTime), instanceId};
+        try {
+            client.execute(sql, params);
+        } catch (ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/register/NetworkAddressRegisterShardingjdbcDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/register/NetworkAddressRegisterShardingjdbcDAO.java
new file mode 100644
index 0000000..900fe90
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/register/NetworkAddressRegisterShardingjdbcDAO.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.register;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.register.INetworkAddressRegisterDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.register.InstanceTable;
+import org.apache.skywalking.apm.collector.storage.table.register.NetworkAddress;
+import org.apache.skywalking.apm.collector.storage.table.register.NetworkAddressTable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class NetworkAddressRegisterShardingjdbcDAO extends ShardingjdbcDAO implements INetworkAddressRegisterDAO {
+
+    private static final Logger logger = LoggerFactory.getLogger(NetworkAddressRegisterShardingjdbcDAO.class);
+
+    public NetworkAddressRegisterShardingjdbcDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override
+    public int getMaxNetworkAddressId() {
+        return getMaxId(NetworkAddressTable.TABLE, NetworkAddressTable.ADDRESS_ID.getName());
+    }
+
+    @Override
+    public int getMinNetworkAddressId() {
+        return getMinId(NetworkAddressTable.TABLE, NetworkAddressTable.ADDRESS_ID.getName());
+    }
+
+    @Override
+    public void save(NetworkAddress networkAddress) {
+        ShardingjdbcClient client = getClient();
+
+        Map<String, Object> target = new HashMap<>();
+        target.put(NetworkAddressTable.ID.getName(), networkAddress.getId());
+        target.put(NetworkAddressTable.NETWORK_ADDRESS.getName(), networkAddress.getNetworkAddress());
+        target.put(NetworkAddressTable.ADDRESS_ID.getName(), networkAddress.getAddressId());
+        target.put(NetworkAddressTable.SRC_SPAN_LAYER.getName(), networkAddress.getSrcSpanLayer());
+        target.put(NetworkAddressTable.SERVER_TYPE.getName(), networkAddress.getServerType());
+
+        String sql = SqlBuilder.buildBatchInsertSql(NetworkAddressTable.TABLE, target.keySet());
+        Object[] params = target.values().toArray(new Object[0]);
+        try {
+            client.execute(sql, params);
+        } catch (ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+    }
+
+    @Override public void update(String id, int spanLayer, int serverType) {
+        ShardingjdbcClient client = getClient();
+
+        Map<String, Object> source = new HashMap<>();
+        source.put(NetworkAddressTable.SRC_SPAN_LAYER.getName(), spanLayer);
+        source.put(NetworkAddressTable.SERVER_TYPE.getName(), serverType);
+
+        String sql = SqlBuilder.buildBatchUpdateSql(InstanceTable.TABLE, source.keySet(), InstanceTable.INSTANCE_ID.getName());
+        Object[] params = source.values().toArray(new Object[] {id});
+
+        try {
+            client.execute(sql, params);
+        } catch (ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/register/ServiceNameRegisterShardingjdbcDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/register/ServiceNameRegisterShardingjdbcDAO.java
new file mode 100644
index 0000000..be72cef
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/register/ServiceNameRegisterShardingjdbcDAO.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.register;
+
+import java.util.*;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.*;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.register.IServiceNameRegisterDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.register.*;
+import org.slf4j.*;
+
+/**
+ * @author linjiaqi
+ */
+public class ServiceNameRegisterShardingjdbcDAO extends ShardingjdbcDAO implements IServiceNameRegisterDAO {
+
+    private static final Logger logger = LoggerFactory.getLogger(ServiceNameRegisterShardingjdbcDAO.class);
+
+    public ServiceNameRegisterShardingjdbcDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override
+    public int getMaxServiceId() {
+        return getMaxId(ServiceNameTable.TABLE, ServiceNameTable.SERVICE_ID.getName());
+    }
+
+    @Override
+    public int getMinServiceId() {
+        return getMinId(ServiceNameTable.TABLE, ServiceNameTable.SERVICE_ID.getName());
+    }
+
+    @Override
+    public void save(ServiceName serviceName) {
+        logger.debug("save service name register info, application getApplicationId: {}, service name: {}", serviceName.getId(), serviceName.getServiceName());
+        ShardingjdbcClient client = getClient();
+        Map<String, Object> target = new HashMap<>();
+        target.put(ServiceNameTable.ID.getName(), serviceName.getId());
+        target.put(ServiceNameTable.SERVICE_ID.getName(), serviceName.getServiceId());
+        target.put(ServiceNameTable.APPLICATION_ID.getName(), serviceName.getApplicationId());
+        target.put(ServiceNameTable.SERVICE_NAME.getName(), serviceName.getServiceName());
+        target.put(ServiceNameTable.SERVICE_NAME_KEYWORD.getName(), serviceName.getServiceName());
+        target.put(ServiceNameTable.SRC_SPAN_TYPE.getName(), serviceName.getSrcSpanType());
+        target.put(ServiceNameTable.REGISTER_TIME.getName(), serviceName.getRegisterTime());
+        target.put(ServiceNameTable.HEARTBEAT_TIME.getName(), serviceName.getHeartBeatTime());
+
+        String sql = SqlBuilder.buildBatchInsertSql(ServiceNameTable.TABLE, target.keySet());
+        Object[] params = target.values().toArray(new Object[0]);
+        try {
+            client.execute(sql, params);
+        } catch (ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/rtd/AbstractResponseTimeDistributionShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/rtd/AbstractResponseTimeDistributionShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..07632c8
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/rtd/AbstractResponseTimeDistributionShardingjdbcPersistenceDAO.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.rtd;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.global.ResponseTimeDistribution;
+import org.apache.skywalking.apm.collector.storage.table.global.ResponseTimeDistributionTable;
+
+/**
+ * @author linjiaqi
+ */
+public abstract class AbstractResponseTimeDistributionShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<ResponseTimeDistribution> {
+
+    AbstractResponseTimeDistributionShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+    
+    @Override protected final String timeBucketColumnNameForDelete() {
+        return ResponseTimeDistributionTable.TIME_BUCKET.getName();
+    }
+
+    @Override protected final ResponseTimeDistribution shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        ResponseTimeDistribution responseTimeDistribution = new ResponseTimeDistribution();
+        responseTimeDistribution.setMetricId(resultSet.getString(ResponseTimeDistributionTable.METRIC_ID.getName()));
+
+        responseTimeDistribution.setStep(resultSet.getInt(ResponseTimeDistributionTable.STEP.getName()));
+
+        responseTimeDistribution.setCalls(resultSet.getLong(ResponseTimeDistributionTable.CALLS.getName()));
+        responseTimeDistribution.setErrorCalls(resultSet.getLong(ResponseTimeDistributionTable.ERROR_CALLS.getName()));
+        responseTimeDistribution.setSuccessCalls(resultSet.getLong(ResponseTimeDistributionTable.SUCCESS_CALLS.getName()));
+
+        responseTimeDistribution.setTimeBucket(resultSet.getLong(ResponseTimeDistributionTable.TIME_BUCKET.getName()));
+
+        return responseTimeDistribution;
+    }
+
+    @Override protected final Map<String, Object> streamDataToShardingjdbcData(ResponseTimeDistribution streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(ResponseTimeDistributionTable.ID.getName(), streamData.getId());
+        target.put(ResponseTimeDistributionTable.METRIC_ID.getName(), streamData.getMetricId());
+
+        target.put(ResponseTimeDistributionTable.STEP.getName(), streamData.getStep());
+
+        target.put(ResponseTimeDistributionTable.CALLS.getName(), streamData.getCalls());
+        target.put(ResponseTimeDistributionTable.ERROR_CALLS.getName(), streamData.getErrorCalls());
+        target.put(ResponseTimeDistributionTable.SUCCESS_CALLS.getName(), streamData.getSuccessCalls());
+
+        target.put(ResponseTimeDistributionTable.TIME_BUCKET.getName(), streamData.getTimeBucket());
+
+        return target;
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + ResponseTimeDistributionTable.TABLE)
+    @Override public final ResponseTimeDistribution get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/rtd/ResponseTimeDistributionDayShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/rtd/ResponseTimeDistributionDayShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..5878094
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/rtd/ResponseTimeDistributionDayShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.rtd;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.rtd.IResponseTimeDistributionDayPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.global.ResponseTimeDistribution;
+import org.apache.skywalking.apm.collector.storage.table.global.ResponseTimeDistributionTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ResponseTimeDistributionDayShardingjdbcPersistenceDAO extends AbstractResponseTimeDistributionShardingjdbcPersistenceDAO implements IResponseTimeDistributionDayPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ResponseTimeDistribution> {
+
+    public ResponseTimeDistributionDayShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ResponseTimeDistributionTable.TABLE + Const.ID_SPLIT + TimePyramid.Day.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/rtd/ResponseTimeDistributionHourShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/rtd/ResponseTimeDistributionHourShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..d1c8aca
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/rtd/ResponseTimeDistributionHourShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.rtd;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.rtd.IResponseTimeDistributionHourPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.global.ResponseTimeDistribution;
+import org.apache.skywalking.apm.collector.storage.table.global.ResponseTimeDistributionTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ResponseTimeDistributionHourShardingjdbcPersistenceDAO extends AbstractResponseTimeDistributionShardingjdbcPersistenceDAO implements IResponseTimeDistributionHourPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ResponseTimeDistribution> {
+
+    public ResponseTimeDistributionHourShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ResponseTimeDistributionTable.TABLE + Const.ID_SPLIT + TimePyramid.Hour.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/rtd/ResponseTimeDistributionMinuteShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/rtd/ResponseTimeDistributionMinuteShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..39aed0a
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/rtd/ResponseTimeDistributionMinuteShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.rtd;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.rtd.IResponseTimeDistributionMinutePersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.global.ResponseTimeDistribution;
+import org.apache.skywalking.apm.collector.storage.table.global.ResponseTimeDistributionTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ResponseTimeDistributionMinuteShardingjdbcPersistenceDAO extends AbstractResponseTimeDistributionShardingjdbcPersistenceDAO implements IResponseTimeDistributionMinutePersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ResponseTimeDistribution> {
+
+    public ResponseTimeDistributionMinuteShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ResponseTimeDistributionTable.TABLE + Const.ID_SPLIT + TimePyramid.Minute.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/rtd/ResponseTimeDistributionMonthShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/rtd/ResponseTimeDistributionMonthShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..66a2d1f
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/rtd/ResponseTimeDistributionMonthShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.rtd;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.rtd.IResponseTimeDistributionMonthPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.global.ResponseTimeDistribution;
+import org.apache.skywalking.apm.collector.storage.table.global.ResponseTimeDistributionTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ResponseTimeDistributionMonthShardingjdbcPersistenceDAO extends AbstractResponseTimeDistributionShardingjdbcPersistenceDAO implements IResponseTimeDistributionMonthPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ResponseTimeDistribution> {
+
+    public ResponseTimeDistributionMonthShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ResponseTimeDistributionTable.TABLE + Const.ID_SPLIT + TimePyramid.Month.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/smp/AbstractServiceMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/smp/AbstractServiceMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..f671eca
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/smp/AbstractServiceMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.smp;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.MetricTransformUtil;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.service.ServiceMetric;
+import org.apache.skywalking.apm.collector.storage.table.service.ServiceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public abstract class AbstractServiceMetricShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<ServiceMetric> {
+
+    AbstractServiceMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+    
+    @Override protected final String timeBucketColumnNameForDelete() {
+        return ServiceMetricTable.TIME_BUCKET.getName();
+    }
+
+    @Override protected final ServiceMetric shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        ServiceMetric serviceMetric = new ServiceMetric();
+        serviceMetric.setId(resultSet.getString(ServiceMetricTable.ID.getName()));
+        serviceMetric.setMetricId(resultSet.getString(ServiceMetricTable.METRIC_ID.getName()));
+
+        serviceMetric.setApplicationId(resultSet.getInt(ServiceMetricTable.APPLICATION_ID.getName()));
+        serviceMetric.setInstanceId(resultSet.getInt(ServiceMetricTable.INSTANCE_ID.getName()));
+        serviceMetric.setServiceId(resultSet.getInt(ServiceMetricTable.SERVICE_ID.getName()));
+
+        MetricTransformUtil.INSTANCE.shardingjdbcDataToStreamData(resultSet, serviceMetric);
+
+        return serviceMetric;
+    }
+
+    @Override protected final Map<String, Object> streamDataToShardingjdbcData(ServiceMetric streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(ServiceMetricTable.ID.getName(), streamData.getId());
+        target.put(ServiceMetricTable.METRIC_ID.getName(), streamData.getMetricId());
+
+        target.put(ServiceMetricTable.APPLICATION_ID.getName(), streamData.getApplicationId());
+        target.put(ServiceMetricTable.INSTANCE_ID.getName(), streamData.getInstanceId());
+        target.put(ServiceMetricTable.SERVICE_ID.getName(), streamData.getServiceId());
+
+        MetricTransformUtil.INSTANCE.streamDataToShardingjdbcData(streamData, target);
+
+        return target;
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + ServiceMetricTable.TABLE)
+    @Override public final ServiceMetric get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/smp/ServiceDayMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/smp/ServiceDayMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..910e69c
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/smp/ServiceDayMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.smp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.smp.IServiceDayMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.service.ServiceMetric;
+import org.apache.skywalking.apm.collector.storage.table.service.ServiceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ServiceDayMetricShardingjdbcPersistenceDAO extends AbstractServiceMetricShardingjdbcPersistenceDAO implements IServiceDayMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ServiceMetric> {
+
+    public ServiceDayMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ServiceMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Day.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/smp/ServiceHourMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/smp/ServiceHourMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..6d4d1e3
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/smp/ServiceHourMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.smp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.smp.IServiceHourMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.service.ServiceMetric;
+import org.apache.skywalking.apm.collector.storage.table.service.ServiceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ServiceHourMetricShardingjdbcPersistenceDAO extends AbstractServiceMetricShardingjdbcPersistenceDAO implements IServiceHourMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ServiceMetric> {
+
+    public ServiceHourMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ServiceMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Hour.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/smp/ServiceMinuteMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/smp/ServiceMinuteMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..94a914f
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/smp/ServiceMinuteMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.smp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.smp.IServiceMinuteMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.service.ServiceMetric;
+import org.apache.skywalking.apm.collector.storage.table.service.ServiceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ServiceMinuteMetricShardingjdbcPersistenceDAO extends AbstractServiceMetricShardingjdbcPersistenceDAO implements IServiceMinuteMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ServiceMetric> {
+
+    public ServiceMinuteMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ServiceMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Minute.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/smp/ServiceMonthMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/smp/ServiceMonthMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..affd00c
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/smp/ServiceMonthMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.smp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.smp.IServiceMonthMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.service.ServiceMetric;
+import org.apache.skywalking.apm.collector.storage.table.service.ServiceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ServiceMonthMetricShardingjdbcPersistenceDAO extends AbstractServiceMetricShardingjdbcPersistenceDAO implements IServiceMonthMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ServiceMetric> {
+
+    public ServiceMonthMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ServiceMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Month.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/srmp/AbstractServiceReferenceMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/srmp/AbstractServiceReferenceMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..1e0f5f9
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/srmp/AbstractServiceReferenceMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.srmp;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.MetricTransformUtil;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.AbstractPersistenceShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.service.ServiceReferenceMetric;
+import org.apache.skywalking.apm.collector.storage.table.service.ServiceReferenceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public abstract class AbstractServiceReferenceMetricShardingjdbcPersistenceDAO extends AbstractPersistenceShardingjdbcDAO<ServiceReferenceMetric> {
+
+    AbstractServiceReferenceMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+    
+    @Override protected final String timeBucketColumnNameForDelete() {
+        return ServiceReferenceMetricTable.TIME_BUCKET.getName();
+    }
+
+    @Override protected final ServiceReferenceMetric shardingjdbcDataToStreamData(ResultSet resultSet) throws SQLException {
+        ServiceReferenceMetric serviceReferenceMetric = new ServiceReferenceMetric();
+        serviceReferenceMetric.setId(resultSet.getString(ServiceReferenceMetricTable.ID.getName()));
+        serviceReferenceMetric.setMetricId(resultSet.getString(ServiceReferenceMetricTable.METRIC_ID.getName()));
+
+        serviceReferenceMetric.setFrontApplicationId(resultSet.getInt(ServiceReferenceMetricTable.FRONT_APPLICATION_ID.getName()));
+        serviceReferenceMetric.setBehindApplicationId(resultSet.getInt(ServiceReferenceMetricTable.BEHIND_APPLICATION_ID.getName()));
+        serviceReferenceMetric.setFrontInstanceId(resultSet.getInt(ServiceReferenceMetricTable.FRONT_INSTANCE_ID.getName()));
+        serviceReferenceMetric.setBehindInstanceId(resultSet.getInt(ServiceReferenceMetricTable.BEHIND_INSTANCE_ID.getName()));
+        serviceReferenceMetric.setFrontServiceId(resultSet.getInt(ServiceReferenceMetricTable.FRONT_SERVICE_ID.getName()));
+        serviceReferenceMetric.setBehindServiceId(resultSet.getInt(ServiceReferenceMetricTable.BEHIND_SERVICE_ID.getName()));
+
+        MetricTransformUtil.INSTANCE.shardingjdbcDataToStreamData(resultSet, serviceReferenceMetric);
+
+        return serviceReferenceMetric;
+    }
+
+    @Override protected final Map<String, Object> streamDataToShardingjdbcData(ServiceReferenceMetric streamData) {
+        Map<String, Object> target = new HashMap<>();
+        target.put(ServiceReferenceMetricTable.ID.getName(), streamData.getId());
+        target.put(ServiceReferenceMetricTable.METRIC_ID.getName(), streamData.getMetricId());
+
+        target.put(ServiceReferenceMetricTable.FRONT_APPLICATION_ID.getName(), streamData.getFrontApplicationId());
+        target.put(ServiceReferenceMetricTable.BEHIND_APPLICATION_ID.getName(), streamData.getBehindApplicationId());
+        target.put(ServiceReferenceMetricTable.FRONT_INSTANCE_ID.getName(), streamData.getFrontInstanceId());
+        target.put(ServiceReferenceMetricTable.BEHIND_INSTANCE_ID.getName(), streamData.getBehindInstanceId());
+        target.put(ServiceReferenceMetricTable.FRONT_SERVICE_ID.getName(), streamData.getFrontServiceId());
+        target.put(ServiceReferenceMetricTable.BEHIND_SERVICE_ID.getName(), streamData.getBehindServiceId());
+
+        MetricTransformUtil.INSTANCE.streamDataToShardingjdbcData(streamData, target);
+
+        return target;
+    }
+    
+    @GraphComputingMetric(name = "/persistence/get/" + ServiceReferenceMetricTable.TABLE)
+    @Override public final ServiceReferenceMetric get(String id) {
+        return super.get(id);
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/srmp/ServiceReferenceDayMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/srmp/ServiceReferenceDayMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..1adb5e3
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/srmp/ServiceReferenceDayMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.srmp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.srmp.IServiceReferenceDayMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.service.ServiceReferenceMetric;
+import org.apache.skywalking.apm.collector.storage.table.service.ServiceReferenceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ServiceReferenceDayMetricShardingjdbcPersistenceDAO extends AbstractServiceReferenceMetricShardingjdbcPersistenceDAO implements IServiceReferenceDayMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ServiceReferenceMetric> {
+
+    public ServiceReferenceDayMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ServiceReferenceMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Day.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/srmp/ServiceReferenceHourMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/srmp/ServiceReferenceHourMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..da4d375
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/srmp/ServiceReferenceHourMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.srmp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.srmp.IServiceReferenceHourMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.service.ServiceReferenceMetric;
+import org.apache.skywalking.apm.collector.storage.table.service.ServiceReferenceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ServiceReferenceHourMetricShardingjdbcPersistenceDAO extends AbstractServiceReferenceMetricShardingjdbcPersistenceDAO implements IServiceReferenceHourMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ServiceReferenceMetric> {
+
+    public ServiceReferenceHourMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ServiceReferenceMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Hour.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/srmp/ServiceReferenceMinuteMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/srmp/ServiceReferenceMinuteMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..7d3ff20
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/srmp/ServiceReferenceMinuteMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.srmp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.srmp.IServiceReferenceMinuteMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.service.ServiceReferenceMetric;
+import org.apache.skywalking.apm.collector.storage.table.service.ServiceReferenceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ServiceReferenceMinuteMetricShardingjdbcPersistenceDAO extends AbstractServiceReferenceMetricShardingjdbcPersistenceDAO implements IServiceReferenceMinuteMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ServiceReferenceMetric> {
+
+    public ServiceReferenceMinuteMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ServiceReferenceMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Minute.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/srmp/ServiceReferenceMonthMetricShardingjdbcPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/srmp/ServiceReferenceMonthMetricShardingjdbcPersistenceDAO.java
new file mode 100644
index 0000000..f6e632e
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/srmp/ServiceReferenceMonthMetricShardingjdbcPersistenceDAO.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.srmp;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.core.storage.TimePyramid;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.dao.srmp.IServiceReferenceMonthMetricPersistenceDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.define.ShardingjdbcSqlEntity;
+import org.apache.skywalking.apm.collector.storage.table.service.ServiceReferenceMetric;
+import org.apache.skywalking.apm.collector.storage.table.service.ServiceReferenceMetricTable;
+
+/**
+ * @author linjiaqi
+ */
+public class ServiceReferenceMonthMetricShardingjdbcPersistenceDAO extends AbstractServiceReferenceMetricShardingjdbcPersistenceDAO implements IServiceReferenceMonthMetricPersistenceDAO<ShardingjdbcSqlEntity, ShardingjdbcSqlEntity, ServiceReferenceMetric> {
+
+    public ServiceReferenceMonthMetricShardingjdbcPersistenceDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override protected String tableName() {
+        return ServiceReferenceMetricTable.TABLE + Const.ID_SPLIT + TimePyramid.Month.getName();
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ApplicationAlarmListShardingjdbcUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ApplicationAlarmListShardingjdbcUIDAO.java
new file mode 100644
index 0000000..0e7e658
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ApplicationAlarmListShardingjdbcUIDAO.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ui;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationAlarmListUIDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationAlarmListTable;
+import org.apache.skywalking.apm.collector.storage.ui.common.Step;
+import org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationAlarmListShardingjdbcUIDAO extends ShardingjdbcDAO implements IApplicationAlarmListUIDAO {
+    
+    private static final Logger logger = LoggerFactory.getLogger(ApplicationAlarmListShardingjdbcUIDAO.class);
+    private static final String APPLICATION_ALARM_LIST_SQL = "select {0}, {1}, count({1}) as cnt from {2} where {0} >= ? and {0} <= ? group by {0}, {1} limit 100";
+
+    public ApplicationAlarmListShardingjdbcUIDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override public List<AlarmTrend> getAlarmedApplicationNum(Step step, long startTimeBucket, long endTimeBucket) {
+        ShardingjdbcClient client = getClient();
+        
+        String tableName = TimePyramidTableNameBuilder.build(step, ApplicationAlarmListTable.TABLE);
+        
+        List<AlarmTrend> alarmTrends = new LinkedList<>();
+        String sql = SqlBuilder.buildSql(APPLICATION_ALARM_LIST_SQL, ApplicationAlarmListTable.TIME_BUCKET.getName(), 
+                ApplicationAlarmListTable.APPLICATION_ID.getName(), tableName);
+        
+        Object[] params = new Object[] {startTimeBucket, endTimeBucket};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            while (rs.next()) {
+                long timeBucket = rs.getLong(ApplicationAlarmListTable.TIME_BUCKET.getName());
+                int cnt = rs.getInt("cnt");
+
+                AlarmTrend alarmTrend = new AlarmTrend();
+                alarmTrend.setTimeBucket(timeBucket);
+                alarmTrend.setNumberOfApplication(cnt);
+                alarmTrends.add(alarmTrend);
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        
+        return alarmTrends;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ApplicationAlarmShardingjdbcUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ApplicationAlarmShardingjdbcUIDAO.java
new file mode 100644
index 0000000..ecdeca8
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ApplicationAlarmShardingjdbcUIDAO.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ui;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.core.util.TimeBucketUtils;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationAlarmUIDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationAlarmTable;
+import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm;
+import org.apache.skywalking.apm.collector.storage.ui.alarm.AlarmItem;
+import org.apache.skywalking.apm.collector.storage.ui.alarm.AlarmType;
+import org.apache.skywalking.apm.collector.storage.ui.alarm.CauseType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationAlarmShardingjdbcUIDAO extends ShardingjdbcDAO implements IApplicationAlarmUIDAO {
+    
+    private static final Logger logger = LoggerFactory.getLogger(ApplicationAlarmShardingjdbcUIDAO.class);
+    private static final String APPLICATION_ALARM_SQL = "select {0}, {1}, {2}, {3} from {4} where {2} >= ? and {2} <= ? and {1} like ? and {0} in (?) limit ?, ?";
+
+    public ApplicationAlarmShardingjdbcUIDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override
+    public Alarm loadAlarmList(String keyword, List<Integer> applicationIds, long startTimeBucket, long endTimeBucket, int limit, int from) throws ParseException {
+        ShardingjdbcClient client = getClient();
+        
+        String tableName = ApplicationAlarmTable.TABLE;
+        String sql = SqlBuilder.buildSql(APPLICATION_ALARM_SQL, ApplicationAlarmTable.APPLICATION_ID.getName(), ApplicationAlarmTable.ALARM_CONTENT.getName(), 
+                ApplicationAlarmTable.LAST_TIME_BUCKET.getName(), ApplicationAlarmTable.ALARM_TYPE.getName(), tableName);
+    
+        String applicationIdsParam = applicationIds.toString().replace("[", "").replace("]", "");
+        Object[] params = new Object[] {startTimeBucket, endTimeBucket, keyword == null ? "%%" : "%" + keyword + "%", applicationIdsParam, from, limit};
+        Alarm alarm = new Alarm();
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            int index = 0;
+            while (rs.next()) {
+                int applicationId = rs.getInt(ApplicationAlarmTable.APPLICATION_ID.getName());
+                String alarmContent = rs.getString(ApplicationAlarmTable.ALARM_CONTENT.getName());
+                long lastTimeBucket = rs.getLong(ApplicationAlarmTable.LAST_TIME_BUCKET.getName());
+                int alarmType = rs.getInt(ApplicationAlarmTable.ALARM_TYPE.getName());
+
+                AlarmItem alarmItem = new AlarmItem();
+                alarmItem.setId(applicationId);
+                alarmItem.setContent(alarmContent);
+                alarmItem.setStartTime(TimeBucketUtils.INSTANCE.formatMinuteTimeBucket(lastTimeBucket));
+                alarmItem.setAlarmType(AlarmType.APPLICATION);
+                
+                if (org.apache.skywalking.apm.collector.storage.table.alarm.AlarmType.SLOW_RTT.getValue() == alarmType) {
+                    alarmItem.setCauseType(CauseType.SLOW_RESPONSE);
+                } else if (org.apache.skywalking.apm.collector.storage.table.alarm.AlarmType.ERROR_RATE.getValue() == alarmType) {
+                    alarmItem.setCauseType(CauseType.LOW_SUCCESS_RATE);
+                }
+                index++;
+                alarm.getItems().add(alarmItem);
+            }
+            alarm.setTotal(index);
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        
+        return alarm;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ApplicationComponentShardingjdbcUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ApplicationComponentShardingjdbcUIDAO.java
new file mode 100644
index 0000000..c416bd6
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ApplicationComponentShardingjdbcUIDAO.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ui;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationComponentUIDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationComponentTable;
+import org.apache.skywalking.apm.collector.storage.ui.common.Step;
+import org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationComponentShardingjdbcUIDAO extends ShardingjdbcDAO implements IApplicationComponentUIDAO {
+
+    private static final Logger logger = LoggerFactory.getLogger(ApplicationComponentShardingjdbcUIDAO.class);
+    private static final String APPLICATION_COMPONENT_SQL = "select {0}, {1} from {2} where {3} >= ? and {3} <= ? group by {0}, {1} limit 100";
+
+    public ApplicationComponentShardingjdbcUIDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override public List<ApplicationComponent> load(Step step, long startTimeBucket, long endTimeBucket) {
+        ShardingjdbcClient client = getClient();
+
+        String tableName = TimePyramidTableNameBuilder.build(step, ApplicationComponentTable.TABLE);
+
+        List<ApplicationComponent> applicationComponents = new LinkedList<>();
+        String sql = SqlBuilder.buildSql(APPLICATION_COMPONENT_SQL, ApplicationComponentTable.COMPONENT_ID.getName(), ApplicationComponentTable.APPLICATION_ID.getName(),
+            tableName, ApplicationComponentTable.TIME_BUCKET.getName());
+
+        Object[] params = new Object[] {startTimeBucket, endTimeBucket};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            while (rs.next()) {
+                int applicationId = rs.getInt(ApplicationComponentTable.APPLICATION_ID.getName());
+                int componentId = rs.getInt(ApplicationComponentTable.COMPONENT_ID.getName());
+
+                ApplicationComponent applicationComponent = new ApplicationComponent();
+                applicationComponent.setComponentId(componentId);
+                applicationComponent.setApplicationId(applicationId);
+                applicationComponents.add(applicationComponent);
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return applicationComponents;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ApplicationMappingShardingjdbcUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ApplicationMappingShardingjdbcUIDAO.java
new file mode 100644
index 0000000..34fb1f6
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ApplicationMappingShardingjdbcUIDAO.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ui;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationMappingUIDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMappingTable;
+import org.apache.skywalking.apm.collector.storage.ui.common.Step;
+import org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationMappingShardingjdbcUIDAO extends ShardingjdbcDAO implements IApplicationMappingUIDAO {
+
+    private static final Logger logger = LoggerFactory.getLogger(ApplicationMappingShardingjdbcUIDAO.class);
+    private static final String APPLICATION_MAPPING_SQL = "select {0}, {1} from {2} where {3} >= ? and {3} <= ? group by {0}, {1} limit 100";
+
+    public ApplicationMappingShardingjdbcUIDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override public List<ApplicationMapping> load(Step step, long startTimeBucket, long endTimeBucket) {
+        String tableName = TimePyramidTableNameBuilder.build(step, ApplicationMappingTable.TABLE);
+
+        ShardingjdbcClient client = getClient();
+        String sql = SqlBuilder.buildSql(APPLICATION_MAPPING_SQL, ApplicationMappingTable.APPLICATION_ID.getName(),
+            ApplicationMappingTable.MAPPING_APPLICATION_ID.getName(), tableName, ApplicationMappingTable.TIME_BUCKET.getName());
+
+        List<ApplicationMapping> applicationMappings = new LinkedList<>();
+        Object[] params = new Object[] {startTimeBucket, endTimeBucket};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            while (rs.next()) {
+                int applicationId = rs.getInt(ApplicationMappingTable.APPLICATION_ID.getName());
+                int addressId = rs.getInt(ApplicationMappingTable.MAPPING_APPLICATION_ID.getName());
+
+                ApplicationMapping applicationMapping = new ApplicationMapping();
+                applicationMapping.setApplicationId(applicationId);
+                applicationMapping.setMappingApplicationId(addressId);
+                applicationMappings.add(applicationMapping);
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        logger.debug("node mapping data: {}", applicationMappings.toString());
+        return applicationMappings;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ApplicationMetricShardingjdbcUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ApplicationMetricShardingjdbcUIDAO.java
new file mode 100644
index 0000000..982ed88
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ApplicationMetricShardingjdbcUIDAO.java
@@ -0,0 +1,138 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ui;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationMetricUIDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.MetricSource;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMetricTable;
+import org.apache.skywalking.apm.collector.storage.ui.common.Step;
+import org.apache.skywalking.apm.collector.storage.ui.overview.ApplicationThroughput;
+import org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationMetricShardingjdbcUIDAO extends ShardingjdbcDAO implements IApplicationMetricUIDAO {
+    
+    private static final Logger logger = LoggerFactory.getLogger(ApplicationMetricShardingjdbcUIDAO.class);
+    private static final String APPLICATION_THROUGHPUT_TOPN_SQL = "select {0}, sum({1}) as {1} from {2} where {3} >= ? and {3} <= ? and {4} = ? group by {0} order by {1} desc limit ?";
+    private static final String APPLICATION_GET_SQL = "select {0}, sum({1}) as {1}, sum({2}) as {2}, sum({3}) as {3}, sum({4}) as {4}, sum({5}) as {5}, sum({6}) as {6}, sum({7}) as {7} from {8} " +
+            "where {9} >= ? and {9} <= ? and {10} = ? group by {0} limit 100";
+    
+    public ApplicationMetricShardingjdbcUIDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+    
+    @Override
+    public List<ApplicationThroughput> getTopNApplicationThroughput(Step step, long startTimeBucket, long endTimeBucket,
+                                                                    int minutesBetween, int topN, MetricSource metricSource) {
+        ShardingjdbcClient client = getClient();
+        
+        String tableName = TimePyramidTableNameBuilder.build(step, ApplicationMetricTable.TABLE);
+        
+        List<ApplicationThroughput> applicationThroughputList = new LinkedList<>();
+        String sql = SqlBuilder.buildSql(APPLICATION_THROUGHPUT_TOPN_SQL, ApplicationMetricTable.APPLICATION_ID.getName(),
+                ApplicationMetricTable.TRANSACTION_CALLS.getName(), tableName, ApplicationMetricTable.TIME_BUCKET.getName(),
+                ApplicationMetricTable.SOURCE_VALUE.getName());
+        
+        Object[] params = new Object[]{startTimeBucket, endTimeBucket, metricSource.getValue(), topN};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+        ) {
+            while (rs.next()) {
+                int applicationId = rs.getInt(ApplicationMetricTable.APPLICATION_ID.getName());
+                long calls = rs.getLong(ApplicationMetricTable.TRANSACTION_CALLS.getName());
+                int callsPerMinute = (int) (minutesBetween == 0 ? 0 : calls / minutesBetween);
+                
+                ApplicationThroughput applicationThroughput = new ApplicationThroughput();
+                applicationThroughput.setApplicationId(applicationId);
+                applicationThroughput.setCpm(callsPerMinute);
+                applicationThroughputList.add(applicationThroughput);
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        
+        return applicationThroughputList;
+    }
+    
+    @Override
+    public List<ApplicationMetric> getApplications(Step step, long startTimeBucket,
+                                                   long endTimeBucket, MetricSource metricSource) {
+        ShardingjdbcClient client = getClient();
+        
+        String tableName = TimePyramidTableNameBuilder.build(step, ApplicationMetricTable.TABLE);
+        
+        List<ApplicationMetric> applicationMetrics = new LinkedList<>();
+        String sql = SqlBuilder.buildSql(APPLICATION_GET_SQL, ApplicationMetricTable.APPLICATION_ID.getName(),
+                ApplicationMetricTable.TRANSACTION_CALLS.getName(), ApplicationMetricTable.TRANSACTION_ERROR_CALLS.getName(),
+                ApplicationMetricTable.TRANSACTION_DURATION_SUM.getName(), ApplicationMetricTable.TRANSACTION_ERROR_DURATION_SUM.getName(),
+                ApplicationMetricTable.SATISFIED_COUNT.getName(), ApplicationMetricTable.TOLERATING_COUNT.getName(),
+                ApplicationMetricTable.FRUSTRATED_COUNT.getName(), tableName, ApplicationMetricTable.TIME_BUCKET.getName(),
+                ApplicationMetricTable.SOURCE_VALUE.getName());
+        
+        Object[] params = new Object[]{startTimeBucket, endTimeBucket, metricSource.getValue()};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+        ) {
+            while (rs.next()) {
+                int applicationId = rs.getInt(ApplicationMetricTable.APPLICATION_ID.getName());
+                long calls = rs.getLong(ApplicationMetricTable.TRANSACTION_CALLS.getName());
+                long errorCalls = rs.getLong(ApplicationMetricTable.TRANSACTION_ERROR_CALLS.getName());
+                long durations = rs.getLong(ApplicationMetricTable.TRANSACTION_DURATION_SUM.getName());
+                long errorDurations = rs.getLong(ApplicationMetricTable.TRANSACTION_ERROR_DURATION_SUM.getName());
+                long satisfiedCount = rs.getLong(ApplicationMetricTable.SATISFIED_COUNT.getName());
+                long toleratingCount = rs.getLong(ApplicationMetricTable.TOLERATING_COUNT.getName());
+                long frustratedCount = rs.getLong(ApplicationMetricTable.FRUSTRATED_COUNT.getName());
+                
+                ApplicationMetric applicationMetric = new ApplicationMetric();
+                applicationMetric.setId(applicationId);
+                applicationMetric.setCalls(calls);
+                applicationMetric.setErrorCalls(errorCalls);
+                applicationMetric.setDurations(durations);
+                applicationMetric.setErrorDurations(errorDurations);
+                applicationMetric.setSatisfiedCount(satisfiedCount);
+                applicationMetric.setToleratingCount(toleratingCount);
+                applicationMetric.setFrustratedCount(frustratedCount);
+                applicationMetrics.add(applicationMetric);
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        
+        return applicationMetrics;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ApplicationReferenceMetricShardingjdbcUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ApplicationReferenceMetricShardingjdbcUIDAO.java
new file mode 100644
index 0000000..cb5690c
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ApplicationReferenceMetricShardingjdbcUIDAO.java
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ui;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationReferenceMetricUIDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.MetricSource;
+import org.apache.skywalking.apm.collector.storage.table.application.ApplicationReferenceMetricTable;
+import org.apache.skywalking.apm.collector.storage.ui.common.Step;
+import org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class ApplicationReferenceMetricShardingjdbcUIDAO extends ShardingjdbcDAO implements IApplicationReferenceMetricUIDAO {
+
+    private static final Logger logger = LoggerFactory.getLogger(ApplicationReferenceMetricShardingjdbcUIDAO.class);
+    private static final String APPLICATION_REFERENCE_SQL_ONE = "select {7}, {8}, sum({0}) as {0}, sum({1}) as {1}, sum({2}) as {2}, " +
+        "sum({3}) as {3} from {4} where {5} >= ? and {5} <= ? and {6} = ? and {7} in (?) group by {7}, {8} limit 100";
+    private static final String APPLICATION_REFERENCE_SQL_TWO = "select {7}, {8}, sum({0}) as {0}, sum({1}) as {1}, sum({2}) as {2}, " +
+            "sum({3}) as {3} from {4} where {5} >= ? and {5} <= ? and {6} = ? and {8} in (?) group by {7}, {8} limit 100";
+
+    public ApplicationReferenceMetricShardingjdbcUIDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override public List<ApplicationReferenceMetric> getReferences(Step step,
+        long startTimeBucket, long endTimeBucket, MetricSource metricSource, Integer... applicationIds) {
+        ShardingjdbcClient client = getClient();
+        
+        String tableName = TimePyramidTableNameBuilder.build(step, ApplicationReferenceMetricTable.TABLE);
+        
+        List<ApplicationReferenceMetric> referenceMetrics = new LinkedList<>();
+        String sqlOne = SqlBuilder.buildSql(APPLICATION_REFERENCE_SQL_ONE, ApplicationReferenceMetricTable.TRANSACTION_CALLS.getName(), 
+                ApplicationReferenceMetricTable.TRANSACTION_ERROR_CALLS.getName(), ApplicationReferenceMetricTable.TRANSACTION_DURATION_SUM.getName(), 
+                ApplicationReferenceMetricTable.TRANSACTION_ERROR_DURATION_SUM.getName(), tableName, ApplicationReferenceMetricTable.TIME_BUCKET.getName(), 
+                ApplicationReferenceMetricTable.SOURCE_VALUE.getName(), ApplicationReferenceMetricTable.FRONT_APPLICATION_ID.getName(), 
+                ApplicationReferenceMetricTable.BEHIND_APPLICATION_ID.getName());
+        String sqlTwo = SqlBuilder.buildSql(APPLICATION_REFERENCE_SQL_TWO, ApplicationReferenceMetricTable.TRANSACTION_CALLS.getName(), 
+                ApplicationReferenceMetricTable.TRANSACTION_ERROR_CALLS.getName(), ApplicationReferenceMetricTable.TRANSACTION_DURATION_SUM.getName(), 
+                ApplicationReferenceMetricTable.TRANSACTION_ERROR_DURATION_SUM.getName(), tableName, ApplicationReferenceMetricTable.TIME_BUCKET.getName(), 
+                ApplicationReferenceMetricTable.SOURCE_VALUE.getName(), ApplicationReferenceMetricTable.FRONT_APPLICATION_ID.getName(), 
+                ApplicationReferenceMetricTable.BEHIND_APPLICATION_ID.getName());
+        
+        String applicationIdsParam = Arrays.toString(applicationIds).replace("[", "").replace("]", "");
+        Object[] params = new Object[] {startTimeBucket, endTimeBucket, metricSource.getValue(), applicationIdsParam};
+        
+        try (
+                ResultSet rs = client.executeQuery(sqlOne, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            while (rs.next()) {
+                int sourceApplicationId = rs.getInt(ApplicationReferenceMetricTable.FRONT_APPLICATION_ID.getName());
+                int targetApplicationId = rs.getInt(ApplicationReferenceMetricTable.BEHIND_APPLICATION_ID.getName());
+                long calls = rs.getLong(ApplicationReferenceMetricTable.TRANSACTION_CALLS.getName());
+                long errorCalls = rs.getLong(ApplicationReferenceMetricTable.TRANSACTION_ERROR_CALLS.getName());
+                long durations = rs.getLong(ApplicationReferenceMetricTable.TRANSACTION_DURATION_SUM.getName());
+                long errorDurations = rs.getLong(ApplicationReferenceMetricTable.TRANSACTION_ERROR_DURATION_SUM.getName());
+
+                ApplicationReferenceMetric referenceMetric = new ApplicationReferenceMetric();
+                referenceMetric.setSource(sourceApplicationId);
+                referenceMetric.setTarget(targetApplicationId);
+                referenceMetric.setCalls(calls);
+                referenceMetric.setErrorCalls(errorCalls);
+                referenceMetric.setDurations(durations);
+                referenceMetric.setErrorDurations(errorDurations);
+                referenceMetrics.add(referenceMetric);
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        
+        try (
+                ResultSet rs = client.executeQuery(sqlTwo, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            while (rs.next()) {
+                int sourceApplicationId = rs.getInt(ApplicationReferenceMetricTable.FRONT_APPLICATION_ID.getName());
+                int targetApplicationId = rs.getInt(ApplicationReferenceMetricTable.BEHIND_APPLICATION_ID.getName());
+                long calls = rs.getLong(ApplicationReferenceMetricTable.TRANSACTION_CALLS.getName());
+                long errorCalls = rs.getLong(ApplicationReferenceMetricTable.TRANSACTION_ERROR_CALLS.getName());
+                long durations = rs.getLong(ApplicationReferenceMetricTable.TRANSACTION_DURATION_SUM.getName());
+                long errorDurations = rs.getLong(ApplicationReferenceMetricTable.TRANSACTION_ERROR_DURATION_SUM.getName());
+
+                ApplicationReferenceMetric referenceMetric = new ApplicationReferenceMetric();
+                referenceMetric.setSource(sourceApplicationId);
+                referenceMetric.setTarget(targetApplicationId);
+                referenceMetric.setCalls(calls);
+                referenceMetric.setErrorCalls(errorCalls);
+                referenceMetric.setDurations(durations);
+                referenceMetric.setErrorDurations(errorDurations);
+                referenceMetrics.add(referenceMetric);
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        
+        return referenceMetrics.size() > 100 ? referenceMetrics.subList(0, 100) : referenceMetrics;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/CpuMetricShardingjdbcUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/CpuMetricShardingjdbcUIDAO.java
new file mode 100644
index 0000000..3fbc86f
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/CpuMetricShardingjdbcUIDAO.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ui;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.ui.ICpuMetricUIDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.jvm.CpuMetricTable;
+import org.apache.skywalking.apm.collector.storage.ui.common.Step;
+import org.apache.skywalking.apm.collector.storage.utils.DurationPoint;
+import org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class CpuMetricShardingjdbcUIDAO extends ShardingjdbcDAO implements ICpuMetricUIDAO {
+    private static final Logger logger = LoggerFactory.getLogger(CpuMetricShardingjdbcUIDAO.class);
+    private static final String GET_CPU_METRIC_SQL = "select * from {0} where {1} = ?";
+
+    public CpuMetricShardingjdbcUIDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override public List<Integer> getCPUTrend(int instanceId, Step step, List<DurationPoint> durationPoints) {
+        ShardingjdbcClient client = getClient();
+        String tableName = TimePyramidTableNameBuilder.build(step, CpuMetricTable.TABLE);
+        String sql = SqlBuilder.buildSql(GET_CPU_METRIC_SQL, tableName, CpuMetricTable.ID.getName());
+
+        List<Integer> cpuTrends = new LinkedList<>();
+        durationPoints.forEach(durationPoint -> {
+            String id = durationPoint.getPoint() + Const.ID_SPLIT + instanceId;
+
+            try (
+                    ResultSet rs = client.executeQuery(sql, new String[] {id});
+                    Statement statement = rs.getStatement();
+                    Connection conn = statement.getConnection();
+                ) {
+                if (rs.next()) {
+                    double cpuUsed = rs.getDouble(CpuMetricTable.USAGE_PERCENT.getName());
+                    long times = rs.getLong(CpuMetricTable.TIMES.getName());
+                    cpuTrends.add((int)((cpuUsed / times) * 100));
+                } else {
+                    cpuTrends.add(0);
+                }
+            } catch (SQLException | ShardingjdbcClientException e) {
+                logger.error(e.getMessage(), e);
+            }
+        });
+
+        return cpuTrends;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/GCMetricShardingjdbcUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/GCMetricShardingjdbcUIDAO.java
new file mode 100644
index 0000000..84950d0
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/GCMetricShardingjdbcUIDAO.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ui;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.ui.IGCMetricUIDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.jvm.GCMetricTable;
+import org.apache.skywalking.apm.collector.storage.ui.common.Step;
+import org.apache.skywalking.apm.collector.storage.utils.DurationPoint;
+import org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder;
+import org.apache.skywalking.apm.network.proto.GCPhrase;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class GCMetricShardingjdbcUIDAO extends ShardingjdbcDAO implements IGCMetricUIDAO {
+
+    private static final Logger logger = LoggerFactory.getLogger(GCMetricShardingjdbcUIDAO.class);
+    private static final String GET_GC_METRIC_SQL = "select * from {0} where {1} = ?";
+
+    public GCMetricShardingjdbcUIDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override public List<Trend> getYoungGCTrend(int instanceId, Step step, List<DurationPoint> durationPoints) {
+        return getGCTrend(instanceId, step, durationPoints, GCPhrase.NEW_VALUE);
+    }
+
+    @Override public List<Trend> getOldGCTrend(int instanceId, Step step, List<DurationPoint> durationPoints) {
+        return getGCTrend(instanceId, step, durationPoints, GCPhrase.OLD_VALUE);
+    }
+
+    private List<Trend> getGCTrend(int instanceId, Step step, List<DurationPoint> durationPoints, int gcPhrase) {
+        String tableName = TimePyramidTableNameBuilder.build(step, GCMetricTable.TABLE);
+
+        ShardingjdbcClient client = getClient();
+        String sql = SqlBuilder.buildSql(GET_GC_METRIC_SQL, tableName, GCMetricTable.ID.getName());
+
+        List<Trend> gcTrends = new LinkedList<>();
+        durationPoints.forEach(durationPoint -> {
+            String id = durationPoint.getPoint() + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + gcPhrase;
+            try (
+                    ResultSet rs = client.executeQuery(sql, new String[] {id});
+                    Statement statement = rs.getStatement();
+                    Connection conn = statement.getConnection();
+                ) {
+                if (rs.next()) {
+                    long count = rs.getLong(GCMetricTable.COUNT.getName());
+                    long duration = rs.getLong(GCMetricTable.DURATION.getName());
+                    long times = rs.getLong(GCMetricTable.TIMES.getName());
+                    gcTrends.add(new Trend((int)(count / times), (int)(duration / times)));
+                } else {
+                    gcTrends.add(new Trend(0, 0));
+                }
+            } catch (SQLException | ShardingjdbcClientException e) {
+                logger.error(e.getMessage(), e);
+                gcTrends.add(new Trend(0, 0));
+            }
+        });
+
+        return gcTrends;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/GlobalTraceShardingjdbcUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/GlobalTraceShardingjdbcUIDAO.java
new file mode 100644
index 0000000..eebd39f
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/GlobalTraceShardingjdbcUIDAO.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ui;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.ui.IGlobalTraceUIDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.global.GlobalTraceTable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class GlobalTraceShardingjdbcUIDAO extends ShardingjdbcDAO implements IGlobalTraceUIDAO {
+
+    private static final Logger logger = LoggerFactory.getLogger(GlobalTraceShardingjdbcUIDAO.class);
+
+    private static final String GET_GLOBAL_TRACE_ID_SQL = "select {0} from {1} where {2} = ? limit 10";
+    private static final String GET_SEGMENT_IDS_SQL = "select {0} from {1} where {2} = ? limit 10";
+
+    public GlobalTraceShardingjdbcUIDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override public List<String> getGlobalTraceId(String segmentId) {
+        List<String> globalTraceIds = new ArrayList<>();
+        ShardingjdbcClient client = getClient();
+        String sql = SqlBuilder.buildSql(GET_GLOBAL_TRACE_ID_SQL, GlobalTraceTable.TRACE_ID.getName(),
+            GlobalTraceTable.TABLE, GlobalTraceTable.SEGMENT_ID.getName());
+        Object[] params = new Object[] {segmentId};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            while (rs.next()) {
+                String globalTraceId = rs.getString(GlobalTraceTable.TRACE_ID.getName());
+                logger.debug("segmentId: {}, global trace id: {}", segmentId, globalTraceId);
+                globalTraceIds.add(globalTraceId);
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return globalTraceIds;
+    }
+
+    @Override public List<String> getSegmentIds(String globalTraceId) {
+        List<String> segmentIds = new ArrayList<>();
+        ShardingjdbcClient client = getClient();
+        String sql = SqlBuilder.buildSql(GET_SEGMENT_IDS_SQL, GlobalTraceTable.SEGMENT_ID.getName(),
+            GlobalTraceTable.TABLE, GlobalTraceTable.TRACE_ID);
+        Object[] params = new Object[] {globalTraceId};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            while (rs.next()) {
+                String segmentId = rs.getString(GlobalTraceTable.SEGMENT_ID.getName());
+                logger.debug("segmentId: {}, global trace id: {}", segmentId, globalTraceId);
+                segmentIds.add(segmentId);
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return segmentIds;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/InstanceAlarmShardingjdbcUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/InstanceAlarmShardingjdbcUIDAO.java
new file mode 100644
index 0000000..9f99a97
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/InstanceAlarmShardingjdbcUIDAO.java
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ui;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.text.ParseException;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.core.util.TimeBucketUtils;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceAlarmUIDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.alarm.InstanceAlarmTable;
+import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm;
+import org.apache.skywalking.apm.collector.storage.ui.alarm.AlarmItem;
+import org.apache.skywalking.apm.collector.storage.ui.alarm.AlarmType;
+import org.apache.skywalking.apm.collector.storage.ui.alarm.CauseType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceAlarmShardingjdbcUIDAO extends ShardingjdbcDAO implements IInstanceAlarmUIDAO {
+    
+    private static final Logger logger = LoggerFactory.getLogger(InstanceAlarmShardingjdbcUIDAO.class);
+    private static final String INSTANCE_ALARM_SQL = "select {0}, {1}, {2}, {3} from {4} where {2} >= ? and {2} <= ? and {1} like ? limit ?, ?";
+    
+
+    public InstanceAlarmShardingjdbcUIDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override public Alarm loadAlarmList(String keyword, long startTimeBucket, long endTimeBucket, int limit, int from) throws ParseException {
+        ShardingjdbcClient client = getClient();
+        
+        String tableName = InstanceAlarmTable.TABLE;
+        String sql = SqlBuilder.buildSql(INSTANCE_ALARM_SQL, InstanceAlarmTable.INSTANCE_ID.getName(), InstanceAlarmTable.ALARM_CONTENT.getName(), 
+                InstanceAlarmTable.LAST_TIME_BUCKET.getName(), InstanceAlarmTable.ALARM_TYPE.getName(), tableName);
+        
+        Object[] params = new Object[] {startTimeBucket, endTimeBucket, keyword == null ? "%%" : "%" + keyword + "%", from, limit};
+        Alarm alarm = new Alarm();
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            int index = 0;
+            while (rs.next()) {
+                int instanceId = rs.getInt(InstanceAlarmTable.INSTANCE_ID.getName());
+                String alarmContent = rs.getString(InstanceAlarmTable.ALARM_CONTENT.getName());
+                long lastTimeBucket = rs.getLong(InstanceAlarmTable.LAST_TIME_BUCKET.getName());
+                int alarmType = rs.getInt(InstanceAlarmTable.ALARM_TYPE.getName());
+
+                AlarmItem alarmItem = new AlarmItem();
+                alarmItem.setId(instanceId);
+                alarmItem.setContent(alarmContent);
+                alarmItem.setStartTime(TimeBucketUtils.INSTANCE.formatMinuteTimeBucket(lastTimeBucket));
+                alarmItem.setAlarmType(AlarmType.SERVER);
+                
+                if (org.apache.skywalking.apm.collector.storage.table.alarm.AlarmType.SLOW_RTT.getValue() == alarmType) {
+                    alarmItem.setCauseType(CauseType.SLOW_RESPONSE);
+                } else if (org.apache.skywalking.apm.collector.storage.table.alarm.AlarmType.ERROR_RATE.getValue() == alarmType) {
+                    alarmItem.setCauseType(CauseType.LOW_SUCCESS_RATE);
+                }
+                index++;
+                alarm.getItems().add(alarmItem);
+            }
+            alarm.setTotal(index);
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        
+        return alarm;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/InstanceMetricShardingjdbcUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/InstanceMetricShardingjdbcUIDAO.java
new file mode 100644
index 0000000..7bbf36f
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/InstanceMetricShardingjdbcUIDAO.java
@@ -0,0 +1,145 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ui;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceMetricUIDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.MetricSource;
+import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMetricTable;
+import org.apache.skywalking.apm.collector.storage.ui.common.Step;
+import org.apache.skywalking.apm.collector.storage.ui.server.AppServerInfo;
+import org.apache.skywalking.apm.collector.storage.utils.DurationPoint;
+import org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceMetricShardingjdbcUIDAO extends ShardingjdbcDAO implements IInstanceMetricUIDAO {
+
+    private static final Logger logger = LoggerFactory.getLogger(InstanceMetricShardingjdbcUIDAO.class);
+    private static final String GET_THROUGHPUT_METRIC_SQL = "select {1}, sum({2}) as {2} from {3} where {4} >= ? and {4} <= ? and {5} = ? and {1} = ? group by {0} order by {2} desc limit ?";
+    private static final String GET_TPS_METRIC_SQL = "select * from {0} where {1} = ?";
+
+    public InstanceMetricShardingjdbcUIDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override public List<AppServerInfo> getServerThroughput(int applicationId, Step step, long startTimeBucket, long endTimeBucket,
+        int minutesBetween, int topN, MetricSource metricSource) {
+        ShardingjdbcClient client = getClient();
+        
+        String tableName = TimePyramidTableNameBuilder.build(step, InstanceMetricTable.TABLE);
+        
+        List<AppServerInfo> appServerInfos = new LinkedList<>();
+        String sql = SqlBuilder.buildSql(GET_THROUGHPUT_METRIC_SQL, InstanceMetricTable.INSTANCE_ID.getName(), 
+                InstanceMetricTable.APPLICATION_ID.getName(), InstanceMetricTable.TRANSACTION_CALLS.getName(), 
+                tableName, InstanceMetricTable.TIME_BUCKET.getName(), InstanceMetricTable.SOURCE_VALUE.getName());
+        
+        Object[] params = new Object[] {startTimeBucket, endTimeBucket, metricSource.getValue(), applicationId, topN};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            while (rs.next()) {
+                int instanceId = rs.getInt(InstanceMetricTable.INSTANCE_ID.getName());
+                long calls = rs.getLong(InstanceMetricTable.TRANSACTION_CALLS.getName());
+                int callsPerMinute = (int)(minutesBetween == 0 ? 0 : calls / minutesBetween);
+
+                AppServerInfo appServerInfo = new AppServerInfo();
+                appServerInfo.setId(instanceId);
+                appServerInfo.setCpm(callsPerMinute);
+                appServerInfos.add(appServerInfo);
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        
+        return appServerInfos;
+    }
+
+    @Override public List<Integer> getServerThroughputTrend(int instanceId, Step step, List<DurationPoint> durationPoints) {
+        ShardingjdbcClient client = getClient();
+        String tableName = TimePyramidTableNameBuilder.build(step, InstanceMetricTable.TABLE);
+
+        String sql = SqlBuilder.buildSql(GET_TPS_METRIC_SQL, tableName, InstanceMetricTable.ID.getName());
+
+        List<Integer> throughputTrend = new LinkedList<>();
+        durationPoints.forEach(durationPoint -> {
+            String id = durationPoint.getPoint() + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + MetricSource.Callee.getValue();
+            try (
+                    ResultSet rs = client.executeQuery(sql, new Object[] {id});
+                    Statement statement = rs.getStatement();
+                    Connection conn = statement.getConnection();
+                ) {
+                if (rs.next()) {
+                    long callTimes = rs.getLong(InstanceMetricTable.TRANSACTION_CALLS.getName());
+                    throughputTrend.add((int)(callTimes / durationPoint.getSecondsBetween()));
+                } else {
+                    throughputTrend.add(0);
+                }
+            } catch (SQLException | ShardingjdbcClientException e) {
+                logger.error(e.getMessage(), e);
+            }
+        });
+
+        return throughputTrend;
+    }
+
+    @Override public List<Integer> getResponseTimeTrend(int instanceId, Step step, List<DurationPoint> durationPoints) {
+        ShardingjdbcClient client = getClient();
+
+        String tableName = TimePyramidTableNameBuilder.build(step, InstanceMetricTable.TABLE);
+        String sql = SqlBuilder.buildSql(GET_TPS_METRIC_SQL, tableName, InstanceMetricTable.ID.getName());
+
+        List<Integer> responseTimeTrends = new LinkedList<>();
+        durationPoints.forEach(durationPoint -> {
+            String id = durationPoint.getPoint() + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + MetricSource.Callee.getValue();
+            try (
+                    ResultSet rs = client.executeQuery(sql, new Object[] {id});
+                    Statement statement = rs.getStatement();
+                    Connection conn = statement.getConnection();
+                ) {
+                if (rs.next()) {
+                    long callTimes = rs.getLong(InstanceMetricTable.TRANSACTION_CALLS.getName());
+                    long durationSum = rs.getLong(InstanceMetricTable.TRANSACTION_DURATION_SUM.getName());
+                    responseTimeTrends.add((int) (durationSum / callTimes));
+                } else {
+                    responseTimeTrends.add(0);
+                }
+            } catch (SQLException | ShardingjdbcClientException e) {
+                logger.error(e.getMessage(), e);
+            }
+        });
+        return responseTimeTrends;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/InstanceShardingjdbcUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/InstanceShardingjdbcUIDAO.java
new file mode 100644
index 0000000..b461c00
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/InstanceShardingjdbcUIDAO.java
@@ -0,0 +1,216 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ui;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.core.util.BooleanUtils;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceUIDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.register.Instance;
+import org.apache.skywalking.apm.collector.storage.table.register.InstanceTable;
+import org.apache.skywalking.apm.collector.storage.ui.application.Application;
+import org.apache.skywalking.apm.collector.storage.ui.server.AppServerInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class InstanceShardingjdbcUIDAO extends ShardingjdbcDAO implements IInstanceUIDAO {
+
+    private static final Logger logger = LoggerFactory.getLogger(InstanceShardingjdbcUIDAO.class);
+
+    public InstanceShardingjdbcUIDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    private static final String GET_INSTANCE_SQL = "select * from {0} where {1} = ?";
+    private static final String GET_APPLICATIONS_SQL = "select {4}, count({0}) as cnt from {1} where {2} >= ? and {3} <= ? and {4} in (?) group by {4} limit 100";
+    private static final String GET_REGISTER_TIME_SQL = "select {2} from {0} where {1} = ? order by {2} asc";
+    private static final String GET_HEARTBEAT_TIME_SQL = "select {2} from {0} where {1} = ? order by {2} desc";
+
+    @Override
+    public List<Application> getApplications(long startSecondTimeBucket, long endSecondTimeBucket,
+        int... applicationIds) {
+        ShardingjdbcClient client = getClient();
+        List<Application> applications = new LinkedList<>();
+        String sqlOne = SqlBuilder.buildSql(GET_APPLICATIONS_SQL, InstanceTable.INSTANCE_ID.getName(),
+            InstanceTable.TABLE, InstanceTable.HEARTBEAT_TIME.getName(), InstanceTable.REGISTER_TIME.getName(), InstanceTable.APPLICATION_ID.getName());
+        String sqlTwo = SqlBuilder.buildSql(GET_APPLICATIONS_SQL, InstanceTable.INSTANCE_ID.getName(),
+                InstanceTable.TABLE, InstanceTable.REGISTER_TIME.getName(), InstanceTable.HEARTBEAT_TIME.getName(), InstanceTable.APPLICATION_ID.getName());
+        String applicationIdsParam = Arrays.toString(applicationIds).replace("[", "").replace("]", "");
+        Object[] params = new Object[] {startSecondTimeBucket, endSecondTimeBucket, applicationIdsParam};
+        try (
+                ResultSet rs = client.executeQuery(sqlOne, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            while (rs.next()) {
+                Integer applicationId = rs.getInt(InstanceTable.APPLICATION_ID.getName());
+                logger.debug("applicationId: {}", applicationId);
+                Application application = new Application();
+                application.setId(applicationId);
+                application.setNumOfServer(rs.getInt("cnt"));
+                applications.add(application);
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        try (
+                ResultSet rs = client.executeQuery(sqlTwo, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            while (rs.next()) {
+                Integer applicationId = rs.getInt(InstanceTable.APPLICATION_ID.getName());
+                logger.debug("applicationId: {}", applicationId);
+                Application application = new Application();
+                application.setId(applicationId);
+                application.setNumOfServer(rs.getInt("cnt"));
+                applications.add(application);
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return applications;
+    }
+
+    @Override
+    public Instance getInstance(int instanceId) {
+        ShardingjdbcClient client = getClient();
+        String sql = SqlBuilder.buildSql(GET_INSTANCE_SQL, InstanceTable.TABLE, InstanceTable.INSTANCE_ID.getName());
+        Object[] params = new Object[] {instanceId};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            if (rs.next()) {
+                Instance instance = new Instance();
+                instance.setId(rs.getString(InstanceTable.ID.getName()));
+                instance.setApplicationId(rs.getInt(InstanceTable.APPLICATION_ID.getName()));
+                instance.setAgentUUID(rs.getString(InstanceTable.AGENT_UUID.getName()));
+                instance.setRegisterTime(rs.getLong(InstanceTable.REGISTER_TIME.getName()));
+                instance.setHeartBeatTime(rs.getLong(InstanceTable.HEARTBEAT_TIME.getName()));
+                instance.setOsInfo(rs.getString(InstanceTable.OS_INFO.getName()));
+                return instance;
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return null;
+    }
+
+    @Override
+    public List<AppServerInfo> searchServer(String keyword, long startSecondTimeBucket, long endSecondTimeBucket) {
+        logger.debug("get instances info, keyword: {}, start: {}, end: {}", keyword, startSecondTimeBucket, endSecondTimeBucket);
+        String dynamicSql = "select * from {0} where {1} like ? and {2} >= ? and {3} <= ? and {4} = ?";
+        String sqlOne = SqlBuilder.buildSql(dynamicSql, InstanceTable.TABLE, InstanceTable.OS_INFO.getName(), InstanceTable.REGISTER_TIME.getName(), InstanceTable.HEARTBEAT_TIME.getName(), InstanceTable.IS_ADDRESS.getName());
+        String sqlTwo = SqlBuilder.buildSql(dynamicSql, InstanceTable.TABLE, InstanceTable.OS_INFO.getName(), InstanceTable.HEARTBEAT_TIME.getName(), InstanceTable.REGISTER_TIME.getName(), InstanceTable.IS_ADDRESS.getName());
+        Object[] params = new Object[] {keyword, startSecondTimeBucket, endSecondTimeBucket, BooleanUtils.FALSE};
+        
+        List<AppServerInfo> result = new LinkedList<>();
+        result.addAll(buildAppServerInfo(sqlOne, params));
+        result.addAll(buildAppServerInfo(sqlTwo, params));
+        return result;
+    }
+
+    @Override
+    public List<AppServerInfo> getAllServer(int applicationId, long startSecondTimeBucket, long endSecondTimeBucket) {
+        logger.debug("get instances info, applicationId: {}, startSecondTimeBucket: {}, endSecondTimeBucket: {}", applicationId, startSecondTimeBucket, endSecondTimeBucket);
+        String dynamicSql = "select * from {0} where {1} = ? and {2} >= ? and {2} <= ? and {3} = ?";
+        String sqlOne = SqlBuilder.buildSql(dynamicSql, InstanceTable.TABLE, InstanceTable.APPLICATION_ID.getName(), InstanceTable.REGISTER_TIME.getName(), InstanceTable.HEARTBEAT_TIME.getName(), InstanceTable.IS_ADDRESS.getName());
+        String sqlTwo = SqlBuilder.buildSql(dynamicSql, InstanceTable.TABLE, InstanceTable.APPLICATION_ID.getName(), InstanceTable.HEARTBEAT_TIME.getName(), InstanceTable.REGISTER_TIME.getName(), InstanceTable.IS_ADDRESS.getName());
+        Object[] params = new Object[] {applicationId, startSecondTimeBucket, endSecondTimeBucket, BooleanUtils.FALSE};
+        
+        List<AppServerInfo> result = new LinkedList<>();
+        result.addAll(buildAppServerInfo(sqlOne, params));
+        result.addAll(buildAppServerInfo(sqlTwo, params));
+        return result;
+    }
+
+    private List<AppServerInfo> buildAppServerInfo(String sql, Object[] params) {
+        ShardingjdbcClient client = getClient();
+
+        List<AppServerInfo> appServerInfos = new LinkedList<>();
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            while (rs.next()) {
+                AppServerInfo appServerInfo = new AppServerInfo();
+                appServerInfo.setId(rs.getInt(InstanceTable.INSTANCE_ID.getName()));
+                appServerInfo.setOsInfo(rs.getString(InstanceTable.OS_INFO.getName()));
+                appServerInfos.add(appServerInfo);
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return appServerInfos;
+    }
+
+    @Override public long getEarliestRegisterTime(int applicationId) {
+        ShardingjdbcClient client = getClient();
+        
+        String sql = SqlBuilder.buildSql(GET_REGISTER_TIME_SQL, InstanceTable.TABLE, InstanceTable.APPLICATION_ID.getName(), InstanceTable.REGISTER_TIME.getName());
+        Object[] params = new Object[] {applicationId};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            if (rs.next()) {
+                return rs.getLong(InstanceTable.REGISTER_TIME.getName());
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return 0;
+    }
+
+    @Override public long getLatestHeartBeatTime(int applicationId) {
+        ShardingjdbcClient client = getClient();
+        
+        String sql = SqlBuilder.buildSql(GET_HEARTBEAT_TIME_SQL, InstanceTable.TABLE, InstanceTable.APPLICATION_ID.getName(), InstanceTable.HEARTBEAT_TIME.getName());
+        Object[] params = new Object[] {applicationId};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            if (rs.next()) {
+                return rs.getLong(InstanceTable.HEARTBEAT_TIME.getName());
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return 0;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/MemoryMetricShardingjdbcUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/MemoryMetricShardingjdbcUIDAO.java
new file mode 100644
index 0000000..b290ca6
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/MemoryMetricShardingjdbcUIDAO.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ui;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.List;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.core.util.BooleanUtils;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.ui.IMemoryMetricUIDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryMetricTable;
+import org.apache.skywalking.apm.collector.storage.ui.common.Step;
+import org.apache.skywalking.apm.collector.storage.utils.DurationPoint;
+import org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class MemoryMetricShardingjdbcUIDAO extends ShardingjdbcDAO implements IMemoryMetricUIDAO {
+
+    private static final Logger logger = LoggerFactory.getLogger(MemoryMetricShardingjdbcUIDAO.class);
+    private static final String GET_MEMORY_METRIC_SQL = "select * from {0} where {1} = ?";
+
+    public MemoryMetricShardingjdbcUIDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override public Trend getHeapMemoryTrend(int instanceId, Step step, List<DurationPoint> durationPoints) {
+        return getMemoryTrend(instanceId, step, durationPoints, true);
+    }
+
+    @Override public Trend getNoHeapMemoryTrend(int instanceId, Step step, List<DurationPoint> durationPoints) {
+        return getMemoryTrend(instanceId, step, durationPoints, false);
+    }
+
+    private Trend getMemoryTrend(int instanceId, Step step, List<DurationPoint> durationPoints,
+        boolean isHeap) {
+        String tableName = TimePyramidTableNameBuilder.build(step, MemoryMetricTable.TABLE);
+
+        ShardingjdbcClient client = getClient();
+        String sql = SqlBuilder.buildSql(GET_MEMORY_METRIC_SQL, tableName, MemoryMetricTable.ID.getName());
+
+        Trend trend = new Trend();
+        durationPoints.forEach(durationPoint -> {
+            String id = durationPoint.getPoint() + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + BooleanUtils.booleanToValue(isHeap);
+            try (
+                    ResultSet rs = client.executeQuery(sql, new String[] {id});
+                    Statement statement = rs.getStatement();
+                    Connection conn = statement.getConnection();
+                ) {
+                if (rs.next()) {
+                    long max = rs.getLong(MemoryMetricTable.MAX.getName());
+                    long used = rs.getLong(MemoryMetricTable.USED.getName());
+                    long times = rs.getLong(MemoryMetricTable.TIMES.getName());
+                    trend.getMetrics().add((int)(used / times));
+
+                    if (max < 0) {
+                        trend.getMaxMetrics().add((int)(used / times));
+                    } else {
+                        trend.getMaxMetrics().add((int)(max / times));
+                    }
+                } else {
+                    trend.getMetrics().add(0);
+                    trend.getMaxMetrics().add(0);
+                }
+            } catch (SQLException | ShardingjdbcClientException e) {
+                logger.error(e.getMessage(), e);
+            }
+        });
+
+        return trend;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/NetworkAddressShardingjdbcUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/NetworkAddressShardingjdbcUIDAO.java
new file mode 100644
index 0000000..0177bd0
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/NetworkAddressShardingjdbcUIDAO.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ui;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.ui.INetworkAddressUIDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.register.NetworkAddressTable;
+import org.apache.skywalking.apm.collector.storage.ui.overview.ConjecturalApp;
+import org.apache.skywalking.apm.network.proto.SpanLayer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class NetworkAddressShardingjdbcUIDAO extends ShardingjdbcDAO implements INetworkAddressUIDAO {
+
+    private static final Logger logger = LoggerFactory.getLogger(NetworkAddressShardingjdbcUIDAO.class);
+
+    public NetworkAddressShardingjdbcUIDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override public int getNumOfSpanLayer(int srcSpanLayer) {
+        String dynamicSql = "select count({0}) as cnt from {1} where {2} = ?";
+        String sql = SqlBuilder.buildSql(dynamicSql, NetworkAddressTable.NETWORK_ADDRESS.getName(), NetworkAddressTable.TABLE, NetworkAddressTable.SRC_SPAN_LAYER.getName());
+        Object[] params = new Object[] {srcSpanLayer};
+
+        try (
+                ResultSet rs = getClient().executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            if (rs.next()) {
+                return rs.getInt("cnt");
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return 0;
+    }
+
+    @Override public List<ConjecturalApp> getConjecturalApps() {
+        String dynamicSql = "select {0}, count({0}) as cnt from {1} where {2} in (?, ?, ?) group by {0} limit 100";
+        String sql = SqlBuilder.buildSql(dynamicSql, NetworkAddressTable.SERVER_TYPE.getName(), NetworkAddressTable.TABLE, NetworkAddressTable.SRC_SPAN_LAYER.getName());
+        Object[] params = new Object[] {SpanLayer.Database_VALUE, SpanLayer.Cache_VALUE, SpanLayer.MQ_VALUE};
+
+        List<ConjecturalApp> conjecturalApps = new LinkedList<>();
+        try (
+                ResultSet rs = getClient().executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            while (rs.next()) {
+                ConjecturalApp conjecturalApp = new ConjecturalApp();
+                conjecturalApp.setId(rs.getInt(NetworkAddressTable.SERVER_TYPE.getName()));
+                conjecturalApp.setNum(rs.getInt("cnt"));
+                conjecturalApps.add(conjecturalApp);
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return conjecturalApps;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ResponseTimeDistributionShardingjdbcUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ResponseTimeDistributionShardingjdbcUIDAO.java
new file mode 100644
index 0000000..53d9002
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/ResponseTimeDistributionShardingjdbcUIDAO.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ui;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.List;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.ui.IResponseTimeDistributionUIDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.global.ResponseTimeDistributionTable;
+import org.apache.skywalking.apm.collector.storage.ui.common.Step;
+import org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class ResponseTimeDistributionShardingjdbcUIDAO extends ShardingjdbcDAO implements IResponseTimeDistributionUIDAO {
+    
+    private static final Logger logger = LoggerFactory.getLogger(ResponseTimeDistributionShardingjdbcUIDAO.class);
+    private static final String RESPONSE_TIME_DISTRIBUTION_SQL = "select {0}, {1}, {2} from {3} where {4} = ?";
+
+    public ResponseTimeDistributionShardingjdbcUIDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override public void loadMetrics(Step step, List<ResponseTimeStep> responseTimeSteps) {
+        ShardingjdbcClient client = getClient();
+        
+        String tableName = TimePyramidTableNameBuilder.build(step, ResponseTimeDistributionTable.TABLE);
+        String sql = SqlBuilder.buildSql(RESPONSE_TIME_DISTRIBUTION_SQL, ResponseTimeDistributionTable.CALLS.getName(), ResponseTimeDistributionTable.ERROR_CALLS.getName(), 
+                ResponseTimeDistributionTable.SUCCESS_CALLS.getName(), tableName, ResponseTimeDistributionTable.ID.getName());
+        
+        responseTimeSteps.forEach(responseTimeStep -> {
+            String id = responseTimeStep.getDurationPoint() + Const.ID_SPLIT + responseTimeStep.getStep();
+            
+            try (
+                    ResultSet rs = client.executeQuery(sql, new String[] {id});
+                    Statement statement = rs.getStatement();
+                    Connection conn = statement.getConnection();
+                ) {
+                if (rs.next()) {
+                    responseTimeStep.setCalls(rs.getLong(ResponseTimeDistributionTable.CALLS.getName()));
+                    responseTimeStep.setErrorCalls(rs.getLong(ResponseTimeDistributionTable.ERROR_CALLS.getName()));
+                    responseTimeStep.setSuccessCalls(rs.getLong(ResponseTimeDistributionTable.SUCCESS_CALLS.getName()));
+                }
+            } catch (SQLException | ShardingjdbcClientException e) {
+                logger.error(e.getMessage(), e);
+            }
+        });
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/SegmentDurationShardingjdbcUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/SegmentDurationShardingjdbcUIDAO.java
new file mode 100644
index 0000000..5510caa
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/SegmentDurationShardingjdbcUIDAO.java
@@ -0,0 +1,155 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ui;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.core.util.BooleanUtils;
+import org.apache.skywalking.apm.collector.core.util.StringUtils;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.ui.ISegmentDurationUIDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.segment.SegmentDurationTable;
+import org.apache.skywalking.apm.collector.storage.ui.trace.BasicTrace;
+import org.apache.skywalking.apm.collector.storage.ui.trace.QueryOrder;
+import org.apache.skywalking.apm.collector.storage.ui.trace.TraceBrief;
+import org.apache.skywalking.apm.collector.storage.ui.trace.TraceState;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class SegmentDurationShardingjdbcUIDAO extends ShardingjdbcDAO implements ISegmentDurationUIDAO {
+
+    private static final Logger logger = LoggerFactory.getLogger(SegmentDurationShardingjdbcUIDAO.class);
+
+    public SegmentDurationShardingjdbcUIDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override
+    public TraceBrief loadTop(long startSecondTimeBucket, long endSecondTimeBucket, long minDuration, long maxDuration,
+        String operationName, int applicationId, int limit, int from, TraceState traceState, QueryOrder queryOrder, String... segmentIds) {
+        ShardingjdbcClient client = getClient();
+        String sql = "select * from {0} where {1} >= ? and {1} <= ?";
+        List<Object> params = new ArrayList<>();
+        List<Object> columns = new ArrayList<>();
+        columns.add(SegmentDurationTable.TABLE);
+        columns.add(SegmentDurationTable.TIME_BUCKET.getName());
+        params.add(startSecondTimeBucket);
+        params.add(endSecondTimeBucket);
+        int paramIndex = 1;
+        if (minDuration != -1 || maxDuration != -1) {
+            if (minDuration != -1) {
+                paramIndex++;
+                sql = sql + " and {" + paramIndex + "} >= ?";
+                params.add(minDuration);
+                columns.add(SegmentDurationTable.DURATION.getName());
+            }
+            if (maxDuration != -1) {
+                paramIndex++;
+                sql = sql + " and {" + paramIndex + "} <= ?";
+                params.add(maxDuration);
+                columns.add(SegmentDurationTable.DURATION.getName());
+            }
+        }
+        if (StringUtils.isNotEmpty(operationName)) {
+            paramIndex++;
+            sql = sql + " and {" + paramIndex + "} like ?";
+            params.add("%" + operationName + "%");
+            columns.add(SegmentDurationTable.SERVICE_NAME.getName());
+        }
+        if (StringUtils.isNotEmpty(segmentIds)) {
+            paramIndex++;
+            sql = sql + " and {" + paramIndex + "} in (?)";
+            String segmentIdsParam = Arrays.toString(segmentIds).replace("[", "").replace("]", "");
+            params.add(segmentIdsParam);
+            columns.add(SegmentDurationTable.SEGMENT_ID.getName());
+        }
+        if (applicationId != 0) {
+            paramIndex++;
+            sql = sql + " and {" + paramIndex + "} = ?";
+            params.add(applicationId);
+            columns.add(SegmentDurationTable.APPLICATION_ID.getName());
+        }
+        switch (traceState) {
+            case ERROR:
+                paramIndex++;
+                sql = sql + " and {" + paramIndex + "} = ?";
+                params.add(BooleanUtils.TRUE);
+                columns.add(SegmentDurationTable.IS_ERROR.getName());
+                break;
+            case SUCCESS:
+                paramIndex++;
+                sql = sql + " and {" + paramIndex + "} = ?";
+                params.add(BooleanUtils.FALSE);
+                columns.add(SegmentDurationTable.IS_ERROR.getName());
+                break;
+        }
+        switch (queryOrder) {
+            case BY_START_TIME:
+                paramIndex++;
+                sql = sql + " order by {" + paramIndex + "} desc";
+                columns.add(SegmentDurationTable.START_TIME.getName());
+                break;
+            case BY_DURATION:
+                paramIndex++;
+                sql = sql + " order by {" + paramIndex + "} desc";
+                columns.add(SegmentDurationTable.DURATION.getName());
+                break;
+        }
+
+        sql = sql + " limit " + from + "," + limit;
+        sql = SqlBuilder.buildSql(sql, columns);
+        Object[] p = params.toArray(new Object[0]);
+
+        TraceBrief traceBrief = new TraceBrief();
+
+        int cnt = 0;
+        try (
+                ResultSet rs = client.executeQuery(sql, p);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            while (rs.next()) {
+                BasicTrace basicTrace = new BasicTrace();
+                basicTrace.setSegmentId(rs.getString(SegmentDurationTable.SEGMENT_ID.getName()));
+                basicTrace.setDuration(rs.getInt(SegmentDurationTable.DURATION.getName()));
+                basicTrace.setStart(rs.getLong(SegmentDurationTable.START_TIME.getName()));
+                basicTrace.setOperationName(rs.getString(SegmentDurationTable.SERVICE_NAME.getName()));
+                basicTrace.setError(BooleanUtils.valueToBoolean(rs.getInt(SegmentDurationTable.IS_ERROR.getName())));
+                traceBrief.getTraces().add(basicTrace);
+                cnt++;
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
+        }
+        traceBrief.setTotal(cnt);
+        return traceBrief;
+    }
+}
diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/SegmentShardingjdbcUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/SegmentShardingjdbcUIDAO.java
new file mode 100644
index 0000000..ebdcbf2
--- /dev/null
+++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/src/main/java/org/apache/skywalking/apm/collector/storage/shardingjdbc/dao/ui/SegmentShardingjdbcUIDAO.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+package org.apache.skywalking.apm.collector.storage.shardingjdbc.dao.ui;
+
+import com.google.protobuf.InvalidProtocolBufferException;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClient;
+import org.apache.skywalking.apm.collector.client.shardingjdbc.ShardingjdbcClientException;
+import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
+import org.apache.skywalking.apm.collector.storage.dao.ui.ISegmentUIDAO;
+import org.apache.skywalking.apm.collector.storage.shardingjdbc.base.dao.ShardingjdbcDAO;
+import org.apache.skywalking.apm.collector.storage.table.segment.SegmentTable;
+import org.apache.skywalking.apm.network.proto.TraceSegmentObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author linjiaqi
+ */
+public class SegmentShardingjdbcUIDAO extends ShardingjdbcDAO implements ISegmentUIDAO {
+    private static final Logger logger = LoggerFactory.getLogger(SegmentShardingjdbcUIDAO.class);
+    private static final String GET_SEGMENT_SQL = "select {0} from {1} where {2} = ?";
+
+    public SegmentShardingjdbcUIDAO(ShardingjdbcClient client) {
+        super(client);
+    }
+
+    @Override public TraceSegmentObject load(String segmentId) {
+        ShardingjdbcClient client = getClient();
+        String sql = SqlBuilder.buildSql(GET_SEGMENT_SQL, SegmentTable.DATA_BINARY.getName(),
+            SegmentTable.TABLE, SegmentTable.ID.getName());
+        Object[] params = new Object[] {segmentId};
+        try (
+                ResultSet rs = client.executeQuery(sql, params);
+                Statement statement = rs.getStatement();
+                Connection conn = statement.getConnection();
+            ) {
+            if (rs.next()) {
+                byte[] dataBinary = rs.getBytes(SegmentTable.DATA_BINARY.getName());
+                try {
+                    return TraceSegmentObject.parseFrom(dataBinary);
+                } catch (InvalidProtocolBufferException e) {
+                    logger.error(e.getMessage(), e);
+                }
+            }
+        } catch (SQLException | ShardingjdbcClientException e) {
+            logger.error(e.getMessage(), e);
... 5870 lines suppressed ...

-- 
To stop receiving notification emails like this one, please contact
wusheng@apache.org.