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

高性能数据库架构探索:OceanBase 分布式技术深入解析

高性能数据库架构探索:OceanBase 分布式技术深入解析

简介

在这里插入图片描述

OceanBase 高性能分布式数据库,解决传统数据库在大规模、高并发场景下的性能瓶颈,通过分布式架构、数据自动分片和强一致性协议,提供高可用性、弹性扩展和出色的性能,支持 MySQL 和 Oracle 兼容模式,方便开发者迁移现有应用

OceanBase官网

OceanBase操作文档

OceanBase社区版Docker安装流程

前期准备

1、Docker安装

yum install -y docker-ce

2、Docker启动并设置开机自启动

systemctl start docker
systemctl enable docker

3、关闭防火墙和SELinux

systemctl disable firewalld 
systemctl stop firewalld
systemctl status firewalld
setenforce 0
OceanBase安装

1、拉取 OceanBase 数据库最新镜像

docker pull oceanbase/oceanbase-ce

在这里插入图片描述

2、查看是否拉取成功

docker images

在这里插入图片描述

3、启动OceanBase数据库实例

  • 根据当前容器部署最大规格实例
docker run -p 2881:2881 --name obstandalone -e MODE=NORMAL -e OB_TENANT_PASSWORD=1234 -d oceanbase/oceanbase-ce

在这里插入图片描述

  • -p 2881:2881:将宿主机的 2881 端口映射到容器内的 2881 端口
  • --name obstandalone:指定容器名称为 obstandalone,方便管理和识别这个容器实例
  • -e MODE=NORMAL:设置环境变量 MODENORMAL,指定OceanBase运行模式
  • -e OB_TENANT_PASSWORD=1234:设置环境变量 OB_TENANT_PASSWORD,默认租户 root 用户密码设置为 1234

4、查看是否启动成功

docker ps
docker logs obstandalone | tail -1

在这里插入图片描述

5、连接 OceanBase数据库实例,进入Docker容器

docker exec -it obstandalone bash

在这里插入图片描述

6、连接集群

obclient -h172.17.0.2 -P2881 -uroot -Doceanbase -A

在这里插入图片描述

  • 查看当前数据库
SELECT DATABASE();

在这里插入图片描述

  • 列出所有数据库
SHOW DATABASES;

在这里插入图片描述

  • 插入数据
INSERT INTO table_name (id, name) VALUES (1, '名字');
  • 删除数据
DELETE FROM table_name WHERE id = 1;
  • 更新数据
UPDATE table_name SET name = '新名字' WHERE id = 1;
  • 查询数据
SELECT * FROM table_name;

租户隔离

租户隔离允许多个租户共享同一个数据库实例,确保每个租户数据、权限、资源等完全独立,拥有自己独立数据库环境,逻辑上互不干扰,提供强隔离性和安全性

1、创建一个新租户 tenant1

CREATE TENANT tenant1;

2、租户下创建数据库,tenant1 租户下创建一个数据库db1

CREATE DATABASE db1;

3、租户内创建表,db1创建表 orders

USE db1;
CREATE TABLE orders (order_id INT PRIMARY KEY,user_id INT,amount DECIMAL(10, 2),order_date DATE
);

4、查询当前租户信息

SHOW TENANTS;
应用场景:SaaS 平台多租户架构

开发 SaaS 平台时,平台为不同的客户提供基于云的服务,每个客户数据、业务逻辑和配置完全不同,因此需要对每个客户数据进行隔离

1、每个客户创建一个独立的租户, 每个客户业务将被分配到一个独立的租户,可以保证客户之间的数据不会互相影响

CREATE TENANT tenant_customer1;
CREATE TENANT tenant_customer2;

2、租户内创建数据库和表,每个租户内数据库、表结构等是完全独立的,不同客户的数据无法交叉(每个租户的数据和资源完全独立,客户1无法访问客户2的数据,且租户1的负载不会影响租户2的性能)

-- 在租户1下创建数据库与表
CREATE DATABASE customer1_db;
USE customer1_db;
CREATE TABLE orders (order_id INT PRIMARY KEY, customer_id INT, amount DECIMAL(10, 2));-- 在租户2下创建数据库与表
CREATE DATABASE customer2_db;
USE customer2_db;
CREATE TABLE orders (order_id INT PRIMARY KEY, customer_id INT, amount DECIMAL(10, 2));

3、另外还可以按需扩展每个租户资源, 根据不同租户的需求,可以动态调整租户的资源(存储空间、计算资源等)提高系统的灵活性

obd resource set tenant_customer1 --cpu 4 --memory 8GB;

租户快照

租户快照用于数据备份与恢复,可以对某个租户数据库进行快照,确保在任何时候可以安全地恢复到某个历史时间点,可以用来应对系统故障、操作错误等问题,快速恢复数据

1、创建租户快照(创建快照后,OceanBase 会记录该时间点数据状态)

obd snapshot create tenant_customer1 --snapshot_name snapshot_2024_11_12 --desc "init"
  • tenant_customer1:租户名称
  • snapshot_2024_11_12:指定快照名称
  • --desc:提供快照描述

2、查看租户快照,列出 tenant_customer1 租户所有快照

obd snapshot list tenant_customer1

3、 恢复租户快照

obd snapshot restore tenant_customer1 --snapshot_name snapshot_2024_11_12
  • tenant_customer1:需要恢复的租户名称
  • snapshot_2024_11_12:需要恢复的快照名称

4、删除租户快照

obd snapshot delete tenant_customer1 --snapshot_name snapshot_2024_11_12

生产环境中,租户快照可以用来在发生数据库故障、操作错误、误删除数据等情况时进行恢复。例如,开发团队在进行系统升级时,误操作导致数据丢失,可以通过恢复之前创建的快照来快速恢复数据,避免影响到业务

物化视图

物化视图工作原理类似于缓存机制,会定期或在指定条件下更新视图的内容,开发者在创建物化视图时,可以指定视图的数据更新方式,比如定时更新或增量更新等

特性普通视图物化视图
数据存储方式不存储数据,只是一个查询定义存储查询结果,实际持久化数据
数据更新方式每次查询时都重新计算定期或根据条件更新存储的结果
查询性能查询时每次都执行计算直接读取存储的结果,查询速度较快
数据一致性保持实时一致性,每次查询返回最新数据需要定期更新,可能存在延迟与不一致的情况

OceanBase 中,物化视图是通过 CREATE MATERIALIZED VIEW 语句来创建,支持在查询中定义物化视图,优化大数据量查询场景,尤其是在数据量庞大的时候,能有效提高查询性能

1、创建物化视图

  • 创建了一个物化视图 mv_sales_summary,该视图将存储每个 product_id 的销售总金额 total_sales 和销售数量 sales_count汇总数据
CREATE MATERIALIZED VIEW mv_sales_summary
AS
SELECT product_id, SUM(amount) AS total_sales, COUNT(*) AS sales_count
FROM sales
GROUP BY product_id;

2、更新物化视图

  • 完全刷新:更新整个视图数据,适用于数据变动较大的场景
  • 增量刷新:只更新变动部分的数据,适用于数据变动较小的场景
CREATE MATERIALIZED VIEW mv_sales_summary
AS
SELECT product_id, SUM(amount) AS total_sales, COUNT(*) AS sales_count
FROM sales
GROUP BY product_id
WITH PRIMARY KEY (product_id)
ENABLE ROW MOVEMENT;

3、查询物化视图

SELECT * FROM mv_sales_summary WHERE product_id = 101;

4、管理物化视图

  • 删除物化视图
DROP MATERIALIZED VIEW mv_sales_summary;
  • 查看物化视图的状态
SELECT * FROM all_mviews WHERE mview_name = '视图名字';

项目开发中,物化视图常用于处理复杂查询的性能优化场景,比如在电商平台的数据分析中,可能需要频繁查询某个商品的总销售额、销售数量等聚合数据,如果每次查询时都从大量原始订单数据中重新计算这些指标,会导致查询性能低下,影响用户体验,这种情况下可以使用物化视图将这些聚合结果预计算并存储,避免每次查询都进行重复计算,提高查询效率。

同时,物化视图可以定期刷新或增量更新,确保数据的时效性和准确性,通过这种方式,项目中的分析报告、实时统计等功能可以更加高效地执行,提升系统整体性能。

总结

在这里插入图片描述

高性能数据库架构 OceanBase 数据库,从开发者角度来看,租户隔离技术实现多租户环境下的数据独立与安全,避免了不同业务之间的干扰,适用于SaaS平台、电商网站等场景, 通过隔离不同租户的数据,帮助开发者有效管理和维护每个租户的资源;租户快照可以帮助开发者轻松地创建数据快照并进行恢复,确保系统的高可用性,在金融、医疗等行业避免数据丢失,提供快速恢复的能力;物化视图帮助开发者优化复杂查询的性能,通过预计算并存储查询结果来减少计算压力,提升查询速度,适用于电商订单统计、用户行为分析等数据密集型场景,解决海量数据查询中的性能瓶颈问题。

总体来说,OceanBase 技术为开发者提供了一个高效、安全、易扩展的数据库平台,帮助在实际项目中实现了高并发、大规模数据处理和高效查询,值得大家去学习和体验感受哈!

相关文章:

  • 【沐风老师】3DMAX按元素UV修改器插件教程
  • 为了结合后端而学习前端的学习日志——【黑洞光标特效】
  • JavaWeb:SpringBootWeb增删改查案例
  • 【数据结构与算法】常见排序算法详解(C++实现)
  • 视频转GIF
  • VMware-centOS7安装redis分布式集群
  • MySQL复合查询全解析:从基础到多表关联与高级技巧
  • llfc项目TCP服务器笔记
  • SpringBoot的汽车商城后台管理系统源码开发实现
  • **马小帅面试记:Java技术问答**
  • Win10下安装Linux-Ubuntu24.04双系统
  • 2025-05-04 Unity 网络基础6——TCP心跳消息
  • Android第三次面试总结之Java篇补充
  • NV214NV217美光闪存固态NV218NV225
  • 基于Hive + Spark离线数仓大数据实战项目(视频+课件+代码+资料+笔记)
  • 【LeetCode Hot100】动态规划篇
  • 二叉搜索树实现删除功能 Java
  • 初识 iOS 开发中的证书固定
  • EasyExcel使用总结
  • 【Linux系统】第二节—基础指令(2)
  • 申活观察|演出场次破纪录、入境游导游档期忙,上海文旅商“热力”拉满
  • 海港通报颜骏凌伤停两至三周,国足面临门将伤病危机
  • 全文丨中华人民共和国传染病防治法
  • 摩根大通任命杜峯为亚太区副主席,加码中国市场业务布局
  • 马上评丨上热搜的协和“4+4”模式,如何面对舆论审视
  • 科学家为AI模型设置“防火墙”,以防止被不法分子滥用