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: 在当今的数字时代,数据的管理和存储变得尤为重要。数据库作为数据存储的结构化方案,为数据的增删改查提供了系统化的方法。在一个典型的数据库管理系统中,创建和…...
别再死记硬背公式了!用Python实战SCS模型,5分钟搞定城市降雨径流估算
用Python实战SCS模型:5分钟自动化城市降雨径流分析 水文工程师们是否厌倦了手动查表计算CN值?环境分析师是否还在为重复的径流公式推导头疼?今天我们将用Python彻底改变传统工作流——无需记忆复杂公式,只需5行核心代码即可完成从…...
Perplexity数学知识查询稀缺资源包(限时开放48小时):含12类经典数学场景Prompt+错误模式对照表+自动校验脚本
更多请点击: https://intelliparadigm.com 第一章:Perplexity数学知识查询 Perplexity 是衡量语言模型预测能力的核心指标,其数学定义源于信息论中的交叉熵。它本质上是模型对测试语料困惑程度的指数化表达,值越低表示模型对序列…...
别再问SAP权限怎么配了!从MM01物料创建权限入手,5分钟搞懂PFCG角色配置核心逻辑
SAP权限配置实战:从MM01物料创建权限掌握PFCG角色设计精髓 在SAP项目实施中,权限配置往往是新手顾问最容易卡壳的环节。当用户抱怨"为什么我点这个按钮就报权限错误"时,很多刚入行的顾问只能尴尬地回应"我查查后台配置"。…...
手把手教你用ZYNQ PS-SPI读写W25Q80 Flash(附Vitis代码与逻辑分析仪调试技巧)
ZYNQ PS-SPI驱动W25Q80 Flash全流程实战与深度调试指南 在嵌入式系统开发中,外部Flash存储器的可靠读写是许多应用的基础需求。Xilinx ZYNQ系列SoC的Processing System(PS)端集成了SPI控制器,可直接连接W25Q80等串行Flash芯片,无需占用宝贵的…...
荣耀出征唯一官网下载:零氪平民友好 无套路轻松畅玩
国新出审〔2023〕941号,ISBN 978-7-498-12393-0,备案号:皖ICP备2023003237号-2。由河北传娱网络科技有限公司拥有著作权,方圆电子音像出版社有限责任公司正规出版,安徽游昕网络科技有限公司负责全程运营,资…...
uni-app视频播放二选一:手把手对比调试video.js与MuiPlayer插件(H5/m3u8实战)
uni-app视频播放方案深度对比:video.js与MuiPlayer在H5/m3u8场景下的实战抉择 当uni-app开发者面临H5端m3u8视频播放需求时,技术选型往往成为项目推进的第一道门槛。video.js与MuiPlayer作为两大主流解决方案,各自拥有独特的生态优势与适配特…...
Mac/Win双平台保姆级教程:从零配置ADB环境到连接真机/模拟器
Mac/Win双平台保姆级教程:从零配置ADB环境到连接真机/模拟器 第一次接触Android开发或测试时,配置ADB环境往往是让人头疼的第一步。不同操作系统、不同设备品牌、不同模拟器之间的差异,让很多新手在"adb devices"命令前败下阵来。…...
保姆级教程:在群晖DSM 7.2上为虚幻引擎5项目配置Perforce Helix Core(附TypeMap避坑清单)
群晖DSM 7.2上为虚幻引擎5配置Perforce Helix Core全指南 对于独立游戏开发者和小型工作室来说,版本控制系统是项目管理的基石。Perforce Helix Core以其卓越的大文件处理能力,成为虚幻引擎项目版本控制的首选方案。本文将手把手指导你在群晖NAS上搭建Pe…...
光猫拨号下,如何把二级路由器变成‘透明网桥’?一个设置让NAS、打印机全屋可见
光猫拨号下的家庭网络优化:二级路由器透明化实战指南 家里NAS里的电影在客厅电视上死活刷不出来?书房电脑找不到卧室的无线打印机?这些问题往往源于家庭网络中多台路由器形成的"局域网套娃"。本文将手把手教你如何将二级路由器转化…...
TI AM64x 5路原生千兆网口:工业物联网确定性网络与多核异构计算实战
1. 项目概述:为什么我们需要5路原生千兆网口?在工业现场摸爬滚打十几年,我见过太多因为网络接口“捉襟见肘”而导致的尴尬局面。想象一下,一个产线控制柜里,PLC、视觉系统、多台伺服驱动器、HMI触摸屏,还有…...
