ShardingSphere-Proxy分表场景测试案例
快速入门文章参考:《ShardingSphereProxy:快速入门》
基于K8S部署文章参考:《基于K8s部署ShardingSphere-Proxy》
基于golang的测试用例参考:《ShardingSphere-Proxy 连接实战:从 Golang 原生 SQL 到 GORM 的应用》
背景
我们需要具体的看一下ShardingSphere-Proxy分表组件的边界,因此,我测试了常用的41个场景。
数据库表结构
我们对订单表(orders)基于 user_id 进行了分表操作,共分为四张表。而用户表(user)和产品表(product)则未进行分表处理,它们的建表语句如下:
DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders_0` (`id` bigint NOT NULL,`order_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`user_id` int NOT NULL,`product_id` int NOT NULL,`order_date` bigint NOT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (`id` bigint NOT NULL,`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS `product`;
CREATE TABLE `product` (`id` bigint NOT NULL,`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
测试场景
| 项目 | 说明 | 是否包含分表键 | 测试sql | 结果 |
| 全表查询 | SELECT * FROM `orders`; | 支持 | ||
| 等值查询 | 否 | SELECT * FROM `orders` WHERE order_id='20240101ORDER9503'; | 支持 | |
| 是 | SELECT * FROM `orders` WHERE user_id=8648; | 支持 | ||
| and查询 | 否 | SELECT * FROM `orders` WHERE order_id='20240101ORDER6546' AND product_id=861; | 支持 | |
| and查询 | 是 | SELECT * FROM `orders` WHERE user_id=4581 AND product_id=213 | 支持 | |
| 范围查询 | in查询 | 是 | SELECT * FROM `orders` WHERE user_id IN (2608,4581,2142,3519) | 支持 |
| in查询 | 否 | SELECT * FROM `orders` WHERE order_id IN ('20240101ORDER6546','20250101ORDER2295','20250101ORDER4465','20240101ORDER7826') | 支持 | |
| between查询 | 否 | SELECT * FROM `orders` WHERE order_id BETWEEN '20240101ORDER6546' AND '20240101ORDER6548 | 支持 | |
| between查询 | 是 | SELECT * FROM `orders` WHERE user_id BETWEEN 4581 AND 4583 | 支持 | |
| or查询 | 否 | SELECT * FROM `orders` WHERE order_id = '20240101ORDER6546' OR order_id = '20250101ORDER2295' | 支持 | |
| or查询 | 是 | SELECT * FROM `orders` WHERE user_id = 4581 OR user_id = 3519 | 支持 | |
| >查询 | 否 | SELECT * FROM `orders` WHERE order_id > '20240101ORDER6546' | 支持 | |
| >查询 | 是 | SELECT * FROM `orders` WHERE user_id > 4581 | 支持 | |
| 累加聚合 | sum | 否 | SELECT SUM(product_id) FROM `orders` WHERE order_id='20240101ORDER6546' | 支持 |
| sum | 是 | SELECT SUM(product_id) FROM `orders` WHERE user_id=4581 | 支持 | |
| sum | 否 | SELECT SUM(product_id) FROM `orders` | ||
| count | 否 | SELECT count(*) FROM `orders` WHERE order_id='20240101ORDER6546' | 支持 | |
| count | 是 | SELECT count(*) FROM `orders` WHERE user_id=4581 | 支持 | |
| count | 否 | SELECT count(*) FROM `orders` | 支持 | |
| 比较聚合 | max | 否 | SELECT MAX(user_id) FROM `orders` | 支持 |
| min | 否 | SELECT MIN(user_id) FROM `orders` | 支持 | |
| 平均聚合 | avg | 否 | SELECT AVG(user_id) FROM `orders` | 支持 |
| 分组 | group | 否 | SELECT *,SUM(product_id) AS sum_product,MAX(product_id) as max_product FROM `orders` GROUP BY `order_id` | 支持 |
| group | 是 | SELECT *,SUM(product_id) AS sum_product,MAX(product_id) as max_product FROM `orders` GROUP BY `user_id` | 支持 | |
| 排序、分页 | order/limit | 否 | SELECT * FROM `orders` ORDER BY order_id desc LIMIT 5 | 支持 |
| order/limit | 是 | SELECT * FROM `orders` ORDER BY user_id desc LIMIT 5 | 支持 | |
| 去重 | DISTINCT | 否 | SELECT DISTINCT `order_id` FROM `orders` | 支持 |
| DISTINCT | 是 | SELECT DISTINCT `user_id` FROM `orders` | 支持 | |
| 关联查询 | join | 否 | SELECT orders.*,product.* FROM `orders` JOIN product ON orders.product_id = product.id | 支持 |
| join | 是 | SELECT orders.*,user.* FROM `orders` JOIN user ON orders.user_id = user.id | 支持 | |
| 子查询 | 否 | SELECT subquery.* FROM (SELECT orders.* FROM orders JOIN product ON orders.product_id = product.id) AS subquery | 支持 | |
| 是 | SELECT subquery.* FROM (SELECT orders.* FROM orders JOIN user ON orders.user_id = user.id) AS subquery | 支持 | ||
| IN | 是 | SELECT * FROM orders WHERE user_id IN (SELECT id FROM user) | 支持 | |
| UNION | UNION | 是 | SELECT * FROM orders WHERE user_id = 8648 UNION SELECT * FROM orders WHERE user_id = 3401 | 支持 |
| UNION | 否 | SELECT * FROM orders WHERE order_id = '20240101ORDER6546' UNION SELECT * FROM orders WHERE order_id = '20240101ORDER9728' | ||
| UNION ALL | 否 | SELECT * FROM orders WHERE order_id = '20240101ORDER6546' UNION SELECT * FROM orders WHERE order_id = '20240101ORDER9728' | 支持 | |
| UNION ALL | 否 | SELECT * FROM orders WHERE order_id = '20240101ORDER6546' UNION ALL SELECT * FROM orders WHERE order_id = '20240101ORDER9728' | 支持 | |
| UPDATE | 根据主键更新 | 否 | UPDATE `orders` SET `product_id`=1 WHERE id = 1866023311733952512 | 支持 |
| 是 | UPDATE `orders` SET `product_id`=1 WHERE user_id = 9148 | 支持 | ||
| DELETE | 根据主键删除 | 否 | DELETE FROM `orders` WHERE id = 1866023311071252480 | 支持 |
| 是 | DELETE FROM `orders` WHERE user_id = 4389 | 支持 | ||
| INSERT | INSERT INTO `orders` (`order_id`,`user_id`,`product_id`,`order_date`,`id`) VALUES ('20240101ORDER1227',1660,106,1735632223,1874003486933258240) | 支持 |
相关文章:
ShardingSphere-Proxy分表场景测试案例
快速入门文章参考:《ShardingSphereProxy:快速入门》 基于K8S部署文章参考:《基于K8s部署ShardingSphere-Proxy》 基于golang的测试用例参考:《ShardingSphere-Proxy 连接实战:从 Golang 原生 SQL 到 GORM 的应用》 背景 我们…...
学技术学英文:Tomcat的线程模型调优
导读: tomcat 线程调优关键需要理解下面这几个参数: 1. maxConnections 描述:指定服务器能够同时接受和处理的最大连接数。也就是说,服务器在任何时候都能处理的最大并发连接数。作用:限制服务器在任何给定时间点能…...
创建flutter项目遇到无法连接源的问题
Flutter 环境信息 Flutter版本: 3.19.4 (channel stable) Framework: revision 68bfaea224 (2024-03-20) Engine: revision a5c24f538d Dart: 3.3.2 DevTools: 2.31.1 项目基本信息 项目路径: D:\F\luichun 域名: www.luichun.com.cn 支持平台: android, web, windows 项目创…...
MAC系统QT图标踩坑记录
MAC系统QT图标踩坑记录 1. 准备图标1.1 方法一:下载准备好的图标1.2 方法二:自己生成图标1.2.1 准备一个png文件1.2.2 用sips生成不同大小的图片1.2.3 用iconutil生成图标文件 2. 配置图标2.1. 把图标改命成自己想要的名字,如icon.icns&#…...
TF-IDF(Term Frequency-Inverse Document Frequency)详解:原理和python实现(中英双语)
中文版 TF-IDF算法详解:理解与应用 TF-IDF(Term Frequency-Inverse Document Frequency)是信息检索与文本挖掘中常用的算法,广泛应用于搜索引擎、推荐系统以及各种文本分析领域。TF-IDF的核心思想是通过计算一个词在文档中的重要…...
【竞技宝】CS2:HLTV2024职业选手排名TOP15-xantares
北京时间2024年12月30日,HLTV年度选手排名正在持续公布中,今日凌晨正式公布了今年的TOP15选手为EternalFire战队的xantares选手。 选手简介 xantares是一名来自于土耳其的CS职业选手,出生于1995年,今年已经29岁。早在2012年&…...
Spring-kafka快速Demo示例
使用Spring-Kafka快速发送/接受Kafka消息示例代码,项目结构是最基础的SpringBoot结构,提前安装好Kafka,确保Kafka已经正确启动 pom.xml,根据个人情况更换springboot、java版本等 <?xml version"1.0" encoding&qu…...
客户案例:基于慧集通集成平台,打通屠宰管理系统与用友U8C 系统的全攻略
一、引言 本原型客户成立于2014年,是一家集饲草种植、肉牛养殖、精深加工、冷链物流、餐饮服务于一体的大型农牧综合体。公司下设三个子公司分别涵盖农业、畜牧业、肉制品加工业与餐饮物流服务业。公司严格按照一二三产业融合发展要求,以肉牛产业化为支…...
模型 九屏幕分析法
系列文章 分享 模型,了解更多👉 模型_思维模型目录。九屏幕法:全方位分析问题的系统工具。 1 九屏幕分析法的应用 1.1 新产品研发的市场分析 一家科技公司计划开发一款新型智能手机,为了全面评估市场潜力和风险,他们…...
Qanything 2.0源码解析系列6 PDF解析逻辑
Qanything 2.0源码解析系列6: PDF解析逻辑 type: Post status: Published date: 2024/12/04 summary: 深入剖析Qanything是如何拆解PDF的,核心是pdf转markdown category: 技术分享 原文:www.feifeixu.top 😀 前言: 在前面的文章中探究了图片是怎么进行解析的,这篇文章对…...
MAC系统QT Creator的快捷键
安装好QT Creator后使用了一段时间,真是越用越难受,只想说🗑️。。。 找一圈qt creator的快捷键 0. 快捷键界面 这里的搜索真的是…无语,不考虑是人查找吗?? 1. 代码前后浏览 2. 移动代码 3. 半自动导入…...
【深度学习】多目标融合算法—样本Loss提权
目录 一、引言 二、样本Loss提权 2.1 技术原理 2.2 技术优缺点 三、总结 一、引言 在朴素的深度学习ctr预估模型中(如DNN),通常以一个行为为预估目标,比如通过ctr预估点击率。但实际推荐系统业务场景中,更多是多…...
C 实现植物大战僵尸(四)
C 实现植物大战僵尸(四) C 实现植物大战僵尸,完结撒花(还有个音频稍卡顿的性能问题,待有空优化解决)。目前基本的功能模块已经搭建好了,感兴趣的友友可自行尝试编写后续游戏内容 因为 C 站不能…...
Tailwind CSS:现代 CSS 框架的优雅之选
Tailwind CSS:现代 CSS 框架的优雅之选 在现代前端开发中,CSS 的灵活性和复杂性让开发者在设计与实现之间寻找平衡。而 Tailwind CSS 的出现,重新定义了 CSS 框架的使用方式。它是一种原子化的 CSS 工具库,提供了丰富的类名以快速…...
MyBatis 使用的设计模式详解
MyBatis 是一个优秀的持久层框架,它简化了 Java 应用程序与数据库之间的交互。为了实现高效、灵活且易于维护的代码,MyBatis 内部使用了多种设计模式。本文将详细介绍 MyBatis 中应用到的设计模式及其作用。 工厂模式(Factory Pattern&#x…...
LabVIEW 中 NI Vision 模块的IMAQ Create VI
IMAQ Create VI 是 LabVIEW 中 NI Vision 模块(NI Vision Development Module)的一个常用 VI,用于创建一个图像变量。该图像变量可以存储和操作图像数据,是图像处理任务的基础。 通过以上操作,IMAQ Create VI 是构建…...
2024 年度总结
时光荏苒,2024 年即将画上句号,回顾这一年的写博历程,有付出、有收获、有成长,也有诸多值得回味与反思的瞬间。 一、内容创作 主题涉猎:这一年,我致力于探索多样化的主题,以满足不同读者群体的…...
STM32 高级 物联网通讯之LoRa通讯
目录 LoRa通讯基础知识 常见的3种通讯协议 远距离高速率的传输协议 近距离高速率传输技术 近距离低功耗传输技术 低功耗广域网 采用授权频段技术 非授权频段 LoRa简介 LoRa的特点 远距离 低功耗 安全 标准化 地理定位 移动性 高性能 低成本 LoRa应用 LoRa组…...
【笔记】在虚拟机中通过apache2给一个主机上配置多个web服务器
(配置出来的web服务器又叫虚拟主机……) 下载apache2 sudo apt update sudo apt install apache2 (一)ip相同 web端口不同的web服务器 进入 /var/www/html 创建站点一和站点二的目录文件(目录文件名自定义哈&#x…...
数据库的创建与删除:理论与实践
title: 数据库的创建与删除:理论与实践 date: 2024/12/31 updated: 2024/12/31 author: cmdragon excerpt: 在当今的数字时代,数据的管理和存储变得尤为重要。数据库作为数据存储的结构化方案,为数据的增删改查提供了系统化的方法。在一个典型的数据库管理系统中,创建和…...
5步搞定:Z-Image-Turbo_UI界面LoRA使用教程,轻松玩转多种画风
5步搞定:Z-Image-Turbo_UI界面LoRA使用教程,轻松玩转多种画风 作为一名AI绘画工具的重度使用者,我深知新手最需要的是什么——不是复杂的参数解释,而是简单明了的操作指南。今天要介绍的Z-Image-Turbo_UI界面,可能是你…...
EZModbus:面向ESP32的异步无锁Modbus C++库
1. EZModbus项目概述EZModbus是一个专为ESP32平台设计的C Modbus通信库,深度集成FreeRTOS实时操作系统,支持Arduino IDE与原生ESP-IDF两种开发框架。该库并非对现有Modbus协议栈的简单封装,而是从零构建的异步事件驱动型实现,其核…...
形式验证实战:5个降低状态空间复杂度的黑科技(附内存控制器案例)
形式验证实战:5个降低状态空间复杂度的黑科技(附内存控制器案例) 在芯片设计领域,形式验证(Formal Verification, FV)正逐渐成为确保设计正确性的重要手段。然而,随着设计复杂度的提升ÿ…...
Windows系统下CUDA Toolkit与cuDNN的安装与配置全攻略
1. 环境准备:确认你的硬件和系统支持 在开始安装CUDA Toolkit和cuDNN之前,首先要确认你的Windows系统是否满足基本要求。我遇到过不少朋友兴冲冲下载安装包,结果发现显卡根本不支持CUDA加速,白白浪费了时间。这里分享几个快速检查…...
youtube上台式机 4k显示器配置
1.相关的网址信息https://www.youtube.com/watch?v66MawsFCgaY2.一个外国人做的相关的展示信息3.相关的配置如下amd r7 9800x3D 处理器显卡是技嘉的显卡 rtx5080 16gb内存的显卡...
【2026 CVPR】Asking like Socrates: Socrates helps VLMs understand remote sensing images
RS-EoT (Remote Sensing Evidence-of-Thought) 研究旨在解决视觉语言模型(VLM)在处理遥感图像时的“虚假推理”问题 。 文章目录 核心问题 核心思想 核心方法 A. 数据合成:SocraticAgent Data Statistics B. 训练策略:两阶段渐进式强化学习 (RL) C. 训练策略 实验验证 主要…...
Threejs 使用Line2实现自定义线条宽度的实战指南
1. 为什么Three.js默认的lineWidth设置无效? 很多Three.js开发者第一次尝试修改线条宽度时,都会遇到一个令人困惑的问题:明明设置了lineWidth属性,但渲染出来的线条始终是1像素宽。这个问题其实源于WebGL的底层限制。WebGL基于Ope…...
16.为什么 Fragment 相比额外包一层 div 更优?
在 React 里,只要你写过几行组件,很容易掉进一个老毛病:“反正组件要有一个根节点,那我就随手包一层 <div> 吧。”一开始看不出问题,但项目一大,你会发现:DOM 结构被一堆没意义的 <div…...
STM32驱动X-NUCLEO-IHM02A1实现工业级步进电机控制
1. X-NUCLEO-IHM02A1 驱动开发深度解析:面向工业级步进电机控制的 STM32 底层实现 X-NUCLEO-IHM02A1 是意法半导体(STMicroelectronics)推出的高性能双通道步进电机驱动扩展板,专为 STM32 Nucleo 开发平台设计。该板基于 STSPIN22…...
四场景下的两阶段鲁棒优化模型构建与实施——列与约束生成算法及其数据处理机制探究
两阶段鲁棒优化模型 多场景 采用matlab编程两阶段鲁棒优化程序,考虑四个场景,模型采用列与约束生成(CCG)算法进行求解,场景分布的概率置信区间由 1-范数和∞-范数约束,程序含拉丁超立方抽样kmeans数据处理程…...
