多租户篇 | MatrixOne与MySQL全面对比
MySQL 是经典的关系型数据库管理系统,以其简单易用的特性在中小型业务系统中广受开发人员的喜爱。但是MySQL的架构也具有一定的局限性,在需要具备"隔离性"的业务,例如 SaaS 系统或微服务架构等对"数据隔离"及"资源隔离"有强需求的场景中,MySQL往往就表现的力不从心。此时,原生具备多租户能力又高度兼容 MySQL 语法的 MatrixOne,就成为开发者的理想选择。
在MySQL中实现多租户通常有两类方式:Shared Application Separate Database或Shared Application Shared Database。
实际生产业务中,这两种模式都存在一定挑战:
- 独立数据库模式:MySQL本身为单进程数据库,在一台数据库服务器中创建多个数据库实例消耗的资源相对较少,该模式下将每个租户都以独立数据库实例进行支撑,其优势为资源和数据的隔离度非常高,劣势是资源成本和运维难度都较大,当租户数量超过百个时,统一的升级等运维动作将会非常耗费时间。同时,由于使用不同的数据库实例,各实例间的数据共享也会变得不够灵活。
- 共享数据库模式:所有租户均在一个相同的数据库实例中,通常依靠分库分表、权限设计以及配合应用层代码区分租户逻辑。该模式的优势是仅使用一套数据库集群,资源成本和运维管理难度都较低,升级/扩容/应用改动都仅需要做一次即可完成全局更改,各租户间数据也可以灵活共享。劣势是数据和资源隔离程度较低,尤其容易出现某个租户负载突然大幅增加的时候,抢占其他租户的资源,导致整个系统性能严重下降。MySQL 在 8.0版本引入了用于资源管理的Resource Group特性,可通过资源组的方式修改线程的优先级以及所能使用的资源,来指定不同的线程使用特定的资源,但这个能力只能简单控制CPU资源,开发者需要通过调控线程优先级和绑定CPU核来实现对应线程任务的优先级调度,操作灵活度有限,不足以解决"共享数据库模式"下各租户资源抢占的问题。
而采用"单一集群多租户"方式的 MatrixOne 就可以优雅的解决上述两种模式存在的问题。MatrixOne 在集群级别下可以创建和管理多个数据和用户权限体系完全隔离的租户(Account),在这个设计中,租户是一个逻辑概念,作为资源分配和数据库管理的单位。MatrixOne 的多租户模式能够为不同的租户提供独立的数据库实例,并采用逻辑隔离的方式确保各租户数据的安全性和独立性,有效防止数据泄露和篡改的风险。这种多租户设计既节省了部署和运维多套数据业务系统的成本,又能利用租户间的硬件资源共享最大限度的节约机器成本。
MatrixOne在架构上实现了三个独立的层级,每个层级都有自己的对象单元和分工。不同类型的节点可以自由伸缩,不受到其他层的制约。
这三个层级是:
- 计算层 :以计算节点 Compute Node(简称 CN)为单位,实现了计算和事务处理的 Serverless 化,具备自己的缓存,可以任意重启和扩缩容。
- 事务层 :以数据库节点 Transaction Node(简称 TN )和日志节点 Log Service 为单位,提供完整的日志服务和元数据信息,内置 Logtail 用于保存最近的数据。
- 存储层 :全量数据保存在对象存储中,以 S3 为代表,实现了低成本的无限伸缩存储方式。统一的文件操作服务 File Service 实现了不同节点对底层存储的无感知操作。
基于上图所述的架构,MatrixOne 在分布式集群中采用如下图所示的 Proxy 模块和 CN 资源组技术架构实现了多租户资源隔离:
用户访问MatrixOne 时,连接会先经过 Proxy 模块,Proxy 会根据 CN 的租户标签信息将连接转发到对应 CN 资源组上的某个 CN 上,根据负载均衡的原则选择负载最轻的 CN。在 MatrixOne 集群架构中,CN 是以容器化部署的,因此 CN 之间具有隔离性。一个租户使用的 CN 资源组是一组打上该租户标签的 CN。如果资源不足,需要进行扩展,可以通过水平扩展该 CN 资源组来满足需求,而不会抢占其他 CN 资源组的资源。但上述的实现方式仅适用于MatrixOne K8s集群部署或云原生的MatrixOne Cloud环境,单机部署时由于只有一个CN节点,多租户就仅有"数据隔离"能力,而无法实现"资源隔离"和"弹性扩缩"效果了。
多租户使用示例
在MatrixOne中多租户的使用非常简便,相关语法介绍如下:
创建租户
CREATE ACCOUNT [IF NOT EXISTS] ACCOUNT_NAME ADMIN_NAME [=] 'admin_name' IDENTIFIED BY 'auth_string' [COMMENT 'comment_string'];
-- ADMIN_NAME子句用于指定该租户默认的帐号名和密码
租户操作示例
-- 创建租户account_app1, 租户管理员账号为admin_app1。仅系统租户管理员 root 用户可以执行
create account account_app1 admin_name 'admin_app1' identified by 'app123';-- 修改租户的密码,集群管理员 root 用户可以修改它所创建的租户的密码,租户本身可以修改自己的密码
alter account account_app1 admin_name 'admin_app1' identified by 'MatrixOne_1234@';-- 修改租户状态,仅系统租户管理员 root 用户可以执行,租户状态可以为暂停(SUSPEND)、恢复(OPEN)和限制(RESTRICTED),对租户启用了 RESTRICTED 状态以后,该租户只能对数据库进行 SHOW/DELETE/SELECT/USE/SET 操作,其他操作将不可进行
alter account account_app1 suspend;-- 删除租户,仅系统租户管理员root可以删除租户,删除租户时,会删除租户账号下的所有数据,且无法恢复,务必谨慎操作
drop account account_app1;
租户登陆示例
以使用 mysql client 为例,在访问MatrixOne时,完整的语法为:
mysql -h host -P port -u accountname:username:role -p'password'
其中,accountname即租户名称,当不显式指定时,默认使用"sys"系统租户。username为租户账号,可使用"root"或其他租户创建时指定的"租户管理员"账号,也可使用后期通过管理员创建的其他账号。role用于显式指定所用账号拥有的某一角色,注意当指定角色登录时,租户名不能省略。租户登陆示例:
mysql -h 127.0.0.1 -u account_app1:admin_app1 -P 6001 -p
租户数据共享
除了确保租户之间的数据和负载隔离外,MatrixOne 同样提供了一种允许租户间数据互通的机制,即发布和订阅能力,这一机制可用于解决数据同步和大量数据分发等场景中的互通问题。以开箱即用的MatrixOne Cloud为例,在MatrixOne Cloud中创建的每个实例都是一个独立的租户,假设我们需要将“实例1”中的数据通过“发布订阅模式”共享给“实例2”,操作语句示例如下:
-- 在实例1中创建库表和导入测试数据
create database pub_db;
CREATE TABLE pub_db.customer (
customer_id INT,
customer_name VARCHAR(255)
);insert into pub_db.customer values(1001,'matrixone');-- 在实例1中将数据库pub_db发布给指定实例,在MO Cloud中实例名可在“通过第三方工具连接”处获取
create publication pub_moc database pub_db account `62915dd9_d454_4b02_be16_0741d94b62cc`;-- 在实例2中对源实例发布的数据库执行订阅命令,源实例的实例名仍可在“通过第三方工具连接”处获取
create database sub_db from `0b6d35cc_11ab_4da5_a5c5_c4cc09917c11` publication pub_moc;
-- 在实例2中查看所订阅数据库内的表数据,所订阅数据为只读,且会随着源实例中的数据变化实时变化
select * from sub_db.customer;
关于MatrixOne
MatrixOne 是一款基于云原生技术,可同时在公有云和私有云部署的多模数据库。该产品使用存算分离、读写分离、冷热分离的原创技术架构,能够在一套存储和计算系统下同时支持事务、分析、流、时序和向量等多种负载,并能够实时、按需的隔离或共享存储和计算资源。云原生数据库MatrixOne能够帮助用户大幅简化日益复杂的IT架构,提供极简、极灵活、高性价比和高性能的数据服务。
MatrixOne企业版和MatrixOne云服务自发布以来,已经在互联网、金融、能源、制造、教育、医疗等多个行业得到应用。得益于其独特的架构设计,用户可以降低多达70%的硬件和运维成本,增加3-5倍的开发效率,同时更加灵活的响应市场需求变化和更加高效的抓住创新机会。在相同硬件投入时,MatrixOne可获得数倍以上的性能提升。
MatrixOne秉持开源开放、生态共建的理念,核心代码全部开源,全面兼容MySQL协议,并与合作伙伴打造了多个端到端解决方案,大幅降低用户的迁移和使用成本,也帮助用户避免了供应商锁定风险。
关键词:超融合数据库、多模数据库、云原生数据库、国产数据库
相关文章:

多租户篇 | MatrixOne与MySQL全面对比
MySQL 是经典的关系型数据库管理系统,以其简单易用的特性在中小型业务系统中广受开发人员的喜爱。但是MySQL的架构也具有一定的局限性,在需要具备"隔离性"的业务,例如 SaaS 系统或微服务架构等对"数据隔离"及"资源隔…...

python Matplotlib Tkinter-->导出pdf报表
环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 reportlab 4.0.9 import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk import tkinter as tk import tkinter.messagebox as messagebox impor…...

react-组件基础
1.目标 能够使用函数创建组件 能够使用class创建组件 能够给React元素绑定事件 能够使用state和setState() 能够处理事件中的this指向问题 能够使用受控组件方式处理表单 2.目录 React组件介绍 React组件的两种创建方式 React事件处理 有状态组件和无状态组件 组件中的state…...

The authenticity of host ‘github.com (20.205.243.166)‘ can‘t be established.
1、运行git clone报错: The authenticity of host github.com (20.205.243.166) cant be established. ECDSA key fingerprint is SHA256:p2QAC1TJYererOttrVc98/R1BWERWu3/LiyFdHfQM. Are you sure you want to continue connecting (yes/no/[fingerprint])? 这个…...

arduino uno R3驱动直流减速电机(蓝牙控制)
此篇博客用于记录使用arduino驱动直流减速电机的过程,仅实现简单的功能:PID调速、蓝牙控制 1、直流减速电机简介2、DRV8833电机驱动模块简介3、HC-05蓝牙模块简介电机转动测试4、PID控制5、蓝牙控制电机 1、直流减速电机简介 我在淘宝购买的电机&#x…...

智能家居控制系统(51单片机)
smart_home_control_system 51单片机课设,智能家居控制系统 使用及转载请标明出处(最好点个赞及star哈哈) Github地址,带有PPT及流程图 Gitee码云地址,带有PPT及流程图 以STC89C52为主控芯片,以矩阵键…...
软考高级系统分析师之 URL 知识点和例题
一、AI 解读 URL(统一资源定位器)的结构是网络上定位资源的一种方式。一个典型的URL由几个部分组成: 协议(Scheme): 定义了用于访问资源的协议类型,如http、https、ftp等。例如,在 http://www.…...

vmware虚拟机centos中/dev/cl_server8/root 空间不够
在使用vmware时发现自己的虚拟机的/dev/cl_server8/root空间不够了,没办法安装新的服务。所以查了一下改空间的办法。 1.在虚拟机关闭的状态下,选中需要扩容的虚拟机->设置->硬件-> 硬盘->扩展->填写扩大到的值。 2.打开虚拟机ÿ…...

C++/数据结构:AVL树
目录 一、AVL树的概念 二、AVL树的实现 2.1节点定义 2.2节点插入 三、AVL树的旋转 3.1新节点插入较高左子树的左侧:右单旋 3.2新节点插入较高右子树的右侧:左单旋 3.3新节点插入较高左子树的右侧---左右:先左单旋再右单旋 3.4新节点插…...

Mysql数据库_max_allowed_packet参数详解
本文目录 参数含义查看max_allowed_packet参数值修改max_allowed_packet参数值修改配置文件方式(需要重启)直接修改配置方式(不需要重启)注意事项 出现场景 参数含义 max_allowed_packet参数指的是MySQL服务端或者客户端接收一次…...
【数仓】Hadoop集群配置常用参数说明
Hadoop集群中,需要配置的文件主要包括四个 配置核心Hadoop参数: 编辑core-site.xml文件,设置Hadoop集群的基本参数,如文件系统、Hadoop临时目录等。 配置HDFS参数: 编辑hdfs-site.xml文件,设置HDFS的相关参…...

【go从入门到精通】什么是go?为什么要选择go?
go的出生: go语言(或Golang)是Google开发的开源编程语言,诞生于2006年1月2日下午15点4分5秒,于2009年11月开源,2012年发布go稳定版。Go语言在多核并发上拥有原生的设计优势,Go语言从底层原生支持…...

MySQL篇—执行计划介绍(第二篇,总共三篇)
☘️博主介绍☘️: ✨又是一天没白过,我是奈斯,DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux,也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣…...

nest.js使用nest-winston日志一
nest-winston文档 nest-winston - npm 参考:nestjs中winston日志模块使用 - 浮的blog - SegmentFault 思否 安装 cnpm install --save nest-winston winstoncnpm install winston-daily-rotate-file 在main.ts中 import { NestFactory } from nestjs/core; im…...
LeetCode刷题笔记之二叉树(四)
一、二叉搜索树的应用 1. 700【二叉搜索树中的搜索】 题目: 给定二叉搜索树(BST)的根节点 root 和一个整数值 val。你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。代码&a…...

【MATLAB源码-第150期】基于matlab的开普勒优化算法(KOA)机器人栅格路径规划,输出做短路径图和适应度曲线。
操作环境: MATLAB 2022a 1、算法描述 开普勒优化算法(Kepler Optimization Algorithm, KOA)是一个虚构的、灵感来自天文学的优化算法,它借鉴了开普勒行星运动定律的概念来设计。在这个构想中,算法模仿行星围绕太阳的…...

最佳实践:Websocket 长连接状态如何保持
WebSocket 是一种支持通过单个 TCP 连接进行全双工通信的协议,相较于传统的 HTTP 协议,它更适合需要实时交互的应用场景。此协议在现代 Web 应用中扮演着至关重要的角色,尤其是在需要实时更新和通信的场合下维持持久连接。本文将探讨 WebSock…...
Unity AStar寻路算法与导航
在游戏开发中,寻路算法是一个非常重要的部分,它决定了游戏中角色的移动路径。Unity作为一款流行的游戏开发引擎,提供了许多内置的寻路算法,其中最常用的就是AStar算法。AStar算法是一种基于图的搜索算法,通过启发式搜索…...

JavaScript最新实现城市级联操作,json格式的数据
前置知识: <button onclick"doSelect()">操作下拉列表</button><hr>学历:<select id"degree"><option value"0">--请选择学历--</option><option value"1">专科<…...

SD NAND:为车载显示器注入智能与安全的心脏
SD NAND 在车载显示器的应用 在车载显示器上,SD NAND(Secure Digital NAND)可以有多种应用,其中一些可能包括: 导航数据存储: SD NAND 可以用于存储地图数据、导航软件以及车载系统的相关信息。这有助于提…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...

性能优化中,多面体模型基本原理
1)多面体编译技术是一种基于多面体模型的程序分析和优化技术,它将程序 中的语句实例、访问关系、依赖关系和调度等信息映射到多维空间中的几何对 象,通过对这些几何对象进行几何操作和线性代数计算来进行程序的分析和优 化。 其中࿰…...