全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
OceanBase 测试工具测试工具 1 测试概述测试概述 验证整个 OceanBase 系统和各个 server 在一定压力下是否工作正常 数据是否一 致 连续测试数天 add cell update cell insert row delete row 达到 100 亿次 get scan 达到 1000 亿次 总数据量达到 T 级别 完全随机测试 对多个 table 多线程随机 add cell update cell insert row delete row 多线程随机 get 或 scan 单列 多列 单行 或多行 持续不断地对 get 和 scan 的结果根据规则进行验证 即使 CS 在做合并或是迁移 或是 schema 发生改变 测试工具正常工作 2 功能介绍功能介绍 将 OceanBase 系统作为一个黑盒进行数据一致性测试 包括功能测试和高并发 高负载压力测试 即可以对 OceanBase 系统进行测试 也可以对单个服务器进行测试 对 OceanBase 系统主要测试 add cell update cell insert row delete row get 和 scan 接口 这些测试都是以验证数据一致性为基础 测试的规则可以配置 即可以测试复杂的规则集合 也可以选择测试单个简单规 则 同时也可以配置相对复杂的规则用于长时间压力测试 当不需要数据一致性验证时 该工具可以用于产生 benchmark 测试的负载 该工具可以同时在多个客户机上运行多个进程 确保能提供足够负载 3 概要设计概要设计 该工具的主要设计思想是根据规则和辅助列来验证高并发 高压力下的数据一致性 我们规定每个 table 的原始列和辅助列成对出现 利用 OceanBase 处理每个请求的原子性 在一个请求中更新原始列和辅助列 保证多线程更新原始列和辅助列的原子性 辅助列与 原始列为互为相反数的关系 多线程随机在同一请求中读取原始列和辅助列 并比较二者 是否互为相反数 如果互为相反数 校验成功 否则数据不一致 3 1schema 规则规则 schema 中原始列和辅助列必须一一对应 数据类型相同 column id 相差 1000 当 schema 发生变化时 也必须保证该规则成立 原始列用于存储实际的列数据 辅助列用于 存储原始列数据 int 或是 hash 值 int 以外的类型 的相反数 测试工具并不关心每列 的数据类型 测试工具能处理在 ObObj 中定义的所有数据类型 注意 两个特例 create time 和 modify time 类型的列没有辅助列 因为这两种类型不 允许修改 Float 和 double 类型的列的辅助列仍为 float 或 double 类型 辅助列的值与原始 列相同 应为 float 和 double 的精度问题 不能使用相反数进行校验 为了简化测试工具的设计 限制一个 schema 中只能包含一个宽表和一个 join 表 如有 支持多个宽表和多个 join 表的需求 以后再做扩展 Schema 举例 jtable table id 1001 table type 1 column info 0 2 join int int column info 0 3 join str varchar column info 0 1002 expected join int int column info 0 1003 expected join str int rowkey split 0 rowkey max length 8 wtable table id 1002 table type 2 column info 1 2 wtable int int column info 1 3 join int int column info 1 4 wtable str vchar column info 1 5 join str vchar column info 1 1002 expected wtable int int column info 1 1003 expected join int int column info 1 1004 expected wtable str int column info 1 1005 expected join str int join rowkey 8 15 jtable join int joint int expected join int expected joint int join str join str expected join str expected join str rowkey split 8 rowkey max length 16 该 schema 中定义了两张表 wtable 和 jtable wtable 中有 4 个原始列 分别为 wtable int wtable str join int 和 join str 其中 join int 和 join str 来自 jtable Wtable 中 有 4 个辅助列 分别为 expected wtable int expected wtable str expected join int 和 expected join str 其中 expected join int 和 expected join str 来自 jtable Jtable 中有 2 个 原始列 分别为 join int 和 join str 另外 jtable 中还有 2 个辅助列 分别为 expected join int 和 expected join str Wtable 的 rowkey 长度为 16 字节 jtable 的 rowkey 为 8 字节 wtable 的 rowkey 的后 8 个字节作为 join 的外键 CS 中会存放两张静态表 一张宽表 一张 join 表 这两张表的静态数据由数据生成工 具生成 数据生成工具用 gen sstable 3 2rowkey 规则规则 宽表的 rowkey 共 16 字节 由两部分组成 分别为 perfix 和 suffix 各占 8 个字节 suffix 为 join 表的 rowkey 占 8 个字节 Prefix 和 suffix 都用一个从 0 开始递增的 int64 t 来 表示 假设宽表中 rowkey 全为 0 的行中的前两列分别存储了 perfix 当前已写入的最大值和 suffix 当前已写入的最大值 通过 prefix 和 suffix 就可以知道在 CS 中存储的所有数据的 rowkey 范围 当测试工具启动时 会首先读取宽表中 rowkey 全为 0 的行的前两列 获得当前已写入 的 prefix 和 suffix 并存为全局变量 当向宽表中 insert 了新的 prefix 会原子增加 prefix 的 值 同样 如果向 join 表中添加了新的行 也需要原子递增 suffix 从而使测试工具在任何 时候都能得到当前系统的宽表和 join 表的 rowkey 范围 在测试工具退出时 可以将宽表中 rowkey 全为 0 的行更新到宽表中 以便下次接着测试 注意 原子递增 prefix 或是 suffix 并不是每次都是递增 1 而是根据启动的测试工具 的数量来决定的 比如需要启动 10 个测试工具 则原子递增的步长为 10 这是因为宽表 中存储的 prefix 和 suffix 是静态 CS 中表的 rowkey 范围 不会被修改 每个测试工具进程都 会读取到相同的静态 prefix 和 suffix 为了多个测试工具进程不会产生相同的 prefix 和 suffix 所以每个测试工具进程都有一个初始编号 假设需要启动 10 个测试工具进程 编 号为 1 的进程添加的第一个 prefix 为 org prefix 1 第二个 prefix 为 org prefix 1 10 第 n 个 prefix 为 org prefix 1 10 n 1 用于 insert 操作的宽表 rowkey 前缀使用当前已写入的 prefix 递增的方式产生 suffix 随 机选择一个在 join 表中当前已写入的 suffix 用于 add update delete 和 get 操作的宽表 rowkey 的 prefix 从当前已写入的 prefix 范围中随机选择一个 suffix 从当前已写入的 suffix 范围中随机选择一个 用于 insert 操作的 join 表的 rowkey 使用当前已写入的 suffix 递增的方式产生 用于 add update delete 和 get 操作的 join 表的 rowkey 从当前已写入的 suffix 范围中随机选择 一个 用于 scan 操作的宽表 rowkey 范围直接在当前已写入的 prefix 中随机选取 用于 scan 操作的 join 表的 rowkey 范围直接在当前已写入的 suffix 中随机选取 3 3操作数据和操作类型生成操作数据和操作类型生成 支持的操作包括 add cell update cell insert row delete row delete cell get 和 scan 根据各个操作的比例来随机选择执行那种操作 如果操作比例没有配置 将会操作 随机产生操作 1 Add cell 产生一个随机数作为需要操作的 cell 数量 m 接着产生一个随机数作为每个 cell 需 要 add 的次数 n 然后随机选择宽表或是 join 表中的 int 列 将每个 int 原始列添加 n 个加 1 的 add 操作 并将每个 int 辅助列添加一个减 n 的 add 操作 注意 随机产生的 rowkey 可能不存在 OceanBase 系统能处理这种情况 2 Update cell 产生一个随机数作为需要操作的 cell 数量 m 然后随机选择宽表或是 join 表中的任 意 m 个原始列 根据原始列的 type 随机产生 update 数据 同时用 rowkey 的前 8 个字 节转化成 int64 t 后与原始列数据 int 或是 hash 值 int 以外的类型 的差值 update 每个原始列对应的辅助列 注意 随机产生的 rowkey 可能不存在 OceanBase 系统能处理这种情况 另外宽 表中相关的 join 字段是不能更新的 UPS 已经限制了这种操作 这里是故意为之 检 查系统是否工作正常 3 Insert row 产生一个随机数作为需要 insert row 的数量 m 然后随机选择宽表或是 join 表中的 任意 m 个新的 rowkey 根据 schema 中的 table 信息 根据各列的 type 随机生成数据 填充相应的原始列 使用 rowkey 的前 8 个字节转化成 int64 t 后与原始列数据 int 或是 hash 值 int 以外的类型 的差值填充辅助列 注意 insert row 必须成功 4 Delete row 产生一个随机数作为需要 delete row 的数量 m 然后随机选择宽表或是 join 表中的 任意 m 个 rowkey 执行删除操作 注意 随机选择的 rowkey 可能不存在 尽量控制执行 delete row 的操作比例 尽 量少删除 join 表中的 row 在我们的测试中可能 join 表的行数量比宽表行数量少得多 所以尽量删除宽表的 row 5 Delete cell update cell null 产生一个随机数作为需要操作的 cell 数量 m 然后随机选择宽表或是 join 表中的任 意 m 个原始列 将 m 个原始列和对应的辅助列设成 ObNullType 注意 随机产生的 rowkey 可能不存在 OceanBase 系统能处理这种情况 6 Get 产生一个随机数作为需要 get 的 cell 数量 m 然后随机选择宽表或是 join 表中的任 意 m 个原始列和辅助列 当然 get 也可以随机选择读取整行 对 get 成功返回的列 校验原始列数据 int 或是 hash 值 int 以外的类型 加上辅助列的值是否为 0 如 果原始列为 ObNullType 则校验辅助列是否为 0 注意 get 的 row 或是 cell 可能不存在 7 Scan 产生一个随机数作为需要 scan 的 rowkey 数量 m 然后随机选择宽表或是 join 表中 的任意连续 m 个 prefix 或是 suffix 组装成 rowkey 的范围 执行 scan 操作 见返回的 每列数据 校验原始列数据 int 或是 hash 值 int 以外的类型 加上辅助列的值是 否为 0 如果原始列为 ObNullType 则校验辅助列是否为 ObNullType 3 4随机混入错误随机混入错误 在以上的操作类型生成中已经随机混入了错误 比如 row not exist null cell 更新宽 表中的的 join 列等等 3 5数据验证数据验证 数据验证相对简单 只需要将 get 或是 scan 返回的数据 校验原始列数据 int 或是 hash 值 int 以外的类型 加上辅助列的值是否为 0 如果原始列为 ObNullType 则校验辅 助列是否为 0 对 create time modify time float 和 double 类型的列需要做特殊处理 对每种写操作都分为 valid 和 invalid 两种类型 对 valid 的操作 必须成功 如果操作 不成功 则有问题 如果为 invalid 操作 结果必
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 销售合同审核与签订标准化流程降低风险
- 2025企业设施管理的合同
- 2024-2025学年新教材高中化学 第七章 有机化合物 3.1 乙醇说课稿 新人教版必修2
- 2025合同模板电子产品代理销售合同范本
- 2025建筑材料供货合同
- 2025合作合同协议书(模板)
- 2025企业合作印刷产品加工承揽合同
- 2025年辣椒种植合作协议模板
- 一建工程考试题目及答案
- 银行专业考试题库及答案
- 2025衢州市市级机关事业单位第三期编外招聘39人笔试考试参考试题及答案解析
- 人教版八年级上册生物第五单元第一章综合实践项目 设计并制作生态瓶
- 山西某污水处理厂投资估算编制分析
- 2025全国医疗应急能力培训系列课程参考答案
- 敦煌的艺术智慧树知到答案章节测试2023年
- 病人心理与心理护理课件
- 传输专业常用仪表
- 火力发电-锅炉本体课件
- 自然地理学-第五章-地貌精课件
- 楚航无人船水域测量机器人系统介绍课件
- DBJ∕T 15-197-2020 高大模板支撑系统实时安全监测技术规范
评论
0/150
提交评论