PolarDB:中国云原生数据库的领军者

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 数据库社区“墨天轮”公布了2024年最新一期中国数据库流行度排行榜,阿里云瑶池旗下的自研云原生数据库PolarDB夺冠
我是一名个人开发者

2024年7月中国数据库排行榜:PolarDB独领云风骚,达梦跨越新巅峰.

数据库社区“墨天轮”公布了2024年最新一期中国数据库流行度排行榜,阿里云瑶池旗下的自研云原生数据库PolarDB夺冠,并刷新榜单总分纪录。墨天轮评价称,因云而生的PolarDB数据库以客户需求为导向,并在业界开创性地落地“三层解耦”架构、多主多写、HTAP、Serverless、集中与分布式一体化等一系列业内领先的前沿技术,为用户提供了灵活、可靠的数据库服务,解决了众多业务问题。
image.png
据了解,目前PolarDB已被10000家企业级用户采用,广泛落地于政务、金融、电信、物流、互联网等领域的核心业务系统。
image.png
墨天轮是中国知名数据库技术社区,其发起的中国数据库流行度排行榜,依据搜索引擎数据、核心案例数、资质数量、专利数、论文数等标准,对290个最主流的国产数据库进行综合评比。该榜单反映的是数据库产品在市场中的活跃度,被誉为中国版的“DB-Engines排名榜”。
在2024年7月的排行榜中,PolarDB以812.78分刷新榜单记录,排名第一,OceanBase、TiDB、OpenGauss、人大金仓分列2~5名。

引言

自2017年诞生以来,PolarDB便以其独特的云原生设计和存储计算分离的技术创新,引领着中国数据库行业的发展。作为中国首款自研的云原生数据库,PolarDB不仅提供了高性能的数据处理能力,还以其卓越的性价比和安全性,赢得了市场的广泛认可。

PolarDB的“三层分离”新版本在2024年1月的首届PolarDB开发者大会上正式发布。这一新版本不仅实现了50%的数据库成本节省,更通过智能决策技术,实现了查询性能的10倍提升。这一创新不仅体现了PolarDB在数据库技术领域的深厚积累,也进一步巩固了其在云原生数据库市场的领先地位。

在过去的几年里,PolarDB以惊人的速度增长,3年增速超过400%。这一成绩的背后,是PolarDB在数据库领域的持续创新和对市场需求的精准把握。目前,PolarDB已经服务于自然人税收管理系统、全国60%的省级医保信息平台等重要机构,以及中国联通、友邦保险、海底捞、米哈游等知名企业。这些客户的认可,充分证明了PolarDB在数据库领域的实力和影响力。

除了在产品和市场方面的卓越表现,PolarDB还积极推动数据库开源社区的发展。作为数据库开源的重要推动者,PolarDB已经正式开源近3年,建立了15个SIG组,吸引了超过3万名开发者和社区用户参与。此外,还有韵达、网易数帆、龙蜥等60多家生态伙伴加入了PolarDB的开源生态系统。

为了进一步推动数据库开源教育和技术普及,PolarDB开源数据库工作室已经在10多所高校挂牌成立。通过与武汉大学、华东师范大学等知名学府的联合合作,PolarDB不仅开设了相关教学课程,还开展了智慧问答助手等多个项目。这些举措不仅有助于培养新一代的数据库人才,也为PolarDB的长远发展注入了源源不断的活力。

PolarDB 体验

今天,我们就来体验一次,国产数据发展至今的强大之处。首先先购买或者体验一个PolarDB 的实例。

image.png

压测准备

配置 参数
CPU 2核
内存 4G
MySQL 5.8

PolarDB 压测

概念了解

在开始压测之前,我们首先来了解几个和压测有关的关键字,通过了解这些指标的定义和计算方法,可以更好地评估和优化系统的性能:

QPS(Queries Per Second)指的是每秒查询率,是衡量系统处理查询请求能力的一个重要指标。它通常用于评估搜索引擎、数据库、API等系统的性能。

TPS(Transactions Per Second)即每秒事务处理率,是衡量系统在单位时间内处理事务数量的一个重要指标。它通常用于评估数据库系统、交易系统等需要处理复杂事务的系统的性能。

RT(95%)通常指的是95%的请求的延迟时间,单位为毫秒,它反映了系统处理请求的响应速度。

以下是详细介绍:

QPS(每秒查询率)

  • 定义:系统每秒能够处理的查询请求数量。
  • 应用场景:搜索引擎、数据库查询、Web服务器等。
  • 计算方式:总查询数除以总时间(秒)。
  • 重要性:反映了系统的查询处理能力和响应速度。

TPS(每秒事务处理率)

  • 定义:系统每秒能处理的事务数量。
  • 应用场景:数据库系统、金融交易系统、电商平台等。
  • 计算方式:总事务数除以总时间(秒)。
  • 重要性:反映了系统的处理能力和效率。

RT(95%)(95%的请求延迟)

  • 定义:95%的请求的延迟时间,单位为毫秒。
  • 应用场景:用于评估系统的响应速度。
  • 计算方式:通常通过监控工具收集数据后计算得出。
  • 重要性:反映了系统处理请求的实时性,较低的RT(95%)意味着更好的用户体验。

性能测试方法(OLTP)

测试工具

Sysbench是一个跨平台且支持多线程的模块化基准测试工具,用于评估系统在运行高负载的数据库时相关核心参数的性能表现。使用Sysbench是为了绕过复杂的数据库基准设置,甚至在没有安装数据库的前提下,快速了解数据库系统的性能。

测试场景

对不同独享规格的一主一只读节点集群的只读、只写、读写性能以及一主多只读节点集群的只读性能进行OLTP性能测试。
对不同通用规格的一主一只读节点集群的只读、只写、读写性能进行OLTP性能测试。

衡量指标

TPS(Transactions Per Second):即数据库每秒执行的事务数,以COMMIT成功次数为准。
QPS(Queries Per Second):即数据库每秒执行的SQL数(含INSERT、SELECT、UPDATE、DELETE等)。

安装Sysbench

在ECS中执行如下命令安装Sysbench。

yum install gcc gcc-c++ autoconf automake make libtool bzr mysql-devel git mysql

git clone https://github.com/akopytov/sysbench.git
##从Git中下载Sysbench

cd sysbench
##打开Sysbench目录

git checkout 1.0.18
##切换到Sysbench 1.0.18版本

./autogen.sh
##运行autogen.sh

./configure --prefix=/usr --mandir=/usr/share/man

make
##编译

make install

执行如下命令配置Sysbench client,使内核可以利用所有的CPU核数处理数据包(默认设置为2核),同时减少CPU核数之间的上下文切换。

sudo sh -c 'for x in /sys/class/net/eth0/queues/rx-*; do echo ffffffff>$x/rps_cpus; done'

说明:ffffffff表示使用32个核。请根据实际配置修改,例如ECS为8核,则输入ff。

sudo sh -c "echo 32768 > /proc/sys/net/core/rps_sock_flow_entries"
sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt"
sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-1/rps_flow_cnt"

测试方法

在ECS上执行如下命令,以在PolarDB MySQL版集群中创建数据库testdb为例。

mysql -h XXX -P XXX -u XXX -p XXX -e 'create database testdb'

说明:请将本命令和后续步骤命令中的XXX替换为PolarDB MySQL版集群的集群地址、端口号、用户名和密码,具体参数说明如下。
-h PolarDB MySQL版集群的集群地址。
-P PolarDB MySQL版集群的端口号。
-u PolarDB MySQL版集群的用户名。
-p 上述用户名对应的密码。

使用Sysbench测试PolarDB MySQL版集群版一主一只读节点的只读性能,整个过程将持续10分钟。

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600  oltp_read_only prepare
##准备数据

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600   --threads=XXX --percentile=95 --range_selects=0 --skip-trx=1 --report-interval=1 oltp_read_only run
##运行workload

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600   --threads=XXX --percentile=95 --range_selects=0 oltp_read_only cleanup
##清理

使用Sysbench测试PolarDB MySQL版集群版一主一只读节点的写入性能,整个过程将持续10分钟。

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600  oltp_write_only prepare
##准备数据

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600   --threads=XXX --percentile=95 --report-interval=1 oltp_write_only run
##运行workload

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600   --threads=XXX --percentile=95  oltp_write_only cleanup
##清理

使用Sysbench测试PolarDB MySQL版集群版一主一只读节点的混合读写性能,整个过程将持续10分钟。

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=250000 --tables=25 --events=0 --time=600  oltp_read_write prepare
##准备数据

sysbench --db-driver=mysql  --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=250000 --tables=25 --events=0 --time=600   --threads=XXX --percentile=95 --report-interval=1 oltp_read_write run
##运行workload

sysbench --db-driver=mysql  --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=250000 --tables=25 --events=0 --time=600   --threads=XXX --percentile=95  oltp_read_write cleanup
##清理

使用Sysbench测试PolarDB MySQL版集群版一主多只读节点的只读性能(对一主一只读节点到一主八只读节点的集群依次测试)。

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600  oltp_read_only prepare
##准备数据

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600   --threads=XXX --percentile=95 --report-interval=1 oltp_read_only  --db-ps-mode=disable  --skip-trx=1  run
##运行workload

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600   --threads=XXX --percentile=95  oltp_read_only cleanup
##清理

OLAP性能

测试工具

TPC-H是业界常用的一套基准,由TPC委员会制定发布,用于评测数据库的分析型查询能力。TPC-H查询包含8张数据表、22条复杂的SQL查询,大多数查询包含若干表Join、子查询和Group By聚合等。

安装TPC-H

重要: 本文档中的命令只能由root权限的用户来执行。

在ECS实例上安装TPC-H的操作步骤如下:
注册并下载TPC-H,并将下载的TPCH-H压缩包上传至ECS实例。
执行以下命令,解压缩上传的TPC-H压缩包(以压缩包dbgen.zip为例)。

unzip dbgen.zip

进入解压后的目录(以dbgen目录为例)。

cd dbgen

复制makefile文件。

cp makefile.suite makefile

安装GCC。

sudo yum install gcc  # CentOS系统
sudo apt install gcc  # Ubuntu系统

修改makefile文件中的CC、DATABASE、MACHINE、WORKLOAD等参数定义。

vim makefile

修改如下:

    CC= gcc
    DATABASE= MYSQL
    MACHINE = LINUX
    WORKLOAD = TPCH

修改tpcd.h文件,并添加新的宏定义。

vim tpcd.h

添加如下内容:

    #ifdef MYSQL
    #define GEN_QUERY_PLAN "EXPLAIN PLAN"
    #define START_TRAN "START TRANSACTION"
    #define END_TRAN "COMMIT"
    #define SET_OUTPUT ""
    #define SET_ROWCOUNT "limit %d;\n"
    #define SET_DBASE "use %s;\n"
    #endif

对文件进行编译。

make

生成测试数据与查询

使用TPC-H生成测试数据。

./dbgen -s 100

生成查询(为了测试结果可重复,可以忽略生成查询的步骤,使用附件的22个查询进行测试)。

    cp qgen queries
    cp dists.dss queries
    ./qgen -d $i -s 100 > db"$i".sql

测试步骤

在ECS上连接PolarDB数据库。
创建数据库。

create database tpch100g;

创建表。

source ./dss.ddl

加载数据。

touch load.ddl
vim load.ddl

添加如下内容:

    load data local INFILE 'customer.tbl' INTO TABLE customer FIELDS TERMINATED BY '|';
    load data local INFILE 'region.tbl' INTO TABLE region FIELDS TERMINATED BY '|';
    load data local INFILE 'nation.tbl' INTO TABLE nation FIELDS TERMINATED BY '|';
    load data local INFILE 'supplier.tbl' INTO TABLE supplier FIELDS TERMINATED BY '|';
    load data local INFILE 'part.tbl' INTO TABLE part FIELDS TERMINATED BY '|';
    load data local INFILE 'partsupp.tbl' INTO TABLE partsupp FIELDS TERMINATED BY '|';
    load data local INFILE 'orders.tbl' INTO TABLE orders FIELDS TERMINATED BY '|';
    load data local INFILE 'lineitem.tbl' INTO TABLE lineitem FIELDS TERMINATED BY '|';

连接PolarDB数据库加载load.ddl文件数据。

source ./load.ddl

创建主外键。

source ./dss.ri

创建索引(可选)。

vim create_indexes.sh

添加如下内容:

    #!/usr/bin/bash
    host=$1
    port=$2
    user=$3
    password=$4
    db=$5
    sqls=("create index i_s_nationkey on supplier (s_nationkey);"
    "create index i_ps_partkey on partsupp (ps_partkey);"
    "create index i_ps_suppkey on partsupp (ps_suppkey);"
    "create index i_c_nationkey on customer (c_nationkey);"
    "create index i_o_custkey on orders (o_custkey);"
    "create index i_o_orderdate on orders (o_orderdate);"
    "create index i_l_orderkey on lineitem (l_orderkey);"
    "create index i_l_partkey on lineitem (l_partkey);"
    "create index i_l_suppkey on lineitem (l_suppkey);"
    "create index i_l_partkey_suppkey on lineitem (l_partkey, l_suppkey);"
    "create index i_l_shipdate on lineitem (l_shipdate);"
    "create index i_l_commitdate on lineitem (l_commitdate);"
    "create index i_l_receiptdate on lineitem (l_receiptdate);"
    "create index i_n_regionkey on nation (n_regionkey);"
    "analyze table supplier"
    "analyze table part"
    "analyze table partsupp"
    "analyze table customer"
    "analyze table orders"
    "analyze table lineitem"
    "analyze table nation"
    "analyze table region")
    for sql in "${sqls[@]}"
    do
        mysql -h$host -P$port -u$user -p$password -D$db  -e "$sql"
    done

预载索引数据到内存池中(可选)。

vim preload_indexes.sh

添加如下内容:

    #!/bin/bash
    host=$1
    port=$2
    user=$3
    password=$4
    dbname=$5
    MYSQL="mysql -h$host -P$port -u$user -p$password -D$dbname"
    if [ -z ${dbname} ]; then
        echo "dbname not defined."
        exit 1
    fi
    table_indexes=(
            "supplier PRIMARY"
            "supplier i_s_nationkey"
            "part PRIMARY"
            "partsupp PRIMARY"
            "partsupp i_ps_partkey"
            "partsupp i_ps_suppkey"
            "customer PRIMARY"
            "customer i_c_nationkey"
            "orders PRIMARY"
            "orders i_o_custkey"
            "orders i_o_orderdate"
            "lineitem PRIMARY"
            "lineitem i_l_orderkey"
            "lineitem i_l_partkey"
            "lineitem i_l_suppkey"
            "lineitem i_l_partkey_suppkey"
            "lineitem i_l_shipdate"
            "lineitem i_l_commitdate"
            "lineitem i_l_receiptdate"
            "nation i_n_regionkey"
            "nation PRIMARY"
            "region PRIMARY"
    )
    for table_index in "${table_indexes[@]}"
    do
        ti=($table_index)
        table=${ti[0]}
        index=${ti[1]}
        SQL="select count(*) from ${table} force index(${index})"
        echo "$MYSQL -e '$SQL'"
        $MYSQL -e "$SQL"
    done

运行查询

创建运行查询的脚本。

vim run_queries.sh

添加如下内容:

    #!/usr/bin/env bash
    host=$1
    port=$2
    user=$3
    password=$4
    database=$5


    dir=$6
    function run_query()
    {
   
   
    id=$1
    query_file=$2
    time_file=$3
    host=$4
    port=$5
    user=$6
    password=$7
    database=$8
    if [[ ! -f ${query_file} ]];then
    echo "Query file[${query_file}] does not exist, return."
    return 1
    fi
    for i in {
   
   1..1}
    do
    echo "Execute $id :${query_file}"
    echo "USE ${database}; SET profiling = 1;SET profiling_history_size = 10;source ${query_file};show profiles;show profile for query 1;"| mysql -h${host} -P${port} -u${user} -p${password} -D${database} >> ${time_file} 2>&1
    done
    return 0
    }
    i=1
    for query_file in `find $dir -name '*.sql'|sort -V`
    do
    echo "run query: $query_file"
    run_query $i $query_file $dir/q${i}_run.log $host $port $user $password $database
    ((i=i+1))
    done

运行脚本执行所有查询。

chmod +x run_queries.sh
./run_queries.sh <数据库地址> <数据库端口> <数据库用户> <数据库密码> <数据库名称> ./queries

说明: 运行完成后,会在queries目录中生成各查询的log文件,查询执行结果与执行时间均保存在log文件中。

性能调优

  1. 确认实例是否在调优模式。
  2. 适当调整参数,如innodb_buffer_pool_size、innodb_io_capacity等,确保数据库可以处理大数据量。
  3. 确保系统不会出现OOM(Out Of Memory)情况。
  4. 对慢查询进行分析与优化。

通过上述步骤,评估并调优PolarDB的性能,总体来说,对于2核4G的服务器,初期性能表现不错,服务器的性能和稳定性,确保在高负载下仍能保持较好的响应时间和一致性。

谈谈感受

国产数据库技术的发展历程,可以说是一部充满挑战与机遇的史诗。从最初的技术启蒙,到后来的引进、成长,再到如今的加速发展,国产数据库在不断地磨砺中逐渐崭露头角。

特别是在2010年至今的这段时间里,随着数字化转型的浪潮席卷全球,国产数据库如阿里云的Polar DB、腾讯云的TDSQL等犹如雨后春笋般蓬勃发展。它们凭借强大的技术实力和敏锐的市场洞察力,迅速在云计算时代占据了一席之地,并展现出了广阔的发展前景。

其中,OceanBase在TPC-C基准测试中打破Oracle的世界记录,更是成为了国产数据库发展史上的一个标志性事件。这一成绩不仅证明了国产数据库在云计算时代的技术实力,更标志着国产数据库在国际竞争中的崛起。OceanBase的成功,无疑为中国数据库技术的发展注入了强大的信心和动力。

国产数据库技术的崛起,离不开国家政策的扶持、企业加大研发投入以及人才储备等多方面因素的共同作用。此外,国内数据库厂商在技术创新、产品升级、市场拓展等方面的持续努力也是关键因素之一。

在国际市场上,国产数据库技术的认可度正在逐渐提升。越来越多的海外企业和机构开始关注并尝试使用国产数据库产品,这无疑为国产数据库的进一步发展提供了广阔的市场空间和机遇。

展望未来,随着技术的不断进步和市场需求的不断变化,国产数据库技术有望在全球范围内发挥更加重要的作用。无论是在云计算、大数据还是人工智能等领域,国产数据库都有望成为引领者,为全球数字化进程贡献中国智慧和力量。

在这之前,未有国产数据库涉足核心业务系统;在这之后,国产数据库企业无需再向用户证明国产能不能打。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
11天前
|
关系型数据库 MySQL 分布式数据库
PolarDB 与传统数据库的性能对比分析
【8月更文第27天】随着云计算技术的发展,越来越多的企业开始将数据管理和存储迁移到云端。阿里云的 PolarDB 作为一款兼容 MySQL 和 PostgreSQL 的关系型数据库服务,提供了高性能、高可用和弹性伸缩的能力。本文将从不同角度对比 PolarDB 与本地部署的传统数据库(如 MySQL、PostgreSQL)在性能上的差异。
46 1
|
2天前
|
关系型数据库 分布式数据库 数据库
2024年全国大学生计算机系统能力大赛PolarDB数据库创新设计赛(天池杯)等你来战!
2024年全国大学生计算机系统能力大赛PolarDB数据库创新设计赛(天池杯)等你来战!
2024年全国大学生计算机系统能力大赛PolarDB数据库创新设计赛(天池杯)等你来战!
|
1天前
|
SQL 关系型数据库 分布式数据库
PolarDB Proxy配置与优化:提升数据库访问效率
【9月更文挑战第6天】PolarDB是阿里云推出的高性能分布式关系型数据库,PolarDB Proxy作为其关键组件,位于客户端与PolarDB集群间,负责SQL请求的解析与转发,并支持连接池管理、SQL过滤及路由规则等功能。本文详细介绍了PolarDB Proxy的配置方法,包括连接池、负载均衡和SQL过滤设置,并探讨了监控调优、缓存及网络优化策略,以帮助提升数据库访问效率。
6 1
|
13天前
|
存储 缓存 负载均衡
【PolarDB-X 技术揭秘】Lizard B+tree:揭秘分布式数据库索引优化的终极奥秘!
【8月更文挑战第25天】PolarDB-X是阿里云的一款分布式数据库产品,其核心组件Lizard B+tree针对分布式环境优化,解决了传统B+tree面临的数据分片与跨节点查询等问题。Lizard B+tree通过一致性哈希实现数据分片,确保分布式一致性;智能分区实现了负载均衡;高效的搜索算法与缓存机制降低了查询延迟;副本机制确保了系统的高可用性。此外,PolarDB-X通过自适应分支因子、缓存优化、异步写入、数据压缩和智能分片等策略进一步提升了Lizard B+tree的性能,使其能够在分布式环境下提供高性能的索引服务。这些优化不仅提高了查询速度,还确保了系统的稳定性和可靠性。
39 5
|
14天前
|
Cloud Native 数据库 开发者
云原生数据库2.0问题之帮助阿里云数据库加速技术更新如何解决
云原生数据库2.0问题之帮助阿里云数据库加速技术更新如何解决
|
14天前
|
Cloud Native 关系型数据库 分布式数据库
云原生数据库2.0问题之PolarDB利用云计算技术红利如何解决
云原生数据库2.0问题之PolarDB利用云计算技术红利如何解决
|
16天前
|
Cloud Native 关系型数据库 分布式数据库
云原生关系型数据库PolarDB问题之PolarDB相比传统商用数据库的优势如何解决
云原生关系型数据库PolarDB问题之PolarDB相比传统商用数据库的优势如何解决
19 1
|
6天前
|
C# UED 定位技术
WPF控件大全:初学者必读,掌握控件使用技巧,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,控件是实现用户界面交互的关键元素。WPF提供了丰富的控件库,包括基础控件(如`Button`、`TextBox`)、布局控件(如`StackPanel`、`Grid`)、数据绑定控件(如`ListBox`、`DataGrid`)等。本文将介绍这些控件的基本分类及使用技巧,并通过示例代码展示如何在项目中应用。合理选择控件并利用布局控件和数据绑定功能,可以提升用户体验和程序性能。
19 0
|
11天前
|
关系型数据库 分布式数据库 数据库
PolarDB 数据库迁移工具与策略
【8月更文第27天】随着业务的增长和技术的发展,企业常常需要对现有的数据库进行升级或迁移以适应新的需求。阿里云提供的 PolarDB 是一款高性能的关系型数据库服务,支持 MySQL、PostgreSQL 和 Oracle 三种存储引擎。本文将介绍如何利用 PolarDB 提供的迁移工具来高效地完成数据迁移工作,并探讨在迁移过程中需要注意的关键点。
23 0
|
17天前
|
关系型数据库 分布式数据库 数据库
安全可靠的国产自研数据库PolarDB V2.0,让数据库开发像“搭积木”一样简单!
安全可靠的国产自研数据库PolarDB V2.0,让数据库开发像“搭积木”一样简单!

相关产品

  • 云原生数据库 PolarDB
  • 下一篇
    DDNS