PolarDB-X最佳实践系列(五):使用通义千问和存储过程快速生成测试数据

文章来源:PolarDB知乎号

作者:梦实

我们在测试数据库性能的过程中,通常需要生成一批测试数据。

以前,一般要写一段程序或者脚本来完成这项工作,但现在是2024年啦!时代变了!

PolarDB-X目前是少有的支持存储过程的分布式数据库,结合大模型,我们可以非常简单的来制造测试数据: 存储过程的原理和使用方法中心 通义官网

例如,有这样的表结构:

CREATE TABLE t2 (
        id bigint(20) NOT NULL AUTO_INCREMENT,
        c1 varchar(64) NOT NULL ,
        c2 tinyint(4) NOT NULL ,
        c3 varchar(64) NOT NULL ,
        c4 tinyint(4) NOT NULL ,
        c5 varchar(64) NOT NULL ,
        c6 bigint(20) DEFAULT NULL ,
        c7 bigint(20) DEFAULT NULL ,
        c8 double DEFAULT NULL ,
        c9 bigint(20) DEFAULT NULL ,
        PRIMARY KEY (id),
        CLUSTERED INDEX gsi1 (c3)
                PARTITION BY KEY(c3)
                PARTITIONS 32,
        UNIQUE KEY uk1 (c5, c3, c1),
        KEY idx1 (c1),
        KEY idx2 (c5, c1, c8),
        KEY idx3 (c5, c3, c8)
) ENGINE = InnoDB PARTITION BY KEY(c1) PARTITIONS 32;

我们只需要对通义千问进行提问,描述以下需求,它就能自动生成一个存储过程:

写一个存储过程,为以下表生成100万条数据,其中,c1和c5是40位的十六进制字符串。(SQL内容省略了)

通义千问生成了这样的下面的存储过程:

DELIMITER ;;
CREATE PROCEDURE GenerateTestData()
BEGIN
    DECLARE v_counter INT DEFAULT 0;
    DECLARE v_hex_string CHAR(40);

    WHILE v_counter < 1000000 DO
        -- 生成40位十六进制字符串
        SET v_hex_string = LPAD(LOWER(REPLACE(UUID(), '-', '')), 40, '0');

        INSERT INTO t2 (
            c1,
            c2,
            c3,
            c4,
            c5,
            c6,
            c7,
            c8,
            c9
        ) VALUES (
            -- 生成c1的十六进制字符串
            v_hex_string,
            -- 随机生成tinyint值(例如,范围从0到255)
            FLOOR(RAND() * 256),
            -- 生成c3的随机字符串(也可以是十六进制,这里仅作示例)
            LPAD(LOWER(REPLACE(UUID(), '-', '')), 32, '0'),
            -- 随机生成tinyint值
            FLOOR(RAND() * 256),
            -- 生成c5的十六进制字符串
            v_hex_string,
            -- 随机生成bigint值
            FLOOR(RAND() * POW(2, 63)),
            -- 随机生成bigint值
            FLOOR(RAND() * POW(2, 63)),
            -- 随机生成double值
            RAND(),
            -- 随机生成bigint值
            FLOOR(RAND() * POW(2, 63))
        );

        SET v_counter = v_counter + 1;
    END WHILE;

END;;
DELIMITER ;

CALL GenerateTestData();

由于PolarDB-X对MySQL的语法兼容都非常高,我们无需对生成结果进行修改,直接粘贴到PolarDB-X中即可执行:

喝一杯茶,我们的测试数据就创建完成了:

欢迎关注,我们会带给大家更多PolarDB-X的最佳实践!


数据库PolarDB-X新人入门一站式页面,快速体验集中分布式一体化新特性!

云原生数据库PolarDB分布式版新人入门

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值