vitess使用记录:vtctldclient,设置分表规则

继续探索未完成的事情。

vitess使用记录系列已经写了好几篇了,记录了在测试过程中遇到的各种问题。《vitess使用:从部署到go客户端连接查询》、《vitess使用记录:vtctldclient》、《vitess使用:基于源码运行vtctldclient工具》整个系列不具备很强的逻辑性,待我熟悉了这个开源组件之后,再做详细且完备的梳理。

这篇文章,先说明一下如何设置分表规则,再记录遇到的问题。

规则设置

使用 ApplyVSchema 的步骤

  1. 配置 VSchema 文件:将你的 JSON VSchema 配置保存到一个文件中,例如 vschema.json
    我是配置在examples/local目录下,vschema_customer_sharded1.json。

    {"sharded": true,"vindexes": {"hash": {"type": "hash"}},"tables": {"customer": {"column_vindexes": [{"column": "customer_id","name": "hash"}]}}
    }

设置的规则查看

有两种方法可以查看规则设置是否成功。

第一种方法

一种是通过vitess的可视化web页面查看,比如,在我的测试用例中,在浏览器中输入这个地址:

http://localhost:33574/debug/status

然后,我们可以看到如下一个页面

点击“In JSON”就可以查看设置的规则。

第二种方法

 go run main.go --server 127.0.0.1:33575 GetVSchema test

go测试案例

package mainimport ("fmt""log""vitess.io/vitess/go/vt/vitessdriver"
)func main() {// 连接 vtgate/*// Open is a Vitess helper function for sql.Open().//// It opens a database connection to vtgate running at "address".func Open(address, target string) (*sql.DB, error) {c := Configuration{Address: address,Target:  target,}return OpenWithConfiguration(c)}关于target参数的说明:- target参数是一个逗号分隔的字符串,用于指定查询的目标,格式为:keyspace@primary- keyspace:指定要查询的数据库实例- primary:指定要查询的数据库实例的主分片*/db, err := vitessdriver.Open("localhost:33575", "test@primary")if err != nil {panic(err)}defer db.Close()// SHOW VSCHEMA TABLES; 查询所有表tables, err := db.Exec("SHOW TABLES")if err != nil {panic(err)}fmt.Printf("tables:%+v\n", tables)// 建表// create table if not exists customer(// 	customer_id bigint not null auto_increment,// 	email varbinary(128),// 	primary key(customer_id)//   ) ENGINE=InnoDB;_, err = db.Exec("CREATE TABLE if not exists customer(customer_id bigint not null auto_increment, email varbinary(128), primary key(customer_id)) ENGINE=InnoDB;")// 插入数据_, err = db.Exec("INSERT INTO customer (customer_id, email) VALUES (3, '3@mai.com')")if err != nil {fmt.Println("插入错误", err)}_, err = db.Exec("INSERT INTO customer (customer_id, email) VALUES (4, '4@mai.com')")if err != nil {fmt.Println("插入错误", err)}// 执行查询rows, err := db.Query("SELECT * FROM customer ")if err != nil {panic(err)}defer rows.Close()// 处理查询结果// 输出查询结果for rows.Next() {var column1 int64var column2 stringif err := rows.Scan(&column1, &column2); err != nil {log.Fatal(err)}fmt.Println(column1, column2)}
}

但是,通过MySql的工具查看,是只有一张表,是不是实际上是分区的方式?并不是物理分表的逻辑?这个问题还需进一步探索。 

文章的最后,说说我遇到的问题。

 开始我是通过这个命令设置规则:

go run main.go --server 127.0.0.1:33575  ApplySchema --sql-file ../../../examples/local/vschema_ddls.sql test

vschema_ddls.sql文件的内容如下:

alter vschema add table test.customer;
-- Sharded Keyspace
alter vschema on test.customer add vindex hash(customer_id) using hash;

最终报了这个错误:

vtctldclient:  rpc error: code = Unknown desc = non-ddl statements can only be executed for single shard keyspaces: alter vschema add table test.customer

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

houdini肌肉刷pin点的方法

目标:产生gluetoanimation这个属性 主要节点:attribute paint(或者muscle paint) 步骤1: 导入肌肉资产 导入的是rest shape的肌肉 在有侧边栏可以打开display group and attribute list,方便查看group。不同的肌肉块按照muscl…

10个Word自动化办公脚本

在日常工作和学习中,我们常常需要处理Word文档(.docx)。 Python提供了强大的库,如python-docx,使我们能够轻松地进行文档创建、编辑和格式化等操作。本文将分享10个使用Python编写的Word自动化脚本,帮助新…

在开发环境中,前端(手机端),后端(电脑端),那么应该如何设置iisExpress

首先,要想手机端应用能成功请求后端,两个设备至少需在同一个局域网内,且IP地址互通; 因为ajax是http(s)://IP地址端口号的方式请求,但是iisExpress默认是localhost如何解决,并没有IP地址,所以手…

嵌入式硬件面试题【经验】总结----会不断添加更新

目录 引言 一、电阻 1、电阻选型时一般从那几个方面考虑 2、上拉电阻的作用 3、PTC热敏电阻作为电源电路保险丝的工作原理 4、如果阻抗不匹配,有哪些后果 二、电容 1、电容选型一般从哪些方面进行考虑? 2、1uf的电容通常来滤除什么频率的信号 三、三极管…

初识java(4)

今天给大家分享一下java中内置类型定义时的一些要点,我已经整理成笔记,现在分享给大家。 整型变量: 注:在定义int变量时,所赋值不能超过int的范围; 了 intd:1234567890127411编译时报错,初值超过胃int 当你赋值的过而值大于这个变量能够保存的最大值…

计算机毕业设计Python+LSTM天气预测系统 AI大模型问答 vue.js 可视化大屏 机器学习 深度学习 Hadoop Spark

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

初窥 HTTP 缓存

引言 对于前端来说, 你肯定听说过 HTTP 缓存。 当然不管你知不知道它, 对于提高网站性能和用户体验, 它都扮演着重要的角色! 它通过在客户端和服务器之间存储和重用先前获取的资源副本, 来减少网络流量和降低资源加载时间, 从而提升用户体验! 以下是 HTTP 缓存的重要性: 减少…

02_Django路由Router

二、Django路由Router 在实际开发过程中,一个Django 项目会包含很多的 app ,这时候如果我们只在主路由里进行配置就会显得杂乱无章,所以通常会在每个 app 里,创建各自的urls.py路由模块,然后从根路由出发,…

110页PPT战略指南:剖析Cross SWOT分析、市场洞察与内部优化方案

您看到的是一个非常全面的通过Cross SWOT制定战略方案的框架。以下是对每个部分的简要解释和补充,以帮助您更好地理解和应用这个框架: 一、通过Cross SWOT制定战略方案 1. 宏观环境 (1) PEST分析:评估政治(Political&#xff0…

ArcGIS 软件中路网数据的制作

内容导读 路网数据是进行网络分析的基础,它是建立网络数据集的数据来源。 本文我们以OSM路网数据为例,详细介绍OSM路网数据从下载,到数据处理,添加属性,完成符合网络分析的网络数据集的全部过程。 01 数据获取 比较…

JMeter实时性能压测可视化系统整合

一、相关工具简介: JMeter、Grafana 和 InfluxDB 结合实时地收集、分析和展示性能测试数据,进行更好地理解系统的性能表现,及时发现潜在问题并进行优化。 1,JMeter 实时生成性能数据,并将其发送到 InfluxDB 进行存储。2,InfluxDB 存储的数据。3,通过Grafana的仪表板,用…

数据结构——排序第三幕(深究快排(非递归实现)、快排的优化、内省排序,排序总结)超详细!!!!

文章目录 前言一、非递归实现快排二、快排的优化版本三、内省排序四、排序算法复杂度以及稳定性的分析总结 前言 继上一篇博客基于递归的方式学习了快速排序和归并排序 今天我们来深究快速排序,使用栈的数据结构非递归实现快排,优化快排(三路…

YOLOv9改进,YOLOv9引入CAS-ViT(卷积加自注意力视觉变压器)中AdditiveBlock模块,二次创新RepNCSPELAN4结构

摘要 CAS-ViT 是一种为高效移动应用设计的视觉Transformer。模型通过结合卷积操作与加性自注意机制,在保持高性能的同时显著减少计算开销,适合资源受限的设备如手机。其核心组件 AdditiveBlock 通过多维度信息交互和简化的加性相似函数,实现了高效的上下文信息整合,避免了…

【Leecode】Leecode刷题之路第62天之不同路径

题目出处 62-不同路径-题目出处 题目描述 个人解法 思路: todo代码示例:(Java) todo复杂度分析 todo官方解法 62-不同路径-官方解法 方法1:动态规划 思路: 代码示例:(Java&…

PostgreSQL在Linux环境下的常用命令总结

标题 登录PgSQL库表基本操作命令新建库表修改库表修改数据库名称:修改表名称修改表字段信息 删除库表pgsql删除正在使用的数据库 须知: 以下所有命令我都在Linux环境中执行验证过,大家放心食用,其中的实际名称换成自己的实际名称即…

分布式协同 - 分布式锁一二事儿

文章目录 导图Pre概述概述1. 分布式互斥和临界资源的协调2. 分布式锁的基本原理3. 分布式锁的实现方式a. 基于数据库实现的分布式锁b. 基于Redis实现的分布式锁c. 基于Zookeeper实现的分布式锁 4. 高并发场景下的分布式锁优化a. 分段锁(Sharded Locks)b.…

FFmpeg 简介与编译

1. ffmpeg 简介: FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移…

Ubuntu-20.04安装 terminator

Ubuntu-20.04安装 terminator sudo apt install terminator 安装成功之后,在ubuntu终端里执行命令 terminator & terminator 窗口分割 基本操作 1. 创建新终端 水平分割:按下 Ctrl Shift E 创建一个新的水平分屏。 垂直分割:按下 Ct…

(已解决)wps无法加载此加载项程序mathpage.wll

今天,在安装Mathtype的时候遇到了点问题,如图所示 尝试了网上的方法,将C:\Users\Liai_\AppData\Roaming\Microsoft\Word\STARTUP路径中的替换为32位的Mathtype加载项。但此时,word又出现了问题 后来知道了,这是因为64位…

shell第二次作业

1. 使用case实现成绩优良差的判断 read -p "请输入你的成绩:" score if ! [[ "$score" ~ ^[0-9]$ ]];then echo "请输入数字" exit 1 fi if [ "$score" -lt 0 ] || [ "$score" -gt 100 ];then echo …