为什么要做这个测试
二级索引是关系型数据库相较于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倍以上”。
使用全局索引替代单机数据库索引会带来很高的成本,在成本敏感型的场景中,需要适当的使用本地索引来降低使用成本。
在提供了本地索引的数据库中:
对于TiDB和CockroachDB来说,情况就比较尴尬了,他们所提供的无论是全局索引还是本地索引,成本都要比单机MySQL高很多。作为用户没有任何手段能消除这个代价,除非,你不用二级索引。
从RT的角度看:
测试过程中的一个额外发现,TiDB、OB、CockroachDB的自增主键(auto_increment/serial)都有比较严重的性能问题,都要使用随机等替代方案。TiDB与CockroachDB是因为时间序带来的热点range导致,OB可能是内部的一些锁导致。兼容性包括功能兼容与性能兼容,性能兼容之路漫漫...
下面附上每个数据库测试的情况。
环境配置
版本:5.7.14-AliSQL-X-Cluster-1.5.1.8-20201229-log 规格:32C128G,独享型 阿里云购买:
测试结果
索引数量 | RT(单线程) | 最高TPS | TPS比例 |
---|---|---|---|
0 | 0.52 | 37599 | 100% |
1 | 0.53 | 35860 | 95% |
2 | 0.63 | 34859 | 93% |
4 | 0.62 | 33338 | 89% |
8 | 0.58 | 31636 | 84% |
环境配置
版本:社区版 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') ;
需要注意的几点:
SET GLOBAL ob_timestamp_service='GTS';
测试结果
全局索引:
索引数量 | RT(单线程) | 最高TPS | TPS比例 |
---|---|---|---|
0 | 1.40 | 72298 | 100% |
1 | 2.56 | 18548 | 26% |
2 | 2.81 | 13105 | 18% |
4 | 3.38 | 9130 | 13% |
8 | 3.91 | 5940 | 8% |
本地索引:
索引数量 | RT(单线程) | 最高TPS | TPS比例 |
---|---|---|---|
0 | 1.40 | 72298 | 100% |
1 | 1.41 | 63832 | 88% |
2 | 1.37 | 62886 | 86% |
4 | 1.45 | 61226 | 85% |
8 | 1.47 | 56399 | 78% |
环境配置
版本:6.1.0 部署结构:
组件 | 机器 |
---|---|
TiDB | 5台,每台机器一个TiDB进程,一个TiKV进程 |
TiKV | |
PD | 3台 |
需要注意的点:
测试结果
全局索引:
索引数量 | RT(单线程) | 最高TPS | TPS比例 |
---|---|---|---|
0 | 1.44 | 105112.07 | 100% |
1 | 1.65 | 31876.11 | 30% |
2 | 1.67 | 21631.28 | 20% |
4 | 1.73 | 14045.03 | 13% |
8 | 1.85 | 8138.60 | 8% |
本地索引:
索引数量 | RT(单线程) | 最高TPS | TPS比例 |
---|---|---|---|
0 | 1.77 | 105521.21 | 100% |
1 | 1.68 | 49534.19 | 47% |
2 | 1.81 | 36861.78 | 35% |
4 | 1.88 | 24788.64 | 23% |
8 | 2.02 | 15776.30 | 15% |
环境配置
版本:22.1.6
组件 | 机器 |
---|---|
CockroachDB | 6台,每台机器一个CockroachDB进程 |
CDB与TiDB的架构是类似的,表构建于分布式KV之上,所有表都是分布式表,所有索引都是全局索引,没有单表的概念。
需要注意的点:
测试结果
全局索引:
索引数量 | RT(单线程) | 最高TPS | TPS比例 |
---|---|---|---|
0 | 2.75 | 86094 | 100% |
1 | 2.81 | 13618 | 16% |
2 | 2.81 | 11440 | 13% |
4 | 3.41 | 9602 | 11% |
8 | 5.83 | 7424 | 9% |
环境配置
规格:公有云8C32G*2 版本:5.4.13 注意:
测试结果
全局索引:
索引数量 | RT(单线程) | 最高TPS | TPS比例 |
---|---|---|---|
0 | 1.06 | 71644.05 | 100% |
1 | 2.22 | 20045.78 | 28% |
2 | 2.25 | 13746.97 | 19% |
4 | 3.07 | 10683.99 | 15% |
8 | 3.67 | 8098.44 | 11% |
本地索引:
索引数量 | RT(单线程) | 最高TPS | TPS比例 |
---|---|---|---|
0 | 1.06 | 71644.05 | 100% |
1 | 1.34 | 69690.60 | 97% |
2 | 1.35 | 67346.66 | 94% |
4 | 1.47 | 64353.63 | 90% |
8 | 1.5 | 58782.94 | 82% |
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;
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;
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;
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;
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;
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;
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)