PolarDB-X、OceanBase、CockroachDB、TiDB二级索引写入性能测评

为什么要做这个测试

二级索引是关系型数据库相较于NoSQL数据库的一个关键差异。二级索引必须是强一致的,因此索引的写入需要与主键的写入放在一个事务当中,事务的性能是二级索引性能的基础。

目前市面上的分布式数据库中,从使用体验的角度看主流有几种形态:

1.以TiDB、CockroachDB等为代表的纯透明的用法。从表现上来看,该种类型的数据库所有表都是分布式表,并且不需要指定分区键,其核心逻辑是使用分布式事务来维护全局索引,并使用全局索引完全替代单机数据库中的二级索引。

2.以OceanBase等为代表的纯手动的用法。从表现上看,该种类型的数据库在不指定分区键的情况下,是以单表的形式存在的,不具备扩展性;创建分布式表需要使用类似分区表的语法。此类型的数据库一般也提供全局索引的能力(不提供的我们一般称之为中间件而不是数据库)。但与第一类不同,它们一般会将全局索引作为一个可选项,由用户手动的指定与创建。此外,他们还会提供基于单机事务实现的本地索引(Local Index)。

3.同时提供以上两种用法的PolarDB-X。在不指定分区键的情况下,与第一类数据库类似,使用分布式表+全局索引来提供透明的分布式体验;也允许手动指定分区键,使用本地索引等技术提升性能。

在之前的文章中 ,我们提出:

1.透明(自动)的易用性决定了分布式数据库的使用下限,但性能并不是最优的,有更高的成本代价

2.手动能够提供最优的性能,但使用门槛会有所增加

分布式数据库需要为大多数场景提供能够透明使用的能力,也要为少数性能要求高的场景提供手动调优消除分布式事务的能力。

这个观点的重要依据是,纯透明的模式本质上是使用分布式事务+全局索引来替代单机数据库中的事务+索引,而分布式事务+全局索引与单机事务+索引存在较大的性能差异。

本次测试将重点关注不同分布式数据库的索引性能,特别关注业内全局索引的性能与MySQL索引的性能差异。

本次测试的产品包括TiDB、OceanBase、PolarDB-X、CockroachDB,选取这几个数据库有以下原因:

1.他们都提供了强一致的全局索引能力,是数据库而不是中间件。

2.都有开源,并且都有云产品提供,历史也都比较悠久,资料比较多,不是PPT数据库,容易搞清楚内部的原理。

3.都是主要面向OLTP的数据库。

此外我们也测试了MySQL的索引性能作为对比。

测试方法

由于硬件配置(比如OB用了6台机器(并且租户设置上并没有占满整个机器),TiDB和TiKV用了5台,PolarDB-X和MySQL是直接公共云购买的等)、系统参数等等,对于每个数据库来说,不是完全相同,也不一定是最优的,所以直接对比TPS是没有意义的。

我们会将每个数据库,不带索引情况下,TPS能够达到的峰值作为基线(100%),比较不同索引数目的性能相对于基线的百分比。

例如,产品A不带索引能跑到10W的TPS,带一个索引跑到5W,那我们就认为带一个索引的情况下是基线的50%。这个百分比我们不妨称之为TPS百分比。

在产品之间的横向对比中,我们会对比相同索引数目下的TPS百分比,而不是TPS的绝对值。

在测试TPS百分比的时候,我们会调整并发度,来找到能够达到最大TPS的并发度,并以最大的TPS来计算TPS百分比。

除了TPS百分比之外,我们还会测试每个产品在不同索引数目情况下,单次写入的RT。在RT测试中,我们会用单线程来进行写入。

本次测试我们只测试insert场景,这是索引写入的最基本的功能了。我们使用sysbench的oltp_insert.lua制造流量。由于我们要测试多个索引,因此我们将sysbench的表结构做了修改,以MySQL为例,修改如下:

CREATE TABLE `sbtest1` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `k` int(11) NOT NULL ,
        `k1` int(11) NOT NULL ,
        `k2` int(11) NOT NULL ,
        `k3` int(11) NOT NULL ,
        `k4` int(11) NOT NULL ,
        `k5` int(11) NOT NULL ,
        `k6` int(11) NOT NULL ,
        `k7` int(11) NOT NULL ,
        `k8` int(11) NOT NULL ,
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`)
);

我们在表中增加了8个列,根据测试的索引数目,会在这个8个列上创建相应数目的二级索引。

同时我们要修改oltp_insert.lua,在INSERT语句中增加这8个列,8个列的值随机生成,没有有序性,避免在基于range进行分区的数据库(TiDB、CockroachDB)上产生热点:

con:query(string.format("INSERT INTO %s (id,k,k1,k2,k3,k4,k5,k6,k7,k8,c,pad) VALUES " ..
                                 "(%d, %d,%d,%d,%d,%d,%d,%d,%d,%d,'%s','%s')",
                              table_name, i, k_val, sysbench.rand.default(1, sysbench.opt.table_size),sysbench.rand.default(1, sysbench.opt.table_size),sysbench.rand.default(1, sysbench.opt.table_size),sysbench.rand.default(1, sysbench.opt.table_size),sysbench.rand.default(1, sysbench.opt.table_size),sysbench.rand.default(1, sysbench.opt.table_size),sysbench.rand.default(1, sysbench.opt.table_size),sysbench.rand.default(1, sysbench.opt.table_size),c_val, pad_val))

由于不同数据库的语法、特性等不同(当然还有一些坑),每个数据库的建表语句可能会做一些修改,每个数据库最终使用的建表语句放在附录中。

软硬件环境

本次测试使用的机器使用的是阿里云上购买的ECS,规格为ecs.i2g.8xlarge:

操作系统为阿里云上提供的CentOS 8.3:

所有机器均在同一个地域的同一个可用区内。 所有数据库的数据文件均放在本地SSD中。 所有数据库均会在前面挂一个SLB做负载均衡。 sysbench使用的是1.0.20版本。

测试结果

我们可以看到,这些分布式数据库实现的全局索引中,即使只有1个索引,性能也都会下跌到30%以下,在8个索引的情况下,性能基本都会跌倒10%以下

而像MySQL这种单机数据库,8个索引的情况下,性能依然保持在85%以上。

印证了我们在 《PolarDB-X 数据分布解读(四) :透明 vs 手动》提到过的观点“分布式事务跟单机事务相比,在成本(或者说性能)上依然存在不可逾越的鸿沟,这个差距至少在3倍以上”。

使用全局索引替代单机数据库索引会带来很高的成本,在成本敏感型的场景中,需要适当的使用本地索引来降低使用成本。

在提供了本地索引的数据库中:

  • PolarDB-X和OB的本地索引与主键具有Locality上的亲和性,能使用单机事务来对索引进行写入,相对于全局索引,保持了非常高的性能。
  • TiDB虽然提供了本地索引,但其索引和主键不具备Locality上的亲和性,无法绑定到同一个机器上,因此其本地索引依然要使用分布式事务进行维护,在性能上和全局索引没有太大差异,成本都很高。
  • CockroachDB的本地索引理论上与TiDB的行为类似,不过CockroachDB的partition功能是商业版才提供的,这次就没有进行测试了

对于TiDB和CockroachDB来说,情况就比较尴尬了,他们所提供的无论是全局索引还是本地索引,成本都要比单机MySQL高很多。作为用户没有任何手段能消除这个代价,除非,你不用二级索引。

从RT的角度看:

  1. 单机数据库由于事务的网络交互最少,RT表现的是最好的,并且跟索引的数量几乎没有关系。
  2. 分布式数据库的事务由于需要更多的跨节点交互,所以RT明显会比单机数据库更大。但由于分布式数据库在多分支的事务上一般都会采用并行写入的策略,因此表现好的数据库RT并不会随索引数量的增加而线性增加。总体说来,RT可以接受。
  3. CockroachDB全局索引的RT表现是最差的,可能跟事务策略使用HLC有关,其他几个数据库使用的都是TSO的方案。
  4. TiDB全局索引的RT表现的是最好的,0-8个索引RT几乎没有变化,说明并行优化做的非常好。
  5. 自家产品PolarDB-X全局索引的RT看起来还有优化的空间,虽然上涨有限,但并没有做到完全的并行。我们会在后续版本进行优化。本地索引RT非常稳定并且低。
  6. OB的全局索引和本地索引表现和PolarDB-X比较类似,并行优化有提升空间,本地索引表现不错。
测试过程中的一个额外发现,TiDB、OB、CockroachDB的自增主键(auto_increment/serial)都有比较严重的性能问题,都要使用随机等替代方案。TiDB与CockroachDB是因为时间序带来的热点range导致,OB可能是内部的一些锁导致。兼容性包括功能兼容与性能兼容,性能兼容之路漫漫...

下面附上每个数据库测试的情况。

测试详情

MySQL

环境配置

版本:5.7.14-AliSQL-X-Cluster-1.5.1.8-20201229-log 规格:32C128G,独享型 阿里云购买:

测试结果

索引数量RT(单线程)最高TPSTPS比例
00.5237599100%
10.533586095%
20.633485993%
40.623333889%
80.583163684%

OceanBase

环境配置

版本:社区版 3.1.4

组件机器
OB Server
OB Proxy
6台机器,分成了3个zone,每个zone两个UNIT。每台机器各部一个OB Server和一个OB Proxy

租户配置:

CREATE RESOURCE UNIT unit1 MAX_CPU 16, MAX_MEMORY '32G', MAX_IOPS 12800,MAX_DISK_SIZE '1000G', MAX_SESSION_NUM 6400, MIN_CPU=8, MIN_MEMORY='16G', MIN_IOPS=12800;
CREATE RESOURCE POOL pool1 UNIT='unit1',UNIT_NUM=2,ZONE_LIST=('zone1','zone2','zone3');
CREATE TENANT idx_test CHARSET='utf8mb4', ZONE_LIST=('zone1','zone2','zone3'), PRIMARY_ZONE='zone1;zone2,zone3', RESOURCE_POOL_LIST=('pool1') ;

需要注意的几点:

  1. OB中的表默认为单表(只分布在一个节点上),需要使用分区表的语法,指定分区键与分区数,才能成为一张分布式表
  2. OB默认的索引是本地索引,需要指定Global关键字才是全局索引
  3. OB的全局索引默认也是一个单表(只有一个分区,只分布在一个节点上),需要手动指定分区数才是一个真正的分布式索引
  4. UNIT_NUM=1的情况下,似乎即使是分区表,也都在同一台机器上,所以测试机器数要>=6,确保UNIT_NUM>=2
  5. OB全局索引如果在建表语句中直接指定,似乎不支持指定分区数,因此全局索引需要使用单独的CREATE INDEX语句来创建
  6. OB分区表的AUTO_INCREMENT属性似乎有严重的性能问题,设置了之后,性能很低,要去掉该属性,并且将sysbench的auto_inc设为off,由sysbench来生成主键值
  7. OB默认使用的时间服务是本地时间服务(LTS),这种模式下是不支持全局索引的,需要手动修改为全局时间服务(GTS):
SET GLOBAL ob_timestamp_service='GTS';

测试结果

全局索引:

索引数量RT(单线程)最高TPSTPS比例
01.4072298100%
12.561854826%
22.811310518%
43.38913013%
83.9159408%

本地索引:

索引数量RT(单线程)最高TPSTPS比例
01.4072298100%
11.416383288%
21.376288686%
41.456122685%
81.475639978%

TiDB

环境配置

版本:6.1.0 部署结构:

组件机器
TiDB5台,每台机器一个TiDB进程,一个TiKV进程
TiKV
PD3台

需要注意的点:

  1. TiDB中语法上没有“全局索引”这个词,但从原理角度看,TiDB任何一张表都是分布式表,任何一个二级索引都是全局索引,它没有单表的概念
  2. 不要使用AUTO_INCREMENT。TiDB中的AUTO_INCREMENT虽然是分段的,不保证自增连续,但拉长时间后依然是有一定时间序的,所以会导致热点。需要使用AUTO_RANDOM替换AUTO_INCREMENT。
  3. TiDB中支持Partition语法,但其Partition依然构建于分布式KV之上,意味着每个Partition下面都对应着一个或多个TiKV中的range(注意,这里的range和partition语法中的range是两码事,parition语法中的一个range,也可能对应多个TiKV中的range),这些range是会被自由的调度的。在使用了Partition语法的表上创建的索引,在功能上也叫本地索引。

测试结果

全局索引:

索引数量RT(单线程)最高TPSTPS比例
01.44105112.07100%
11.6531876.1130%
21.6721631.2820%
41.7314045.0313%
81.858138.608%

本地索引:

索引数量RT(单线程)最高TPSTPS比例
01.77105521.21100%
11.6849534.1947%
21.8136861.7835%
41.8824788.6423%
82.0215776.3015%

CockroachDB

环境配置

版本:22.1.6

组件机器
CockroachDB6台,每台机器一个CockroachDB进程

CDB与TiDB的架构是类似的,表构建于分布式KV之上,所有表都是分布式表,所有索引都是全局索引,没有单表的概念。

需要注意的点:

  1. 在CDB中,使用Serial类型主键(类似mysql中的auto_increment),或者使用unique_rowid()作为主键,因为这两个都是有一定时间序的,都会产生显著的热点,几乎无法使用。测试中使用UUID类型的列,并使用 gen_random_uuid()生成主键。这个本质是一个字符串,在KV层range的划分上可以认为是无序的。
  2. CDB每个连接的代价比较高,无法创建太多的连接

测试结果

全局索引:

索引数量RT(单线程)最高TPSTPS比例
02.7586094100%
12.811361816%
22.811144013%
43.41960211%
85.8374249%

PolarDB-X

环境配置

规格:公有云8C32G*2 版本:5.4.13 注意:

  1. 建库时需要使用mode=auto,这种类型的数据库表不指定分区键的情况下是分布式表,同时索引是全局索引。
  2. 索引前加Local关键字可以只创建本地索引

测试结果

全局索引:

索引数量RT(单线程)最高TPSTPS比例
01.0671644.05100%
12.2220045.7828%
22.2513746.9719%
43.0710683.9915%
83.678098.4411%

本地索引:

索引数量RT(单线程)最高TPSTPS比例
01.0671644.05100%
11.3469690.6097%
21.3567346.6694%
41.4764353.6390%
81.558782.9482%

附录

OceanBase 全局索引建表语句

create database sbtest_gsi8;
use sbtest_gsi8;
CREATE TABLE `sbtest1` (
`id` int(11) NOT NULL,
`k` int(11) NOT NULL ,
`k1` int(11) NOT NULL ,
`k2` int(11) NOT NULL ,
`k3` int(11) NOT NULL ,
`k4` int(11) NOT NULL ,
`k5` int(11) NOT NULL ,
`k6` int(11) NOT NULL ,
`k7` int(11) NOT NULL ,
`k8` int(11) NOT NULL ,
`c` char(120) NOT NULL ,
`pad` char(60) NOT NULL ,
PRIMARY KEY (`id`)
) partition by hash(id)  partitions 32;
create index k_1 on sbtest1(k1) global partition by hash(k1) partitions 32;
create index k_2 on sbtest1(k2) global partition by hash(k2) partitions 32;
create index k_3 on sbtest1(k3) global partition by hash(k3) partitions 32;
create index k_4 on sbtest1(k4) global partition by hash(k4) partitions 32;
create index k_5 on sbtest1(k5) global partition by hash(k5) partitions 32;
create index k_6 on sbtest1(k6) global partition by hash(k6) partitions 32;
create index k_7 on sbtest1(k7) global partition by hash(k7) partitions 32;
create index k_8 on sbtest1(k8) global partition by hash(k8) partitions 32;


create database sbtest_gsi4;
use sbtest_gsi4;

CREATE TABLE `sbtest1` (
`id` int(11) NOT NULL,
`k` int(11) NOT NULL ,
`k1` int(11) NOT NULL ,
`k2` int(11) NOT NULL ,
`k3` int(11) NOT NULL ,
`k4` int(11) NOT NULL ,
`k5` int(11) NOT NULL ,
`k6` int(11) NOT NULL ,
`k7` int(11) NOT NULL ,
`k8` int(11) NOT NULL ,
`c` char(120) NOT NULL ,
`pad` char(60) NOT NULL ,
PRIMARY KEY (`id`)
) partition by hash(id)  partitions 32;
create index k_1 on sbtest1(k1) global partition by hash(k1) partitions 32;
create index k_2 on sbtest1(k2) global partition by hash(k2) partitions 32;
create index k_3 on sbtest1(k3) global partition by hash(k3) partitions 32;
create index k_4 on sbtest1(k4) global partition by hash(k4) partitions 32;


create database sbtest_gsi2;
use sbtest_gsi2;
CREATE TABLE `sbtest1` (
`id` int(11) NOT NULL,
`k` int(11) NOT NULL ,
`k1` int(11) NOT NULL ,
`k2` int(11) NOT NULL ,
`k3` int(11) NOT NULL ,
`k4` int(11) NOT NULL ,
`k5` int(11) NOT NULL ,
`k6` int(11) NOT NULL ,
`k7` int(11) NOT NULL ,
`k8` int(11) NOT NULL ,
`c` char(120) NOT NULL ,
`pad` char(60) NOT NULL ,
PRIMARY KEY (`id`)
) partition by hash(id)  partitions 32;
create index k_1 on sbtest1(k1) global partition by hash(k1) partitions 32;
create index k_2 on sbtest1(k2) global partition by hash(k2) partitions 32;

create database sbtest_gsi1;
use sbtest_gsi1;
CREATE TABLE `sbtest1` (
`id` int(11) NOT NULL ,
`k` int(11) NOT NULL ,
`k1` int(11) NOT NULL ,
`k2` int(11) NOT NULL ,
`k3` int(11) NOT NULL ,
`k4` int(11) NOT NULL ,
`k5` int(11) NOT NULL ,
`k6` int(11) NOT NULL ,
`k7` int(11) NOT NULL ,
`k8` int(11) NOT NULL ,
`c` char(120) NOT NULL ,
`pad` char(60) NOT NULL ,
PRIMARY KEY (`id`)
) partition by hash(id)  partitions 32;
create index k_1 on sbtest1(k1) global partition by hash(k1) partitions 32;


create database sbtest_gsi0;
use sbtest_gsi0;
CREATE TABLE `sbtest1` (
`id` int(11) NOT NULL ,
`k` int(11) NOT NULL ,
`k1` int(11) NOT NULL ,
`k2` int(11) NOT NULL ,
`k3` int(11) NOT NULL ,
`k4` int(11) NOT NULL ,
`k5` int(11) NOT NULL ,
`k6` int(11) NOT NULL ,
`k7` int(11) NOT NULL ,
`k8` int(11) NOT NULL ,
`c` char(120) NOT NULL ,
`pad` char(60) NOT NULL ,
PRIMARY KEY (`id`)
) partition by hash(id)  partitions 32;

OceanBase 本地索引建表语句

create database sbtest_local8;
use sbtest_local8;
CREATE TABLE `sbtest1` (
`id` int(11) NOT NULL,
`k` int(11) NOT NULL ,
`k1` int(11) NOT NULL ,
`k2` int(11) NOT NULL ,
`k3` int(11) NOT NULL ,
`k4` int(11) NOT NULL ,
`k5` int(11) NOT NULL ,
`k6` int(11) NOT NULL ,
`k7` int(11) NOT NULL ,
`k8` int(11) NOT NULL ,
`c` char(120) NOT NULL ,
`pad` char(60) NOT NULL ,
PRIMARY KEY (`id`)
) partition by hash(id)  partitions 32;
create index k_1 on sbtest1(k1);
create index k_2 on sbtest1(k2);
create index k_3 on sbtest1(k3);
create index k_4 on sbtest1(k4);
create index k_5 on sbtest1(k5);
create index k_6 on sbtest1(k6);
create index k_7 on sbtest1(k7);
create index k_8 on sbtest1(k8);


create database sbtest_local4;
use sbtest_local4;

CREATE TABLE `sbtest1` (
`id` int(11) NOT NULL,
`k` int(11) NOT NULL ,
`k1` int(11) NOT NULL ,
`k2` int(11) NOT NULL ,
`k3` int(11) NOT NULL ,
`k4` int(11) NOT NULL ,
`k5` int(11) NOT NULL ,
`k6` int(11) NOT NULL ,
`k7` int(11) NOT NULL ,
`k8` int(11) NOT NULL ,
`c` char(120) NOT NULL ,
`pad` char(60) NOT NULL ,
PRIMARY KEY (`id`)
) partition by hash(id)  partitions 32;
create index k_1 on sbtest1(k1);
create index k_2 on sbtest1(k2);
create index k_3 on sbtest1(k3);
create index k_4 on sbtest1(k4);


create database sbtest_local2;
use sbtest_local2;
CREATE TABLE `sbtest1` (
`id` int(11) NOT NULL,
`k` int(11) NOT NULL ,
`k1` int(11) NOT NULL ,
`k2` int(11) NOT NULL ,
`k3` int(11) NOT NULL ,
`k4` int(11) NOT NULL ,
`k5` int(11) NOT NULL ,
`k6` int(11) NOT NULL ,
`k7` int(11) NOT NULL ,
`k8` int(11) NOT NULL ,
`c` char(120) NOT NULL ,
`pad` char(60) NOT NULL ,
PRIMARY KEY (`id`)
) partition by hash(id)  partitions 32;
create index k_1 on sbtest1(k1);
create index k_2 on sbtest1(k2);

create database sbtest_local1;
use sbtest_local1;
CREATE TABLE `sbtest1` (
`id` int(11) NOT NULL ,
`k` int(11) NOT NULL ,
`k1` int(11) NOT NULL ,
`k2` int(11) NOT NULL ,
`k3` int(11) NOT NULL ,
`k4` int(11) NOT NULL ,
`k5` int(11) NOT NULL ,
`k6` int(11) NOT NULL ,
`k7` int(11) NOT NULL ,
`k8` int(11) NOT NULL ,
`c` char(120) NOT NULL ,
`pad` char(60) NOT NULL ,
PRIMARY KEY (`id`)
) partition by hash(id)  partitions 32;
create index k_1 on sbtest1(k1);


create database sbtest_local0;
use sbtest_local0;
CREATE TABLE `sbtest1` (
`id` int(11) NOT NULL ,
`k` int(11) NOT NULL ,
`k1` int(11) NOT NULL ,
`k2` int(11) NOT NULL ,
`k3` int(11) NOT NULL ,
`k4` int(11) NOT NULL ,
`k5` int(11) NOT NULL ,
`k6` int(11) NOT NULL ,
`k7` int(11) NOT NULL ,
`k8` int(11) NOT NULL ,
`c` char(120) NOT NULL ,
`pad` char(60) NOT NULL ,
PRIMARY KEY (`id`)
) partition by hash(id)  partitions 32;

TiDB 全局索引建表语句

create database sbtest8;
use sbtest8;
CREATE TABLE `sbtest1` (
        `id` bigint(11) NOT NULL AUTO_RANDOM,
        `k` int(11) NOT NULL DEFAULT '0',
        `k1` int(11) NOT NULL DEFAULT '0',
        `k2` int(11) NOT NULL DEFAULT '0',
        `k3` int(11) NOT NULL DEFAULT '0',
        `k4` int(11) NOT NULL DEFAULT '0',
        `k5` int(11) NOT NULL DEFAULT '0',
        `k6` int(11) NOT NULL DEFAULT '0',
        `k7` int(11) NOT NULL DEFAULT '0',
        `k8` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`),
        KEY `k_1` (`k1`),
        KEY `k_2` (`k2`),
        KEY `k_3` (`k3`),
        KEY `k_4` (`k4`),
        KEY `k_5` (`k5`),
        KEY `k_6` (`k6`),
        KEY `k_7` (`k7`),
        KEY `k_8` (`k8`)
) ENGINE = InnoDB  DEFAULT CHARSET = utf8mb4;

create database sbtest4;
use sbtest4;
CREATE TABLE `sbtest1` (
        `id` bigint(11) NOT NULL AUTO_RANDOM,
        `k` int(11) NOT NULL DEFAULT '0',
        `k1` int(11) NOT NULL DEFAULT '0',
        `k2` int(11) NOT NULL DEFAULT '0',
        `k3` int(11) NOT NULL DEFAULT '0',
        `k4` int(11) NOT NULL DEFAULT '0',
        `k5` int(11) NOT NULL DEFAULT '0',
        `k6` int(11) NOT NULL DEFAULT '0',
        `k7` int(11) NOT NULL DEFAULT '0',
        `k8` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`),
        KEY `k_1` (`k1`),
        KEY `k_2` (`k2`),
        KEY `k_3` (`k3`),
        KEY `k_4` (`k4`)
) ENGINE = InnoDB  DEFAULT CHARSET = utf8mb4;


create database sbtest2;
use sbtest2;
CREATE TABLE `sbtest1` (
        `id` bigint(11) NOT NULL AUTO_RANDOM,
        `k` int(11) NOT NULL DEFAULT '0',
        `k1` int(11) NOT NULL DEFAULT '0',
        `k2` int(11) NOT NULL DEFAULT '0',
        `k3` int(11) NOT NULL DEFAULT '0',
        `k4` int(11) NOT NULL DEFAULT '0',
        `k5` int(11) NOT NULL DEFAULT '0',
        `k6` int(11) NOT NULL DEFAULT '0',
        `k7` int(11) NOT NULL DEFAULT '0',
        `k8` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`),
        KEY `k_1` (`k1`),
        KEY `k_2` (`k2`)
) ENGINE = InnoDB  DEFAULT CHARSET = utf8mb4;

create database sbtest1;
use sbtest1;
CREATE TABLE `sbtest1` (
        `id` bigint(11) NOT NULL AUTO_RANDOM,
        `k` int(11) NOT NULL DEFAULT '0',
        `k1` int(11) NOT NULL DEFAULT '0',
        `k2` int(11) NOT NULL DEFAULT '0',
        `k3` int(11) NOT NULL DEFAULT '0',
        `k4` int(11) NOT NULL DEFAULT '0',
        `k5` int(11) NOT NULL DEFAULT '0',
        `k6` int(11) NOT NULL DEFAULT '0',
        `k7` int(11) NOT NULL DEFAULT '0',
        `k8` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`),
        KEY `k_1` (`k1`)
) ENGINE = InnoDB  DEFAULT CHARSET = utf8mb4;


create database sbtest0;
use sbtest0;
CREATE TABLE `sbtest1` (
        `id` bigint(11) NOT NULL AUTO_RANDOM,
        `k` int(11) NOT NULL DEFAULT '0',
        `k1` int(11) NOT NULL DEFAULT '0',
        `k2` int(11) NOT NULL DEFAULT '0',
        `k3` int(11) NOT NULL DEFAULT '0',
        `k4` int(11) NOT NULL DEFAULT '0',
        `k5` int(11) NOT NULL DEFAULT '0',
        `k6` int(11) NOT NULL DEFAULT '0',
        `k7` int(11) NOT NULL DEFAULT '0',
        `k8` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`)
) ENGINE = InnoDB  DEFAULT CHARSET = utf8mb4;

TiDB 本地索引建表语句

create database sbtest_local8;
use sbtest_local8;
CREATE TABLE `sbtest1` (
        `id` bigint(11) NOT NULL AUTO_RANDOM,
        `k` int(11) NOT NULL DEFAULT '0',
        `k1` int(11) NOT NULL DEFAULT '0',
        `k2` int(11) NOT NULL DEFAULT '0',
        `k3` int(11) NOT NULL DEFAULT '0',
        `k4` int(11) NOT NULL DEFAULT '0',
        `k5` int(11) NOT NULL DEFAULT '0',
        `k6` int(11) NOT NULL DEFAULT '0',
        `k7` int(11) NOT NULL DEFAULT '0',
        `k8` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`),
        KEY `k_1` (`k1`),
        KEY `k_2` (`k2`),
        KEY `k_3` (`k3`),
        KEY `k_4` (`k4`),
        KEY `k_5` (`k5`),
        KEY `k_6` (`k6`),
        KEY `k_7` (`k7`),
        KEY `k_8` (`k8`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 partition by hash(id)  partitions 32;

create database sbtest_local4;
use sbtest_local4;
CREATE TABLE `sbtest1` (
        `id` bigint(11) NOT NULL AUTO_RANDOM,
        `k` int(11) NOT NULL DEFAULT '0',
        `k1` int(11) NOT NULL DEFAULT '0',
        `k2` int(11) NOT NULL DEFAULT '0',
        `k3` int(11) NOT NULL DEFAULT '0',
        `k4` int(11) NOT NULL DEFAULT '0',
        `k5` int(11) NOT NULL DEFAULT '0',
        `k6` int(11) NOT NULL DEFAULT '0',
        `k7` int(11) NOT NULL DEFAULT '0',
        `k8` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`),
        KEY `k_1` (`k1`),
        KEY `k_2` (`k2`),
        KEY `k_3` (`k3`),
        KEY `k_4` (`k4`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 partition by hash(id) partitions 32;

create database sbtest_local2;
use sbtest_local2;
CREATE TABLE `sbtest1` (
        `id` bigint(11) NOT NULL AUTO_RANDOM,
        `k` int(11) NOT NULL DEFAULT '0',
        `k1` int(11) NOT NULL DEFAULT '0',
        `k2` int(11) NOT NULL DEFAULT '0',
        `k3` int(11) NOT NULL DEFAULT '0',
        `k4` int(11) NOT NULL DEFAULT '0',
        `k5` int(11) NOT NULL DEFAULT '0',
        `k6` int(11) NOT NULL DEFAULT '0',
        `k7` int(11) NOT NULL DEFAULT '0',
        `k8` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`),
        KEY `k_1` (`k1`),
        KEY `k_2` (`k2`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 partition by hash(id)  partitions 32;

create database sbtest_local1;
use sbtest_local1;
CREATE TABLE `sbtest1` (
        `id` bigint(11) NOT NULL AUTO_RANDOM,
        `k` int(11) NOT NULL DEFAULT '0',
        `k1` int(11) NOT NULL DEFAULT '0',
        `k2` int(11) NOT NULL DEFAULT '0',
        `k3` int(11) NOT NULL DEFAULT '0',
        `k4` int(11) NOT NULL DEFAULT '0',
        `k5` int(11) NOT NULL DEFAULT '0',
        `k6` int(11) NOT NULL DEFAULT '0',
        `k7` int(11) NOT NULL DEFAULT '0',
        `k8` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`),
        KEY `k_1` (`k1`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 partition by hash(id)  partitions 32;

create database sbtest_local0;
use sbtest_local0;
CREATE TABLE `sbtest1` (
        `id` bigint(11) NOT NULL AUTO_RANDOM,
        `k` int(11) NOT NULL DEFAULT '0',
        `k1` int(11) NOT NULL DEFAULT '0',
        `k2` int(11) NOT NULL DEFAULT '0',
        `k3` int(11) NOT NULL DEFAULT '0',
        `k4` int(11) NOT NULL DEFAULT '0',
        `k5` int(11) NOT NULL DEFAULT '0',
        `k6` int(11) NOT NULL DEFAULT '0',
        `k7` int(11) NOT NULL DEFAULT '0',
        `k8` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 partition by hash(id)  partitions 32;

PolarDB-X全局索引建表语句

drop database sbtest_gsi0;
drop database sbtest_gsi1;
drop database sbtest_gsi2;
drop database sbtest_gsi4;
drop database sbtest_gsi8;
create database sbtest_gsi8 mode=auto;
use sbtest_gsi8;
CREATE TABLE `sbtest1` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `k` int(11) NOT NULL DEFAULT '0',
        `k1` int(11) NOT NULL DEFAULT '0',
        `k2` int(11) NOT NULL DEFAULT '0',
        `k3` int(11) NOT NULL DEFAULT '0',
        `k4` int(11) NOT NULL DEFAULT '0',
        `k5` int(11) NOT NULL DEFAULT '0',
        `k6` int(11) NOT NULL DEFAULT '0',
        `k7` int(11) NOT NULL DEFAULT '0',
        `k8` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`),
        KEY `k_1` (`k1`),
        KEY `k_2` (`k2`),
        KEY `k_3` (`k3`),
        KEY `k_4` (`k4`),
        KEY `k_5` (`k5`),
        KEY `k_6` (`k6`),
        KEY `k_7` (`k7`),
        KEY `k_8` (`k8`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

create database sbtest_gsi4 mode=auto;
use sbtest_gsi4;
CREATE TABLE `sbtest1` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `k` int(11) NOT NULL DEFAULT '0',
        `k1` int(11) NOT NULL DEFAULT '0',
        `k2` int(11) NOT NULL DEFAULT '0',
        `k3` int(11) NOT NULL DEFAULT '0',
        `k4` int(11) NOT NULL DEFAULT '0',
        `k5` int(11) NOT NULL DEFAULT '0',
        `k6` int(11) NOT NULL DEFAULT '0',
        `k7` int(11) NOT NULL DEFAULT '0',
        `k8` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`),
        KEY `k_1` (`k1`),
        KEY `k_2` (`k2`),
        KEY `k_3` (`k3`),
        KEY `k_4` (`k4`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;


create database sbtest_gsi2 mode=auto;
use sbtest_gsi2;
CREATE TABLE `sbtest1` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `k` int(11) NOT NULL DEFAULT '0',
        `k1` int(11) NOT NULL DEFAULT '0',
        `k2` int(11) NOT NULL DEFAULT '0',
        `k3` int(11) NOT NULL DEFAULT '0',
        `k4` int(11) NOT NULL DEFAULT '0',
        `k5` int(11) NOT NULL DEFAULT '0',
        `k6` int(11) NOT NULL DEFAULT '0',
        `k7` int(11) NOT NULL DEFAULT '0',
        `k8` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`),
        KEY `k_1` (`k1`),
        KEY `k_2` (`k2`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

create database sbtest_gsi1 mode=auto;
use sbtest_gsi1;
CREATE TABLE `sbtest1` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `k` int(11) NOT NULL DEFAULT '0',
        `k1` int(11) NOT NULL DEFAULT '0',
        `k2` int(11) NOT NULL DEFAULT '0',
        `k3` int(11) NOT NULL DEFAULT '0',
        `k4` int(11) NOT NULL DEFAULT '0',
        `k5` int(11) NOT NULL DEFAULT '0',
        `k6` int(11) NOT NULL DEFAULT '0',
        `k7` int(11) NOT NULL DEFAULT '0',
        `k8` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`),
        KEY `k_1` (`k1`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;


create database sbtest_gsi0 mode=auto;
use sbtest_gsi0;
CREATE TABLE `sbtest1` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `k` int(11) NOT NULL DEFAULT '0',
        `k1` int(11) NOT NULL DEFAULT '0',
        `k2` int(11) NOT NULL DEFAULT '0',
        `k3` int(11) NOT NULL DEFAULT '0',
        `k4` int(11) NOT NULL DEFAULT '0',
        `k5` int(11) NOT NULL DEFAULT '0',
        `k6` int(11) NOT NULL DEFAULT '0',
        `k7` int(11) NOT NULL DEFAULT '0',
        `k8` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

PolarDB-X本地索引建表语句

drop database sbtest_local0;
drop database sbtest_local1;
drop database sbtest_local2;
drop database sbtest_local4;
drop database sbtest_local8;
create database sbtest_local8 mode=auto;
use sbtest_local8;
CREATE TABLE `sbtest1` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `k` int(11) NOT NULL DEFAULT '0',
        `k1` int(11) NOT NULL DEFAULT '0',
        `k2` int(11) NOT NULL DEFAULT '0',
        `k3` int(11) NOT NULL DEFAULT '0',
        `k4` int(11) NOT NULL DEFAULT '0',
        `k5` int(11) NOT NULL DEFAULT '0',
        `k6` int(11) NOT NULL DEFAULT '0',
        `k7` int(11) NOT NULL DEFAULT '0',
        `k8` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`),
        LOCAL KEY `k_1` (`k1`),
        LOCAL KEY `k_2` (`k2`),
        LOCAL KEY `k_3` (`k3`),
        LOCAL KEY `k_4` (`k4`),
        LOCAL KEY `k_5` (`k5`),
        LOCAL KEY `k_6` (`k6`),
        LOCAL KEY `k_7` (`k7`),
        LOCAL KEY `k_8` (`k8`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

create database sbtest_local4 mode=auto;
use sbtest_local4;
CREATE TABLE `sbtest1` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `k` int(11) NOT NULL DEFAULT '0',
        `k1` int(11) NOT NULL DEFAULT '0',
        `k2` int(11) NOT NULL DEFAULT '0',
        `k3` int(11) NOT NULL DEFAULT '0',
        `k4` int(11) NOT NULL DEFAULT '0',
        `k5` int(11) NOT NULL DEFAULT '0',
        `k6` int(11) NOT NULL DEFAULT '0',
        `k7` int(11) NOT NULL DEFAULT '0',
        `k8` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`),
        LOCAL KEY `k_1` (`k1`),
        LOCAL KEY `k_2` (`k2`),
        LOCAL KEY `k_3` (`k3`),
        LOCAL KEY `k_4` (`k4`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;


create database sbtest_local2 mode=auto;
use sbtest_local2;
CREATE TABLE `sbtest1` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `k` int(11) NOT NULL DEFAULT '0',
        `k1` int(11) NOT NULL DEFAULT '0',
        `k2` int(11) NOT NULL DEFAULT '0',
        `k3` int(11) NOT NULL DEFAULT '0',
        `k4` int(11) NOT NULL DEFAULT '0',
        `k5` int(11) NOT NULL DEFAULT '0',
        `k6` int(11) NOT NULL DEFAULT '0',
        `k7` int(11) NOT NULL DEFAULT '0',
        `k8` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`),
        LOCAL KEY `k_1` (`k1`),
        LOCAL KEY `k_2` (`k2`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

create database sbtest_local1 mode=auto;
use sbtest_local1;
CREATE TABLE `sbtest1` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `k` int(11) NOT NULL DEFAULT '0',
        `k1` int(11) NOT NULL DEFAULT '0',
        `k2` int(11) NOT NULL DEFAULT '0',
        `k3` int(11) NOT NULL DEFAULT '0',
        `k4` int(11) NOT NULL DEFAULT '0',
        `k5` int(11) NOT NULL DEFAULT '0',
        `k6` int(11) NOT NULL DEFAULT '0',
        `k7` int(11) NOT NULL DEFAULT '0',
        `k8` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`),
        LOCAL KEY `k_1` (`k1`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;


create database sbtest_local0 mode=auto;
use sbtest_local0;
CREATE TABLE `sbtest1` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `k` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

CockroachDB全局索引建表语句

drop database sbtest1 CASCADE;
drop database sbtest2 CASCADE;
drop database sbtest4 CASCADE;
drop database sbtest8 CASCADE;

create database sbtest0;
use sbtest0;
CREATE TABLE sbtest1 (
        id UUID NOT NULL DEFAULT gen_random_uuid(),
        k int NOT NULL ,
                k1 int NOT NULL ,
        k2 int NOT NULL ,
        k3 int NOT NULL ,
        k4 int NOT NULL ,
        k5 int NOT NULL ,
        k6 int NOT NULL ,
        k7 int NOT NULL ,
        k8 int NOT NULL ,
        c char(120) NOT NULL ,
        pad char(60) NOT NULL,
        PRIMARY KEY (id)
);

create database sbtest1;
use sbtest1;
CREATE TABLE sbtest1 (
        id UUID NOT NULL DEFAULT gen_random_uuid(),        
        k int NOT NULL ,
        k1 int NOT NULL ,
        k2 int NOT NULL ,
        k3 int NOT NULL ,
        k4 int NOT NULL ,
        k5 int NOT NULL ,
        k6 int NOT NULL ,
        k7 int NOT NULL ,
        k8 int NOT NULL ,
        c char(120) NOT NULL ,
        pad char(60) NOT NULL,
        PRIMARY KEY (id),
                INDEX k_1(k1)
);

create database sbtest2;
use sbtest2;
CREATE TABLE sbtest1 (
        id UUID NOT NULL DEFAULT gen_random_uuid(),
        k int NOT NULL ,
                k1 int NOT NULL ,
        k2 int NOT NULL ,
        k3 int NOT NULL ,
        k4 int NOT NULL ,
        k5 int NOT NULL ,
        k6 int NOT NULL ,
        k7 int NOT NULL ,
        k8 int NOT NULL ,
        c char(120) NOT NULL ,
        pad char(60) NOT NULL,
        PRIMARY KEY (id),
                INDEX k_1(k1),
                INDEX k_2(k2)
);

create database sbtest4;
use sbtest4;
CREATE TABLE sbtest1 (
        id UUID NOT NULL DEFAULT gen_random_uuid(),
        k int NOT NULL ,
        k1 int NOT NULL ,
        k2 int NOT NULL ,
        k3 int NOT NULL ,
        k4 int NOT NULL ,
        k5 int NOT NULL ,
        k6 int NOT NULL ,
        k7 int NOT NULL ,
        k8 int NOT NULL ,
        c char(120) NOT NULL ,
        pad char(60) NOT NULL,
        PRIMARY KEY (id),
                INDEX k_1(k1),
                INDEX k_2(k2),
                INDEX k_3(k3),
                INDEX k_4(k4)
);

create database sbtest8;
use sbtest8;
CREATE TABLE sbtest1 (
        id UUID NOT NULL DEFAULT gen_random_uuid(),
        k int NOT NULL ,
        k1 int NOT NULL ,
        k2 int NOT NULL ,
        k3 int NOT NULL ,
        k4 int NOT NULL ,
        k5 int NOT NULL ,
        k6 int NOT NULL ,
        k7 int NOT NULL ,
        k8 int NOT NULL ,
        c char(120) NOT NULL ,
        pad char(60) NOT NULL,
        PRIMARY KEY (id),
            INDEX k_1(k1),
            INDEX k_2(k2),
            INDEX k_3(k3),
            INDEX k_4(k4),
            INDEX k_5(k5),
            INDEX k_6(k6),
            INDEX k_7(k7),
            INDEX k_8(k8)
);


云原生数据库PolarDB分布式版新增标准版形态,基于X-Paxos提供100%兼容MySQL的高可靠性集中式数据库服务。
阿里巴巴集团双十一同款数据库,即刻拥有:

PolarDB-X、OceanBase、CockroachDB、TiDB二级索引写入性能测评 - 知乎 (zhihu.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/261182.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PCL点云处理之点云置平(拟合平面绕中心旋转到绝对水平)(二百二十七)

PCL点云处理之点云置平(绕中心旋转到绝对水平)(二百二十七) 一、什么是点云置平二、算法流程三、算法实现一、什么是点云置平 有时候,我们处理的点云平面并非位于水平面,而是位于某个任一三维平面上,而大多数算法又只能在水平面处理,或者水平面的点云处理是相对更简单…

互操作性(Interoperability)如何影响着机器学习的发展?

互操作性(Interoperability),也称为互用性,即两个系统之间有效沟通的能力,是机器学习未来发展中的关键因素。对于银行业、医疗和其他生活服务行业,我们期望那些用于信息交换的平台可以在我们需要时无缝沟通…

弧形导轨的加工方式有哪些?

弧形导轨常用于流水线的加工或是机械化工业的生产中,运动的导轨呈弧形,可以连接起来形成其它形态也可以是单一的,使用弧形导轨后是可以提高工作效率的,比传统的生产模式要更加快速,所以在很多工厂或生产车间都有它的身…

前端开发新趋势:Web3 与虚拟现实的技术融合

在当今互联网技术日新月异的时代,Web技术也在不断地发展和变革。从前端开发的角度来看,新技术的涌现和旧技术的迭代让前端开发者们面临着前所未有的挑战和机遇。Web3 与虚拟现实(VR)的技术融合,正是当前前端开发领域的…

Spring Boot学习随笔- 文件上传和下载(在线打卡、附件下载、MultipartFile)

学习视频:【编程不良人】2021年SpringBoot最新最全教程 第十二章、文件上传、下载 文件上传 文件上传是指将文件从客户端计算机传输到服务器的过程。 上传思路 前端的上传页面:提交方式必须为post,enctype属性必须为multipart/form-data开发…

springboot云HIS医院信息管理系统源码

通过云HIS平台,可以减少医院投资,无需自建机房和系统,快速实现信息化服务。系统升级及日常维护服务有云平台提供,无需配备专业IT维护人员进行系统维护。 一、his系统和云his系统的区别 His系统和云his系统是两种不同的计算平台,它们在技术架构上存在很大的差异。下…

进阶之路:高级Spring整合技术解析

Spring整合 1.1 Spring整合Mybatis思路分析1.1.1 环境准备步骤1:准备数据库表步骤2:创建项目导入jar包步骤3:根据表创建模型类步骤4:创建Dao接口步骤5:创建Service接口和实现类步骤6:添加jdbc.properties文件步骤7:添加Mybatis核心配置文件步骤8:编写应用程序步骤9:运行程序 1.…

​Halcon机器视觉软件学习指南

引言 Halcon是由德国MVTec软件公司开发的一款领先的机器视觉软件,广泛应用于工业检测、图像分析、医疗图像处理等领域。对于大学生和初学者而言,学习Halcon不仅能够提升技术层面的能力,还能够增强未来的就业竞争力。本文将为您提供一个系统的…

东莞城市更新区域关注程度分析tiff数据,城市规划必备

基本信息. 数据名称: 东莞市城市更新区域关注程度分析数据 数据格式: tiff 时间版本:2022年 数据几何类型: 无 数据精度:区县 数据坐标系: WGS84 数据来源:网络公开数据

【Anaconda】重装source 不生效,command not found 解决

事情是这样的,在Linux上安装anaconda的时候,由于一直需要同意其协议,因此在按enter 下一行时候出现过好几次翻过了,导致直接等于no了。(实际上,按字母d可以实现翻页的功能,不需要一直enter了&am…

Ubuntu 常用命令之 awk 命令用法介绍

📑Linux/Ubuntu 常用命令归类整理 AWK是一种处理文本文件的语言,是一个强大的文本分析工具。在Ubuntu系统下,AWK命令主要用于数据处理和生成报告。 AWK命令的参数主要有 -F:指定输入文件分隔符,FS变量就是指定输入字…

百年东芝“瞄准”汽车「芯」机遇

在汽车“新四化”大变革的驱动下,汽车半导体市场进入需求暴涨的新周期。 “智能电动汽车所需要的半导体种类和数量正在急剧增加。” 东芝电子分立器件应用技术部经理成栋表示,东芝电子正在加大汽车半导体市场的布局,从而满足汽车电动化、智能…

老师如何提高教育质量的问题

教育质量是学校教育的核心,也是衡量一个老师工作成果的重要标准。作为老师,我们应该时刻关注如何提高教育质量,以更好地促进学生的全面发展。 一、注重备课 备课是提高教育质量的基础。老师应该认真研究教材,了解学生的实际情况&…

ansible脚本-Playbook(一)

Playbook组成部分: task 任务:包含目标主机上执行的操作,使用模块定义这些操作,每个任务都是一个模块的调用Variables变量:存储和传递数据,变量可以自定义,可以在playbook当中定义为全局变量&a…

数据管理平台Splunk Enterprise本地部署结合内网穿透实现远程访问

文章目录 前言1. 搭建Splunk Enterprise2. windows 安装 cpolar3. 创建Splunk Enterprise公网访问地址4. 远程访问Splunk Enterprise服务5. 固定远程地址 前言 Splunk Enterprise是一个强大的机器数据管理平台,可帮助客户分析和搜索数据,以及可视化数据…

NCV8460ADR2G在汽车和工业应用中高压侧驱动如何破?

NCV8460ADR2G是一款完全保护的高压侧驱动器,可用于开关各种负载,如灯泡、电磁阀和其他致动器。该器件可以通过有源电流限制和高温关断针对过载情况进行内部保护。 诊断状态输出引脚提供了高温以及开关状态开路负载情况的数字故障指示。 特性:…

File.AppendAllText写入CSV时,打开表格出现乱码

发生乱码时: string time DateTime.Now.ToString("G");string filePath this.SavePath "\\产能记录.csv";string content time "," TodayNumber.ToString();File.AppendAllText(filePath, "\r\n" content);写入后&am…

c# winform chart 单个柱形设置

目前实现到第三张图形,有可以实现四张图形的请大佬帮助。 实现到第三张图的设置如下 private void Form1_Load(object sender, EventArgs e) {// 隐藏标题//chart1.Titles.Clear();// 隐藏图例chart1.Legends.Clear();// 隐藏 Y 轴的网格线和标签chart1.ChartAreas[0].AxisY.…

Python---IP 地址的介绍

1. IP 地址的概念 IP 地址就是标识网络中设备的一个地址,好比现实生活中的家庭地址。 网络中的设备效果图: 2. IP 地址的表现形式 说明: IP 地址分为两类: IPv4 和 IPv6 IPv4 是目前使用的ip地址 IPv6 是未来使用的ip地址 IPv4 是由点分十进制组成 …

解决 Hive 外部表分隔符问题的实用指南

简介: 在使用 Hive 外部表时,分隔符设置不当可能导致数据导入和查询过程中的问题。本文将详细介绍如何解决在 Hive 外部表中正确设置分隔符的步骤。 问题描述: 在使用Hive外部表时,可能会遇到分隔符问题。这主要是因为Hive在读…
最新文章