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

news/2024/12/2 22:44:00/

继续探索未完成的事情。

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.ppmy.cn/news/1551862.html

相关文章

设计模式学习之——策略模式

策略模式(Strategy Pattern)是一种行为型设计模式,它允许定义一系列算法,并将每个算法封装在独立的类中,使它们可以互相替换。策略模式通过将算法的使用与算法的实现分离,使得算法可以独立于客户端而变化。…

Webman中实现定时任务

文章目录 Webman中实现定时任务一、引言二、安装与配置1、安装Crontab组件2、创建进程文件3、配置进程文件随Webman启动4、重启Webman5、Cron表达式(补充)例子 三、使用示例四、总结 Webman中实现定时任务 一、引言 在现代的后端开发中,定时…

栈和队列——考研笔记

文章目录 一.栈(Stack)基本概念1.栈的基本操作2.栈的常考题型 二.顺序栈的实现1.顺序栈的定义2.增(进栈操作)3.删(出栈操作)4.共享栈(两个栈共享同一片空间) 三.链栈的实现1.头插法建…

青少年编程等级一级 自动打包机问题

一条哈密瓜自动打包流水线的工作程序是这样的:首先系统设定每箱哈密瓜应该有的总重量 W;然后传送带将一只只哈密瓜输送到一个自动称重设备上,根据称重结果进行以下操作:- 如果称上的总重量正好达到 W,则将称上的所有哈…

【CSS in Depth 2 精译_063】10.2 深入理解 CSS 容器查询中的容器

当前内容所在位置(可进入专栏查看其他译好的章节内容) 【第十章 CSS 容器查询】 ✔️ 10.1 容器查询的一个简单示例 10.1.1 容器尺寸查询的用法 10.2 深入理解容器 ✔️ 10.2.1 容器的类型 ✔️10.2.2 容器的名称 ✔️10.2.3 容器与模块化 CSS ✔️ 10.3…

数据库学习记录02

DQL【数据查询语言】 1.基础查询 1.1语法 select * | {[DISTINCT] column | expression[alias], ...} from table; 特点 查询列表可以是表中的字段、常量值、表达式、函数。 查询的结果是一个虚拟的表格。 #1.查询表中的单个字段 select name from employees;#2.查询表中…

网络安全之IP伪造

眼下非常多站点的涉及存在一些安全漏洞,黑客easy使用ip伪造、session劫持、xss攻击、session注入等手段危害站点安全。在纪录片《互联网之子》(建议搞IT的都要看下)中。亚伦斯沃茨(真实人物,神一般的存在)涉…

如何构建一个高效安全的图书管理系统

文章目录 技术栈功能需求实现步骤1. 准备开发环境2. 创建项目结构3. 配置数据库4. 创建实体类5. 创建仓库接口6. 创建服务类7. 创建控制器8. 创建前端页面9. 运行项目 技术栈 前端:HTML5、CSS3、JavaScript后端:Java(Spring Boot框架&#x…