当前位置: 首页 > news >正文

OceanBase数据库

OceanBase数据库

1 默认表和分区表

建立表时默认不是分区表,需要在建表语句中通过特定语法设置才能创建分区表 ,以下是创建不同类型分区表的方式:

分区表是一种将大表的数据按照一定规则划分成多个更小、更容易管理的数据子集(即分区)的技术。

1.1 分区的目的和优势

  • 提高查询性能:
    当查询只涉及表中的部分数据时,通过分区可以快速定位到相关分区,避免扫描整个大表。例如,一张存储了多年销售记录的表,按年份进行分区后,查询某一年的销售数据,数据库只需访问对应年份的分区,减少了数据扫描范围,提升了查询速度。
  • 增强可管理性:
    大表的数据维护操作(如备份、恢复、删除历史数据等)可能会耗时较长。通过分区,可针对特定分区进行操作,提高管理效率。比如,定期删除不再需要的历史数据分区,而不影响其他分区的正常使用。
  • 数据归档和存储优化:
    可以将不同访问频率的数据存储在不同类型的存储介质上。例如,将近期频繁访问的数据放在高性能存储上,将历史低频访问的数据迁移到低成本存储上,在满足业务需求的同时,降低存储成本。

1.2 常见的分区类型

  • (1)范围分区:
    这是最常用的分区方式,按照某个列或表达式的取值范围来划分分区。例如,在订单表中,按照订单日期列进行范围分区,将每个月的数据划分到一个单独的分区中 ,创建语句示例如下:
    范围分区是依据某列或表达式的值域范围来划分分区,常见于按时间(如日期、月份)等有序数据进行分区。
CREATE TABLE orders (order_id INT,order_date DATE,customer_id INT,amount DECIMAL(10, 2)
)
PARTITION BY RANGE (order_date) (PARTITION p202401 VALUES LESS THAN ('2024-02-01'),PARTITION p202402 VALUES LESS THAN ('2024-03-01'),-- 可继续添加更多分区
);

上述语句中,PARTITION BY RANGE 指明按范围分区,后面括号内是具体的分区定义,每个 PARTITION 子句表示一个分区。

  • (2)创建列表分区表
    列表分区根据某列的具体取值来划分分区,适合数据取值较为固定、明确的场景,比如根据地区、部门等。
    例如,在员工表中,根据员工所在部门进行列表分区,假设公司有销售部、研发部、财务部等,创建语句示例如下:
CREATE TABLE employees (employee_id INT,employee_name VARCHAR(100),department VARCHAR(50)
)
PARTITION BY LIST (department) (PARTITION sales VALUES IN ('销售部'),PARTITION rnd VALUES IN ('研发部'),PARTITION finance VALUES IN ('财务部')
);

这里 PARTITION BY LIST 表明是列表分区,每个 PARTITION 子句里的 VALUES IN 指定了该分区对应的取值。

  • (3)创建哈希分区表
    哈希分区通过对某列或表达式计算哈希值,依据哈希值均匀地分布数据到各个分区,适用于数据分布需要均匀且无明显分区规则的情况,示例如下:
-- 创建一个按用户ID进行哈希分区的用户表
CREATE TABLE users (user_id INT,user_name VARCHAR(100),email VARCHAR(200)
)
-- 使用PARTITION BY HASH指定按哈希分区,分区键为user_id
PARTITION BY HASH (user_id) 
-- PARTITIONS子句指定分区数量为4
PARTITIONS 4; 

PARTITION BY HASH 说明是哈希分区方式,PARTITIONS 后面跟的数字表示创建的分区数量。

1.3 索引类型

(1)支持的索引类型
  • B-Tree 索引:这是最常用的索引类型,适用于等值查询和范围查询。例如,在一个包含用户信息的表中,对 user_id 列创建 B-Tree 索引,能加速根据 user_id 进行的查询操作。
  • 位图索引:适合于低基数列(即列中唯一值较少的情况),比如性别列(通常只有 “男”“女” 两个取值 )。位图索引可以提高涉及该列的多条件组合查询的效率。
  • 函数索引:基于函数或表达式创建的索引。当查询中经常使用某个函数或表达式对列进行计算时,创建函数索引可以避免每次查询都重复计算,提升查询性能。例如,在一个存储商品价格的表中,若经常需要查询打八折后的价格,可创建基于价格列乘以 0.8 这个表达式的函数索引。
-- 创建普通的B-Tree索引
CREATE INDEX idx_user_name ON users (user_name); -- 创建唯一索引
CREATE UNIQUE INDEX idx_unique_email ON users (email); -- 创建位图索引
CREATE BITMAP INDEX idx_gender ON users (gender); 
(2)本地索引和全局索引
  • 本地索引:
    每个分区都有自己独立的索引副本,与分区紧密关联。创建本地索引时,只需要在创建索引语句中正常指定表和列,OceanBase 会自动根据分区表结构为每个分区创建对应的索引副本。
    语法:
-- 假设orders表是分区表,按order_date进行范围分区
-- 创建基于order_date列的本地索引(名字:idx_order_date_local)
CREATE INDEX idx_order_date_local ON orders (order_date); 

OceanBase 会为 orders 表的每个分区都创建一个关于 order_date 列的索引

  • 删除某个分区索引
DROP INDEX idx_order_date_local ON orders;
  • 全局索引:
    独立于分区存在,跨所有分区维护索引信息。创建全局索引时,需要使用 GLOBAL 关键字来明确指定。
-- 假设orders表是分区表,按order_date进行范围分区
-- 创建基于customer_id列的全局索引
CREATE INDEX idx_customer_id_global ON orders (customer_id) GLOBAL; 
(3)已有普通表转换为分区表

如果已经存在普通表,也可以通过 ALTER TABLE 语句将其转换为分区表,但这要求表中数据符合转换后的分区规则。例如,要将已有的 orders 表转换为按 order_date 范围分区的表,可以这样操作:

-- 假设orders表已有数据且包含order_date列
ALTER TABLE orders 
-- 重新定义表结构,转换为范围分区表
PARTITION BY RANGE (order_date) (PARTITION p2023 VALUES LESS THAN ('2024-01-01'), PARTITION p2024 VALUES LESS THAN ('2025-01-01') 
);

1.4 删除索引

(1)删除分区后,分区表上的索引也会删除

(2)删除分区后,建立在分区表上的全局索引会失效,不会删除

  • 删除全局索引并重新创建索引
-- 1. 删除全局索引,假设全局索引名为 idx_global_prp_claimgather_info(需替换为实际索引名)
DROP INDEX idx_global_prp_claimgather_info ON prp_claimgather_info;-- 2. 删除分区
ALTER TABLE prp_claimgather_info DROP PARTITION p202412;-- 3. 重新创建全局索引
CREATE INDEX idx_global_prp_claimgather_info ON prp_claimgather_info (column1, column2,...)  -- 替换为实际索引列
GLOBAL;
  • 重建失效索引
    若无需修改索引定义,更高效的方式是直接重建失效的全局索引,而非删除后重建。语法如下:
ALTER INDEX index_name REBUILD GLOBAL;

可通过以下语句确认索引状态(是否失效):

SELECT index_name, status FROM user_indexes WHERE table_name = 'TABLE_NAME';

1.5 单节点、集群部署、租户

  • OceanBase 是蚂蚁集团自主研发的分布式关系型数据库,支持高可用、强一致性,可部署为单节点(测试 / 开发环境常用)或多节点集群(生产环境常用,保证高可用)
  • 一个节点可有多个租户
    含义:在 OceanBase 的单节点部署中,一个物理节点(服务器)可以创建多个 “租户”。:
    租户是 OceanBase 的核心概念,类似传统数据库中的 “实例”,是资源隔离的基本单位。每个租户有独立的用户、数据库、表空间等,可分配不同的 CPU、内存、存储资源。
    多租户设计让 OceanBase 能在单一物理节点或集群上为多个业务(或环境)提供隔离的数据库服务,提高资源利用率。

1.6 数据库版本

社区版和企业版(企业版一般会有 Enterprise 字眼)
通过

select version()

命令查询到数据库版本为5.7.25-OceanBase-v4.2.1.6,且版本中不含 “Enterprise”(企业版标识),因此判断为社区版;同时说明该 OceanBase 实例兼容 MySQL 5.7.25 协议;

ps -ef|grep observer

是用于查看 OceanBase 核心进程 “observer” 是否运行的命令

  • 协议兼容:
    OceanBase 支持兼容 MySQL、Oracle 等主流数据库协议,这里兼容 MySQL 5.7.25 协议意味着可以使用 MySQL 的客户端、JDBC 驱动等工具连接和操作 OceanBase,降低迁移成本。

1.7 java连接oceanbase

java使用mysql jdbc连接OceanBase数据库 用户名:用户名@租户名#集群名

java使用mysql jdbc连接OceanBase数据库    用户名:用户名@租户名#集群名datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://10.36.0.85:2883/picc_xwlp?useUnicode=true&characterEncoding=UTF-8&useSSL=falseusername: xwlp_claim@*****6_zh#ob_test_btx_20240416password: f7^Kd4%$L    

用户名:xwlp_claim


文章转载自:
http://commie .hnsdj.cn
http://assault .hnsdj.cn
http://easterner .hnsdj.cn
http://identical .hnsdj.cn
http://nomism .hnsdj.cn
http://perceptible .hnsdj.cn
http://maneuver .hnsdj.cn
http://hepatopexy .hnsdj.cn
http://eater .hnsdj.cn
http://carbene .hnsdj.cn
http://woodpie .hnsdj.cn
http://candock .hnsdj.cn
http://incisal .hnsdj.cn
http://backstage .hnsdj.cn
http://pudibund .hnsdj.cn
http://blenny .hnsdj.cn
http://kicker .hnsdj.cn
http://volos .hnsdj.cn
http://tutoyer .hnsdj.cn
http://gadzooks .hnsdj.cn
http://zhdanovism .hnsdj.cn
http://ptomain .hnsdj.cn
http://nuclease .hnsdj.cn
http://ddvp .hnsdj.cn
http://haplobiont .hnsdj.cn
http://hypopnea .hnsdj.cn
http://inferable .hnsdj.cn
http://jumby .hnsdj.cn
http://hessonite .hnsdj.cn
http://canutism .hnsdj.cn
http://www.dtcms.com/a/293967.html

相关文章:

  • 如何在macOS上修改iPhone的定位
  • Qt 自定义控件开发方法与实践
  • cx_Freeze python 打包详解
  • Qt 数据QByteArray与QString处理与转换全指南
  • QT的moveToThread 用法
  • Java按模板导出Excel
  • LoRA 低秩矩阵实现参数高效的权重更新
  • 2025 ACT 汽车功能安全相关PPT分享
  • 《计算机网络》实验报告七 HTTP协议分析与测量
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题汇总版,持续更新学习,加油!!!
  • 场效应管和模电的关于、学习
  • 【盘古100Pro+开发板实验例程】FPGA | Modelsim 的使用和 do 文件编写
  • SpringBoot 使用Rabbitmq
  • rust嵌入式开发零基础入门教程(一)
  • FSHNet:高效目标检测新突破
  • rust嵌入式开发零基础入门教程(五)
  • Python应用指南:构建和获取全球地铁线路数据及可视化
  • HarmonyOS学习记录5
  • 【形态学变换】——图像预处理(OpenCV)
  • (nice!!!)(LeetCode 每日一题) 1717. 删除子字符串的最大得分 (贪心)
  • 昨天去看了电科金仓的发布会,有点东西!
  • AI营销核心技术解析:运作机制与行业应用实例
  • 【软件系统架构】系列七:嵌入式系统性能深入解析
  • 华为云中,列表中的镜像无法删除可能由多种原因导致
  • 华为云开发者空间 × DeepSeek-R1 智能融合测评:云端开发与AI客服的协同进化
  • WPF的一些基础知识学习记录
  • 设计模式 八:原型模式 (Prototype Pattern)
  • Spring Boot全局异常处理:一网打尽Controller层异常,@RestControllerAdvice解析
  • 设计模式(单例)
  • 界面组件DevExpress WPF中文教程:Grid - 如何过滤节点?