@Override
    public void start() throws ServiceNotProvidedException, ModuleStartException {
        MetricsCreator metricCreator =
            getManager()
                .find(TelemetryModule.NAME)
                .provider()
                .getService(MetricsCreator.class);
        HealthCheckMetrics healthChecker =
            metricCreator.createHealthCheckerGauge(
                "storage_" + name(),
                MetricsTag.EMPTY_KEY,
                MetricsTag.EMPTY_VALUE);
        jdbcClient.registerChecker(healthChecker);
        try {
            jdbcClient.connect();
            modelInstaller.start();

            getManager()
                .find(CoreModule.NAME)
                .provider()
                .getService(ModelCreator.class)
                .addModelListener(modelInstaller);
        } catch (StorageException e) {
            throw new ModuleStartException(e.getMessage(), e);
        }
    }
Different storage implementations have different ways to create the tables/indices,
the specific implementations should provide a model installer for that storage.
oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/JDBCStorageProvider.java