admin管理员组

文章数量:1530085

❤️作者主页:小虚竹

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

❤️技术活,该赏

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

文章目录

  • 零:前言
  • 一、背景
    • 1.1、痛点
    • 1.2、解决方案
  • 二、MySQL上云
    • 2.1、优点
    • 2.2、适用场景
    • 2.3、购买体验
    • 2.4、连接体验
  • 三、Redis上云
    • 3.1、优点
    • 3.2、适用场景
    • 3.3、购买体验
    • 3.4、连接体验
  • 四、InfluxDB上云
    • 4.1、优点
    • 4.2、适用场景
    • 4.3、购买体验
    • 4.4、连接体验
  • 五、文档数据库上云
    • 5.1、优点
    • 5.2、适用场景
    • 5.3、购买体验
    • 5.4、连接体验
  • 六、总结

零:前言

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

一、背景

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

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

  • 本地数据库:使用传统的本地数据库部署方式,在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/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)。从优点到适用场景,到购买体验和连接体验详细介绍一番。

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

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

本文标签: 实践经验数据库零到壹