OceanBase使用规范

这篇具有很好参考价值的文章主要介绍了OceanBase使用规范。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

规约制定背景:

降低故障率和维护成本

适用范围:

所有使用OceanBase的数据库文章来源地址https://www.toymoban.com/news/detail-821097.html

【分区表设计建议】

  1. 关于分区表创建时的注意事项。
    。 单表行数可能超过10亿行或者单表容量超过200GB,推荐进行创建分区表。
    。如果预计三年后的数据量根本达不到这个级别,请不要在创建表时使用分区表。
  2. 分区表在表创建的时候需要指定,后续不支持将非分区表在线改造成分区表,也不支持分区数量、分区类型、分区键值的在线调整。
  3. 分区表的主键和约束注意事项。
    。建分区表时,表上的每一个主键、唯一键所对应的字段里都必须至少有一个字段包含在表的分区键字段中。
    。分区表中的全局唯一性建议能通过主键实现的都通过主键3实现。
    。分区表的唯一索引必须包含表分区的拆分键。
  4. 关于分区策略,推荐从表的实际用途和应用场景方面进行设计
    。实际用途:历史表,流水表。
    。应用场景:存在明显访问热点的表。
  5. 关于分区键的选择,使用分区表时要选择合适的拆分键以及拆分策略。
    。hash分区:选择区分度较大、在查询条件中出现频率最高的的字段作为hash分区的分区键。
    。range和list分区:根据业务规则选择合适的字段作为分区健,但分区数量不宜过少。示例:如果是日志类
    型的大表,根据时间类型的列做range分区。
    key分区:定义分区数时,需要选择质数个分区数,来协助数据分布均匀。
    。Range分区:最后一列不能是maxvalue。
  6. 关于分区的使用限制:hash分区下,不适合基于分区字段进行范围查询。

【建表规约】

  1. 【强制】表必须定义主键,默认为ID,整型自增,如果不采用默认设计必须咨询DBA进行设计评估
  2. 【强制】建表时统一创建好主键。说明:OB主键暂不能修改
  3. 建议分区表的主键设置为(分区键,id),再加一个global的唯一索引(id,分区键)[OB的实现机制决定的]
  4. 【强制】多表中的相同列,必须保证列定义一致
  5. 【强制】表达是与否概念的字段,数据类型是unsigned tinyint(1表示是是,0表示否),值的内容要统一。正例:表达逻辑删除的字段名is_deleted,1表示删除,0表示未床删除。
  6. 【强制】表名、字段名必须使用小写字母或数字。禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,所以字段名称需要慎重考虑。
  7. 【强制】禁用保留字,如desc、range、match、delayed等
  8. 【强制】唯一索引名为uniq_字段名;普通索引名则为idx_字段名。说明:uniq_即unique key;idx_即index的简称
  9. 【强制】小数类型为decimal,禁止使用float和double。
  10. 【强制】禁止使用外键,触发器,存储过程
  11. 【强制】所有的字符存储与表示,均以utf8mb4编码
  12. 【推荐】库名与应用名称尽量一致,表的命名最好能够清晰明了的表达表的作用,推荐使用"业务名称_表的作用"的命名方式
  13. 【推荐】如果修改字段含义或对字段表示的状态追加时,需要及时更新字段注释。
  14. 【推荐】字段允许适当冗余,以提高性能,但是必须考虑数据同步的情况。冗余字段应遵循:1)不是频繁修改的字段2)不是varchar超长字段
  15. 【强制】单分表行数可能超过10亿行或者单分表容量超过2000GB,才推荐进行分区表。说明:如果预计三年后的数据量根本达不到这个级别,请不要在创建表时使用分区表
  16. 【参考】合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。正例:无符号值可以避免误存负数,且扩大了表示范围

【索引规约】

  1. 【推荐】利用覆盖索引来进行查询操作,来避免回表操作。说明:索引中包含查询条件字段和结果集字段
  2. 【强制】【适用OB】索引修改流程为:先新建索引待新索引生效后后,确保旧索引无用再删除反例:idb直接修改索引;刚新建了最优索引,重复索引马上变更去删掉
  3. 【强制】索引建立需满足最左前缀原则
  4. 【强制】超过三个表禁止join。需要join的字段,数据类型保持绝对一致;多表关联查询时,保证被关联的字段需要有索引。说明:即使双表join也要注意表索引、SQL性能。
  5. 【强制】页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎擎来解决。说明:索引文件具有B-Tree的最左前缀匹配特性,如果左边的值未未确定,那么无法使用此索引。
  6. 【推荐】如果有order by的场景,请注意利用索引的有】序性。order by最后的字段是组合索引的一部分,并且放在索引组合顺序的最后,避免出现file_sort的情况,影响查询性能。正例:where a=? and b=? order by c;索引:a_b_c。反例:索引中有范围查找,那么索引有序性无法利用,如:WHEREa>10 ORDERBYb;索引a_b无法排序。
  7. 【推荐】建组合索引的时候,区分度最高的在最左边。
    正例:如果where a=? and b=?,a列的几乎接近于唯一值,那么只需要单建idx_a索引即可。说明:存在非等号和等号混合判断条件时,在建索引时,请把等号条件的列前置。如:where a>? and b=?那么即使a的区分度更高,也必须把b放在索引的最前列。

【SQL规约】

  1. 【强制】禁止使用非同类型的列进行等值查询。说明:如字段类型为varchar,where条件中字段内容为int,存在隐式转换问题,无法走索引近而可能拖垮数据库
  2. 【强制】orderby查询语句中,orderby的字段必须唯一或者组合唯一(非唯一字段排序,OB与MySQL表现不一致)
  3. 【强制】不要使用count(列名)或count(常量)来替代count(),ccount()就是SQL92定义的标准统计行数的语法,跟数据库无关,跟NULL和非NULL无关。说明:count(*)会统计值为NULL的行,而count(列名)不会统计此列为NULL值的行
  4. 【强制】不得使用外键与级联,一切外键概念必须在应用层解解决。说明:外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。
  5. 【强制】禁止使用跨库查询
  6. 【强制】禁止使用子查询,改为关联查询
  7. 【强制】禁止核心业务流程SQL包含:计算操作、多表关联、表遍历casewhen等复杂查询,建议拆分成单表简单查询
  8. 【强制】对于查询条件过滤性差的SQL,SQL绑定执行计划。说明:MySQL采用force index方式 OB采用hint/+index(tb tb_ix)/
    打标签:Select/+aaaa/*from aa;
  9. 【推荐】优化超多分页场景
    正例1:根据唯一键
    select * from tb where c1 = " and c2 = “and id > " limit100;保留每100条的最后一个id为下100条的条件值(c1、c2、id建联合索引)
    注意:
    a.适用于数据分布较均匀,如果查询1页100条的数据代价为扫描几万或几十万性能不会到理想预期
    b.适用不加其他条件只根据id分页捞全表(select*from tb where id >” limit 100;)
  10. 【推荐】【适用OB】in操作能避免则避免,若实在无法避免需要仔细评估in后边的集合元素数量,控制在100个之内,注意in最大个数8192,否则报错size overflow
  11. 【推荐】【适用OB】在业务cache表场景中,比如频繁insert/cdelete,数据生命周期较短的场景,需要添加HINT指定查询
  12. 【参考】删除或更新SQL需优化,核心规则是粒度尽量小(不大于100条)且where条件需索引优化
    正例:先分页捞取数据,后根据id=等值条件或in范围条件进行删除除或更新覆盖SQL整个生命周期的稳定性治

到了这里,关于OceanBase使用规范的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何使用蚂蚁集团自动化混沌工程 ChaosMeta 做 OceanBase 攻防演练?

    当前,业界主流的混沌工程项目基本只关注如何制造故障的问题,而经常做演练相关工作的工程师应该明白,每次演练时还会遇到以下痛点: 检测当前环境是否符合演练预设条件(演练准入); 业务流量是否满足(流量注入); 注入后判断故障效果是否符合预期(故障度量

    2024年02月09日
    浏览(37)
  • 【实战】OceanBase之OMS迁移Oracle至oceanbase

    背景 最近公司因为需要做Oracle2OceanBase的数据迁移后做测试,但是数据接近2T,对于超大数据表的迁移使用ETL工具,效率太慢了。综合考虑使用OMS,以下是做数据迁移的具体步骤,给大家提供一些借鉴。 把源端和目标端添加进去,源断是Oracle_ods,目标端是oceanbase_ods 选择好源

    2024年02月08日
    浏览(40)
  • 【oceanbase】centos7/kylinv10部署oceanbase(x86版本)

    1. 修改系统​ vim /etc/sysctl.conf fs.file-max = 102400 net.nf_conntrack_max = 1024000 net.netfilter.nf_conntrack_max = 1024000 2. 修改 ulimit 的 open file,系统默认的 ulimit 对文件打开数量的限制是 1024 vim /etc/security/limits.conf # 加入以下配置,重启即可生效 * hard nofile 102400 * soft nofile 102400 3. 资源下载: o

    2024年02月07日
    浏览(49)
  • 「OceanBase 4.1 体验」OceanBase:解读领先的分布式数据库系统,功能与体验全解析

    本文旨在介绍 OceanBase 4.1 版本的特点、更新内容和初体验,帮助读者了解和掌握这个开源分布式关系型数据库管理系统。如果你对大规模数据存储和处理的挑战感兴趣,或者正在寻找一种满足互联网领域高并发、高可靠性和高扩展性要求的数据库解决方案,本文将为你提供有

    2024年02月05日
    浏览(52)
  • OceanBase集群部署

    我认为学习一个中间件比较好的方式是,先了解它的架构和运行原理,然后动手部署一遍,加深对它的了解,再使用它,最后进行总结和分享 本篇介绍OceanBase部署前提条件和集群部署 1.使用开源免费的社区版,企业版需要付费 社区版目前最新是V4.2.1_CE_BP3,它们之间的差异请

    2024年01月19日
    浏览(54)
  • OceanBase写入限速源码解读

    OceanBase中的写入限速机制旨在控制系统中写入操作(一般写入操作包括插入、更新和删除等)的速率,目的是为了提高数据库系统的稳定性。本文主要通过以下2个参数来解释写入限速的实现机制。 **1.**writing_throttling_trigger_percentage:设置写入速度的阈值百分比。当内存使用达

    2024年02月03日
    浏览(36)
  • OceanBase集群扩缩容

    ​ OceanBase 数据库采用 Shared-Nothing 架构,各个节点之间完全对等,每个节点都有自己的 SQL 引擎、存储引擎、事务引擎,天然支持多租户,租户间资源、数据隔离,集群运行的最小资源单元是Unit,每个租户在每个节点上只会运行一个Unit。 先看看集群整体架构图,下面集群的

    2024年01月21日
    浏览(46)
  • OceanBase架构概览

    了解一个系统或软件,比较好的一种方式是了解其架构,下图是官网上的架构图,基于V 4.2.1版本 OceanBase 使用通用服务器硬件,依赖本地存储,分布式部署在多个服务器上,每个服务器都是对等的,数据库内的 SQL 执行引擎具有分布式执行能力,每台服务器上运行一个observe

    2024年01月17日
    浏览(43)
  • OceanBase集群技术架构

    本文章学习自OceanBase官方培训资料,仅供学习、交流 分区 当一个表很大的时候,可以水平拆分为若干个分区,每个分区包含表的若干行记录。根据行数据到分区的映射关系不同,分为hash分区,List分区(按列表),range分区(按范围)等 每一个分区,还可以用不同的维度再分

    2024年01月20日
    浏览(53)
  • OceanBase基础概念

    一个集群由多个Zone组成,给集群内的一批机器打上同一个tag,则属于同一个Zone 不同的Zone可以对应不同城市、一个城市的不同机房、或者一个机房的不同机架 Zone个数=3,建议是奇数 每个zone均有且只有一份完整的副本;单Zone的故障不影响业务 每台OBServer相对独立,有独立计

    2024年01月21日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包