❤️作者主页:小虚竹

❤️作者简介:大家好,我是小虚竹。2022年度博客之星评选TOP 10🏆,Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主🏆,51CTO专家博主🏆

❤️技术活,该赏

❤️点赞 👍 收藏 ⭐再看,养成习惯

零:前言

云原生时代已经到来,虚竹哥今天分享一下,不同的数据库上云的实战经验。

一、背景

在泛互联网行业,如游戏、电商、社交等,随着业务数据量的不断增加和数据类型的复杂化,需要使用多种数据库来存储数据。然而,这些行业也面临着无法弹性扩缩容和高昂的运维成本等问题。

客户的数据库主要采用以下三种部署方式:

  • 本地数据库:使用传统的本地数据库部署方式,在IDC机房中部署数据库,而不是使用公有云服务;

  • 云ECS部署数据库:为了降低成本并优化架构设计,选择将数据库部署在云厂商的服务器上,而不是使用云数据库服务。

  • 云数据库服务:为了提高数据的可靠性和安全性,可扩展性和灵活性,向云厂商直接购买云数据库服务。

1.1、痛点

  • 业务上线速度慢:无论是本地数据库还是ECS自建数据库,都需要用户自己安装软件,自行解决补丁升级、高可用等问题,非常耗时;

  • 无法弹性扩缩容:无法根据业务需求进行快速变更,比如在流量增长后,自建数据库无法做到快速升级配置,可能流失潜在客户,流量高峰回落后,又无法做到快速降配,造成资源浪费;

  • 运维人力成本高:自建数据库需要用户自行解决所有数据库日常运维问题,实例数量达到一定程度后,管理非常困难,DBA人力成本高昂;

  • 安全防护问题多:自建数据库需要自行下载安装包,可能会被植入木马病毒,对数据库造成威胁;无灾备机制,需自行解决安全防护问题;缺少专业团队为数据库提供安全保障。

1.2、解决方案

数据库上云!

数据库上云!

数据库上云!

核心优点

弹性伸缩,部署灵活

弹性伸缩:云数据库即开即用,可弹性伸缩,规格可升可降,让企业灵活掌握资源投入;

按需付费:资源按需付费,随业务需求快速扩容,灵活部署,帮助客户从容应对业务量增长带来的资源紧张、响应速度慢等问题。

智能运维,降本增效

智能运维:相对客户原有自建数据库,云数据库在备份、添加只读、监控告警等更加方便;

降低运维成本:让DBA有时间专注应用优化等更有价值业务,降低DBA运维成本。同时,华为云具备专业的数据中心运维团队,让企业专注发展业务;

减轻企业负担:企业无需耗费长时间搭建IDC,无需高昂的一次性投入,无需担心设备折旧问题。

灾备完善,安全可靠

完善的灾备机制华为云数据库具备主备、两地三中心灾备、回收站、安全组等机制设计,大大提高数据库的安全性与可靠性;

严守数据中立:华为云不用技术手段非法获取客户数据,不对客户数据进行商业变现;

专注基础设施:华为云专注打造云基础设施服务,助力企业数据库上云,自主掌握核心数据;

数据中心稳定:T4级别机房,最高支持3AZ高可靠,满足客户高安全需求,所有数据3副本存储,跨机房跨区域保存;

安全防护丰富:提供WAF/DDoS等10+安全服务,保障业务安全。

更高可用,更强性能

云数据库性能更强:与自建单机数据库相比,主备、分布式架构的云数据库性能更加强大,满足大数据量需求。

下面以华为云的几款不同的数据库产品为例,分享下从零到壹数据库上云。

二、MySQL上云

云数据库RDS for MySQL是一种关系型数据库管理系统,RDS for
MySQL性能卓越,搭配LAMP,成为WEB开发的高效解决方案。

2.1、优点

超高性能,极致体验

优质硬件:华为经过多年的研究、创新和开发的服务器硬件,稳定、高性能。

SQL优化:提供慢SQL检测,并给出对应的优化建议。

高速访问:搭配同一地域的弹性云服务器,通过内网通信,缩短应用响应时间,并节省公网流量费用。

更低成本,更多服务

使用华为云数据库RDS for MySQL,只需支付RDS for
MySQL实例费用,无需购买和安装任何软硬件,简化运维操作。与之相比,使用自建数据库则需要付出服务器、系统、数据库等软硬件费用+机房托管费用+运维操作成本。

全系列高安全认证,数据库安全无忧

访问控制:入站、出站规则进行限制,控制可以连接数据库的网络范围。

安全防护:处于多层防火墙的保护之下,可以有力地抗击各种恶意攻击,保证数据安全。

数据加密:通过TLS加密、SSL加密实现传输加密。通过静态加密、表空间加密对数据进行加密。

操作审计:云审计服务,记录与云数据库RDS实例相关的操作事件。

多种部署及容灾方案,满足多种可用性需求

双机热备:云数据库RDS服务采用热备架构,故障秒级自动切换。

异地容灾:可以在异地区域使用备份文件在异地恢复到新的RDS实例,用来恢复业务。

同城容灾:支持多可用区部署,可用区之间内网互通,不同可用区之间电力、网络物理隔离。

强大扩展能力,满足不同阶段业务需求

丰富的产品规格:提供单机、主备、只读实例,一键单机转主备。

弹性扩容:支持增删只读实例,及时应对业务暴涨/回落情况。

多种配置:通用型(通过资源复用换取CPU使用率最大化,性价比较高)、独享型(完全独享CPU和内存,性能长期稳定)。

丰富的运维工具,助力聚焦核心业务

备份恢复:支持按备份集和指定时间点的恢复,732天自动备份恢复,数据不丢失。

智能运维:全方位对数据库进行智能监控与诊断优化。

监控报警:自定义监控目标与通知策略,及时了解云数据库RDS for
MySQL服务运行状况。

差异化优势

性价比:优异产品性能,确保领先或持平业界,且价格上更具竞争力;

可为单机实例添加只读实例,可以满足非核心业务的多读需求;

支持秒级监控,包括1秒监控和5秒监控,用于提高监控指标的瞬时精确值;

支持查看参数模板所应用到实例的记录。

2.2、适用场景

针对电商客户

云数据库RDS for
MySQL为电商和移动商务应用提供可靠、经济、高效的数据存储,使应用在网络上快速安全运行;

服务价值

RDS for
MySQL可帮助客户有效管理用户、充值支付、账单等关键数据,快速进行规格变更应对流量洪峰;

针对游戏客户

云数据库RDS for
MySQL凭借其高可靠、高性能等特性,能帮助客户轻松部署移动在线游戏服务;

服务价值

RDS for MySQL可帮助客户有效管理用户、充值、支付、账单、购物车等数据;

针对物联网IoT客户

规模和可靠性至关重要,需要云数据库提供快速的响应时间来支持大量的连接;

服务价值

云数据库RDS for
MySQL提供了高吞吐量和高并发性,可以通过快速的响应来支持大量的连接;

针对电子政务客户

电子政务面临服务数十亿人次的潜在规模的挑战,需要高性能,高吞吐量和高可用的云服务。

服务价值

高性能、高吞吐量、高可用的云数据库RDS for
MySQL可帮助客户轻松应对潜在用户规模的挑战。

2.3、购买体验

在这里插入图片描述

先注册登录华为云帐号。

登录管理控制台–》

在这里插入图片描述

单击"购买数据库实例"。

在这里插入图片描述

按需购买哈

本次虚竹哥为了学习,买了单机版,4核8g,建议连接数是2500的。

在这里插入图片描述

注:企业的生产数据库,要用 主备
的实例类型(一主一备的经典高可用架构)。

设置网络:

在这里插入图片描述

设置root账号的密码

在这里插入图片描述

最后一步,买买买。

2.4、连接体验

绑定弹性公网IP

选择买的实例,单击实例名称,进入实例的"基本信息"页面。

在这里插入图片描述

选择弹性公网IP,单击"是",提交绑定任务。
在这里插入图片描述

这样就绑定成功了。

设置安全组规则

选择买的实例,单击实例名称,进入实例的"基本信息"页面。

在这里插入图片描述

左侧导航栏,单击"连接管理",在"安全组规则"模块"当前安全组"处,单击安全组名称,进入安全组页面。

在这里插入图片描述

可添加入方向规则和出方向规则。
在这里插入图片描述

通过公网连接RDS for MySQL实例

使用客户端navicat
在这里插入图片描述
在这里插入图片描述

密码是购买时,设置的密码。

测试连接。

在这里插入图片描述

接下来连接上的操作与本地操作一样。

三、Redis上云

云数据库GaussDB(for
Redis)作为华为云旗下企业级Redis,致力于为企业客户提供稳定可靠、超高并发,且能够极速弹性扩容的核心数据存储服务。GaussDB(for
Redis)采用云原生分布式架构,完全兼容Redis协议,支持丰富的数据类型,提供数据实时持久化、多副本强一致保障,以及实时监控、弹性伸缩、自动备份等一站式服务。

3.1、优点

高可用

某个节点发生故障,可以在秒级内完成接管,即使N-1节点同时发生故障,只要还有1个实例可用,业务依然可以正常运行,最大程度减少对业务的影响;

高吞吐

多节点可以同时写入,且采用多线程架构,吞吐轻松翻倍,QPS可水平扩展,有效扛住流量高峰;

强一致

通过GaussDB基础组件服务实现数据三副本冗余,确保0丢失,同时满足多点访问强一致性要求,业务设计更轻松;

大容量

采用计算、存储分离架构,全面支持大数据量场景,产品定位突破"缓存"局限,能帮业务长期承载更多重要数据;

秒扩容

以1GB粒度随时按需调整,秒级生效。GaussDB基础组件服务实现了存储平滑伸缩,业务0感知;

降成本

相比纯内存架构,硬件成本降低75%~90%,容量几乎全部可用,并且可按1GB细粒度购买,不会买多浪费。

差异化优势

  • 高可靠------数据0丢失,强一致,性能稳定

  • 低成本------价格节省75%,容量更大

  • 弹性伸缩------平滑扩容,秒级体验

  • 安全运维------专业云服务,一站式运维

  • 单节点支持最大1TB,可对数据做持久化存储,保证数据强一致存储,;

  • 通过安全组限制源端IP对实例的访问权限,可以细化到端口;

  • 可通过控制台对访问账号的权限进行设置和管理;

  • 客户可以在控制台自定义设置备份文件留存时间,最长保留周期为35天,满足金融客户监管需求;

  • 客户可以在控制台实现实例重启,修改某些运行参数。

3.2、适用场景

针对电商客户

在大促活动期间会出现大量并发访问,而商品搜索又存在热门商品和冷门商品并存的状况,同时对数据一致性有较高要求;

服务价值

使用GaussDB(for
Redis)作为前端缓存(需要配置大内存),可缓解后端数据库压力,平稳渡过业务高峰;同时,将热门商品信息作为热数据驻留在内存中,冷门商品信息置换到共享存储池中,可进一步降低数据库压力;此外,强一致counter让秒杀活动不再"雪崩",库存扣减不再担心"超卖",还可以用sorted
set帮助构建spam机制,用geo实现物流跟踪;

针对游戏客户

存在一些对时延非常敏感的场景,如跨服对战,同时需要打造敏捷迭代、功能完备的游戏系统;

服务价值

GaussDB(for
Redis)提供丰富的数据类型,帮助客户构建自己的游戏系统。如用sorted
set搭建实时排行榜、用pub/sub实现即时聊天室;部署动态服用于更新玩家发布的"朋友圈",部署账号服用于保存基本用户信息,部署好友服用于持久化存储海量、复杂的玩家关系网。此外,使用GaussDB(for
Redis)作为前端缓存(需要配置大内存),可加快应用访问速度,帮助降低时延;

针对物联网IoT客户

需要高可靠、高可用、高性能的数据库,保障业务稳定发展,防止出现阻塞问题。

服务价值

例如多城市车辆充电平台,往往需要管理分布在极大范围的端点设备,为了让更多终端轻松互联、安全管理,可以借助GaussDB(for
Redis)构建高并发的任务调度系统、端设备监控以及更多边缘计算能力。

3.3、购买体验

在这里插入图片描述

先注册登录华为云帐号。

登录管理控制台–》

在这里插入图片描述
在这里插入图片描述

按需购买哈,这里虚竹哥选购的是2核24GB的

在这里插入图片描述
在这里插入图片描述

选择网络:
在这里插入图片描述

设置密码:

在这里插入图片描述

最后一步,买买买。

3.4、连接体验

获取Redis客户端:

  wget http://download.redis.io/releases/redis-5.0.7.tar.gz

解压客户端工具包:

tar -xzf redis-5.0.7.tar.gz

连接实例:

 cd redis-5.0.7\
  make\
  cd src\
  ./redis-cli -h 弹性公网ip -p 6379 -a 密码

出现如下信息,说明连接成功:

 IP:port\>

四、InfluxDB上云

GaussDB(for Influx)
是一款采用计算存储分离架构,兼容InfluxDB生态的云原生时序数据库。提供高性能读写、高压缩率、冷热分层存储以及弹性扩容、监控告警等服务能力。适用于运维、物联网、工业生产等监控应用场景。

4.1、优点

极致性能

亿级时间线数据管理,轻松支撑每天万亿记录写入,聚合查询性能卓越。

海量数据分析

支持多维条件组合查询,更有聚合分析、时序洞察特性,提供全场景支持。

低成本存储

列式存储,自适应压缩算法,自动冷热分级存储,存储成本低。

极致弹性

计算和存储可以独立按需扩容,无需迁移数据,急速完成数据库集群扩缩容。

4.2、适用场景

针对物联网IoT客户

IoT传感器时序数据分析,助力万物互联。

服务价值

  • 超强写入:小批量写入场景性能为开源版本InfluxDB的4.5倍,大批量写入场景性能为开源版本InfluxDB的3.3倍

  • 多维度分析:支持多维条件组合查询,对海量数据分析得心应手

  • 弹性扩展:基于计算存储分离的分布式架构,分钟级计算节点扩容,应对业务高峰期

针对应用运维监控

统一应用运维实时监控,全局把控系统运行状态。

服务价值

  • 海量数据支持:支持每天万亿条监控指标写入,写入性能线性扩展

  • 异常检测:支持多种时序异常类型的检测告警,异常可视化直观展示,方便运维人员识别异常,告警策略设置简单,无需机器学习知识背景

  • 智能预测:采用多维时序预测算法,利用多指标间关联关系提高预测准确度,相比传统预测算法准确度更高

4.3、购买体验

在这里插入图片描述

先注册登录华为云帐号。

登录管理控制台–》

在这里插入图片描述

在这里插入图片描述

按需购买哈,虚竹哥选购的是4核16的。

在这里插入图片描述
在这里插入图片描述

网络设置和密码设置:

在这里插入图片描述

最后一步,买买买。

4.4、连接体验

通过Java语言连接实例:

pom.xml依赖添加:

<dependency>
  <groupId>org.influxdb</groupId>
  <artifactId>influxdb-java</artifactId>
  <version>2.21</version>
</dependency>

使用SSL方式连接实例的Java代码示例:

package influxdb;

 import java.security.SecureRandom;
 import java.security.cert.X509Certificate;
 import java.util.concurrent.TimeUnit;
 import javax.net.ssl.SSLContext;

 import okhttp3.OkHttpClient;
 import org.influxdb.InfluxDB;
 import org.influxdb.InfluxDBFactory;
 import org.influxdb.dto.Point;
 import org.influxdb.dto.Query;
 import org.influxdb.dto.QueryResult;

 import org.apache.http.ssl.SSLContexts;
 import javax.net.ssl.*;

 public class demo {
     public static void main(String[] args) {
         OkHttpClient.Builder client = new OkHttpClient.Builder()
             .connectTimeout(10, TimeUnit.SECONDS)
             .writeTimeout(10, TimeUnit.SECONDS)
             .readTimeout(10, TimeUnit.SECONDS)
             .retryOnConnectionFailure(true);

         client.sslSocketFactory(defaultSslSocketFactory(), defaultTrustManager());
         client.hostnameVerifier(noopHostnameVerifier());

         final String serverURL = "https://127.0.0.1:8086", username = "root", password = "root";

         InfluxDB influxdb = InfluxDBFactory.connect(serverURL, username, password, client);

         // Create a database...
         String databaseName = "foo";
         influxdb.query(new Query("CREATE DATABASE " + databaseName, databaseName));
         influxdb.setDatabase(databaseName);

         // Write points to influxdb.
         influxdb.write(Point.measurement("bar")
             .time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
             .tag("location", "chengdu")
             .addField("temperature", 22)
             .build());

         // Query your data using InfluxQL.
         QueryResult queryResult = influxdb.query(new Query("SELECT * FROM bar", databaseName));

         // Close it if your application is terminating or you are not using it anymore.
         influxdb.close();
     }

     private static X509TrustManager defaultTrustManager() {
         return new X509TrustManager() {
             public X509Certificate[] getAcceptedIssuers() {
                 return new X509Certificate[0];
             }

             public void checkClientTrusted(X509Certificate[] certs, String authType) {
             }

             public void checkServerTrusted(X509Certificate[] certs, String authType) {
             }
         };
     }

     private static SSLSocketFactory defaultSslSocketFactory() {
         try {
             SSLContext sslContext = SSLContexts.createDefault();

             sslContext.init(null, new TrustManager[] {
                 defaultTrustManager()
             }, new SecureRandom());
             return sslContext.getSocketFactory();
         } catch (Exception e) {
             throw new RuntimeException(e);
         }

     }

     private static HostnameVerifier noopHostnameVerifier() {
         return new HostnameVerifier() {
             @Override
             public boolean verify(final String s, final SSLSession sslSession) { 
                 return true;//true 表示使用ssl方式,但是不校验ssl证书,建议使用这种方式
             }
         };
     }
 }

使用非SSL方式连接实例的Java代码示例:

package influxdb;

import okhttp3.OkHttpClient;
import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;
import org.influxdb.dto.Point;
import org.influxdb.dto.Query;
import org.influxdb.dto.QueryResult;

import java.util.concurrent.TimeUnit;

public class demoNoSSL {
    public static void main(String[] args) {
        OkHttpClient.Builder client = new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .writeTimeout(10, TimeUnit.SECONDS)
                .readTimeout(10, TimeUnit.SECONDS)
                .retryOnConnectionFailure(true);

        final String serverURL = "http://127.0.0.1:8086", username = "root", password = "root";
        InfluxDB influxdb = InfluxDBFactory.connect(serverURL, username, password, client);

        // Create a database...
        String databaseName = "foo";

        influxdb.query(new Query("CREATE DATABASE " + databaseName, databaseName));
        influxdb.setDatabase(databaseName);

        // Write points to influxdb.
        influxdb.write(Point.measurement("bar")
                .time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
                .tag("location", "chengdu")
                .addField("temperature", 22)
                .build());

        // Query your data using InfluxQL.
        QueryResult queryResult = influxdb.query(new Query("SELECT * FROM bar", databaseName));

        // Close it if your application is terminating or you are not using it anymore.
        influxdb.close();
    }
}

使用连接池方式连接实例的Java代码示例:

package influxdb;

import okhttp3.ConnectionPool;
import okhttp3.OkHttpClient;
import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;
import org.influxdb.dto.Point;
import org.influxdb.dto.Query;
import org.influxdb.dto.QueryResult;

import java.util.concurrent.TimeUnit;

public class demoConnectionPool {
    public static void main(String[] args) {
        // 客户端连接池功能基于OkHttpClient实现
        OkHttpClient.Builder client = new OkHttpClient().newBuilder();
        client.connectTimeout(10, TimeUnit.SECONDS);
        client.readTimeout(10, TimeUnit.SECONDS);
        client.writeTimeout(10, TimeUnit.SECONDS);
        // 建议设为true,屏蔽部分连接错误,并自动进行重试
        client.retryOnConnectionFailure(true);
        // maxIdleConnections指连接池最多维护的未使用的Idle连接数量,默认值是5
        // 超过阈值的idle连接会由连接池关闭,关闭后sockets进入TIME_WAIT状态等待系统回收,该参数需根据实际连接数适当调整
        client.connectionPool(new ConnectionPool(5, 30, TimeUnit.SECONDS));

        final String serverURL = "http://127.0.0.1:8086", username = "root", password = "root";
        InfluxDB influxdb = InfluxDBFactory.connect(serverURL, username, password, client);

        // Create a database...
        String databaseName = "foo";

        influxdb.query(new Query("CREATE DATABASE " + databaseName, databaseName));
        influxdb.setDatabase(databaseName);

        // Write points to influxdb.
        influxdb.write(Point.measurement("bar")
                .time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
                .tag("location", "chengdu")
                .addField("temperature", 22)
                .build());

        // Query your data using InfluxQL.
        QueryResult queryResult = influxdb.query(new Query("SELECT * FROM bar", databaseName));

        // Close it if your application is terminating or you are not using it anymore.
        influxdb.close();
    }
}

五、文档数据库上云

华为云文档数据库服务(Document Database
Service,简称DDS)完全兼容MongoDB协议,提供安全、高可用、高可靠、弹性伸缩和易用的数据库服务,支持分片集群(Sharding)、副本集(ReplicaSet)和单节点三种部署架构,同时提供一键部署、弹性扩容、容灾、备份、恢复、监控和告警等功能。

5.1、优点

实例类型灵活多样

文档数据库服务DDS支持集群实例、副本集实例、单节点实例等多种实例类型,能够满足不同业务场景需求;

弹性伸缩灵活配置

文档数据库服务DDS提供了变更实例存储空间、节点数量、CPU和内存规格的功能,客户可以根据业务需要灵活配置所需资源;

灵活管理可视可控

管理控制台提供全面的监控信息,简单易用,灵活管理,可视可控;

多层数据安全保障

通过虚拟私有云、子网、安全组、存储加密、DDoS防护以及SSL安全访问等多层安全防护体系,有力抗击各种恶意攻击,保障数据安全;提供审计日志功能,记录客户对数据库或集合执行的操作,帮助客户对数据库进行安全审计、故障根因分析等操作;支持细粒度权限,实现精细的权限管理;

丰富工具简化运维

在备份和恢复方面,支持全量备份、增量备份,副本集支持任意时间点备份恢复,备份数据最多可保存732天;在监控报警方面,可实时监控实例运行的指标,用户可自定义监控目标与通知策略,及时了解数据库服务的运行情况。

差异化优势

1、支持单节点部署,解决无高可用需求的测试场景,节省资源成本;

2、支持用户设置跨区域备份策略,包含开启/关闭,备份区域,以及备份保留时长;

3、实例支持可用区迁移:解决用户AZ级别的容灾问题;

4、提供错误日志展示和下载功能;

5、支持租户使用自己在KMS服务上上传的密钥对DDS数据进行静态加密,提高数据安全性,部分金融、外企有加密需求,并且是上云必备门槛;

6、只读复制延迟:客户可以在控制台设置只读节点的复制延迟时间,在紧急情况下(误删数据)通过延迟的只读节点快速找回数据。

5.2、适用场景

针对大型企业和互联网客户

往往需要应对TB级数据,有较强的数据存储需求。且大数据场景下,还需要满足业务在线数据实时写入数据库、大数据计算分析、分析结果反馈等实时查询、动态分析的需求。

服务价值

DDS的副本集模式采用三节点Replica
Set的高可用架构,三个数据节点组成一个反亲和组,部署在不同的物理服务器上,自动同步数据。Primary节点和Secondary节点提供服务,两个节点分别拥有独立内网地址,配合Driver实现读取压力分配。不仅可以满足大型企业和互联网行业客户对海量数据存储的需求,还能解决数据分析场景需求。

针对游戏客户

在游戏应用中,游戏玩家活跃高峰期,对并发能力要求较高,同时随着业务发展,在游戏玩法变化时可能还需要变更表结构,运维难度和工作量较大;

服务价值

可以将一些用户信息,如用户装备、用户积分等存储在DDS数据库中,使用DDS的集群类型,应对高并发场景;DDS副本集和集群架构的高可用特性,能够满足游戏在高并发场景下持续稳定运行的需求;另外,DDS兼容MongoDB,具有No-Schema的方式,能免去客户在游戏玩法变化中需要变更表结构的痛苦,非常适用于灵活多变的游戏业务需求;客户可以将模式固定的结构化数据存储在云数据库RDS中,模式灵活的业务存储在DDS中,高热数据存储在GaussDB(for
Redis)里,实现对业务数据高效存取,降低存储数据的投入成本;

针对物联网IoT客户

IoT智能终端往往需要进行多样化的数据采集,且需要存储设备日志信息,并对这些信息进行多维度分析。同时,IoT业务增长快、数据量大、访问量增长迅速,数据存储需要具备水平扩展能力;

服务价值

DDS兼容MongoDB,具有高性能和异步数据写入功能,特定场景下可达到内存数据库的处理能力。同时,DDS中的集群实例,可动态扩容和增加mongos和shard组件的性能规格和个数,性能及存储空间可实现快速扩展,非常适合IoT的高并发写入的场景;

5.3、购买体验

在这里插入图片描述

先注册登录华为云帐号。

登录管理控制台–》

在这里插入图片描述

在这里插入图片描述

按需购买哈,虚竹哥选购的是,副本集,4核8G的。

在这里插入图片描述

网络设置:

在这里插入图片描述

最后一步,买买买。

5.4、连接体验

Jar驱动下载地址:https://repo1.maven.org/maven2/org/mongodb/mongo-java-driver/3.0.4/

使用指南请参考:https://mongodb.github.io/mongo-java-driver/4.2/driver/getting-started/installation/

Java示例(无证书连接):

通过Java连接集群实例时,代码中的Java链接格式如下:

mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin

参数说明:
在这里插入图片描述

public class Connector {
    public static void main(String[] args) {
        try {
            ConnectionString connString = new ConnectionString("mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin");
            MongoClientSettings settings = MongoClientSettings.builder()
                    .applyConnectionString(connString)
                    .retryWrites(true)
                    .build();
            MongoClient mongoClient = MongoClients.create(settings);
            MongoDatabase database = mongoClient.getDatabase("admin");
            //ping数据库,如果失败抛出异常
            BsonDocument command = new BsonDocument("ping", new BsonInt64(1));
            Document commandResult = database.runCommand(command);
            System.out.println("Connect to database successfully");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Test failed");
        }
    }
}

六、总结

本文分享的内容比较多,从游戏、电商、社交等泛互联网行业的现状和痛点进行分析,主要涉及的问题是:业务上线速度慢、无法弹性扩缩容、运维人力成本高和安全防护问题多。虚竹哥建议解决方案是:数据库上云!

数据库上云的核心优点主要有4个方面:

  • 弹性伸缩,部署灵活

  • 智能运维,降本增效

  • 灾备完善,安全可靠

  • 更高可用,更强性能

除了理论方面的分享,文中还介绍了多个不同数据库类型的上云实践分享。主要数据库有:云数据库RDS
for MySQL,云数据库GaussDB(for Redis),GaussDB(for Influx)
和华为云文档数据库服务(Document Database
Service,简称DDS)。从优点到适用场景,到购买体验和连接体验详细介绍一番。

通过本文的学习,可以对数据库上云有一定的了解和实操经验。

哈哈,我是虚竹哥,我们下文见~

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐