多租户篇 | 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 可以用于存储地图数据、导航软件以及车载系统的相关信息。这有助于提…...
Qwen3语义搜索新体验:开箱即用,轻松实现文本的“深度理解”检索
Qwen3语义搜索新体验:开箱即用,轻松实现文本的"深度理解"检索 1. 引言:传统搜索的局限与语义搜索的突破 在日常工作和生活中,我们经常遇到这样的困扰:明明知道要找什么内容,却因为记不清具体关…...
MT5 Zero-Shot中文增强效果可视化:原句vs改写句语义相似度与流畅度实测
MT5 Zero-Shot中文增强效果可视化:原句vs改写句语义相似度与流畅度实测 1. 项目介绍与核心价值 MT5 Zero-Shot Chinese Text Augmentation 是一个基于 Streamlit 和阿里达摩院 mT5 模型构建的本地化 NLP 工具。这个工具能够对输入的中文句子进行语义改写和数据增强…...
Qwen3-0.6B-FP8效果展示:FP8量化后32K上下文长文档摘要质量对比
Qwen3-0.6B-FP8效果展示:FP8量化后32K上下文长文档摘要质量对比 1. 引言:当小模型遇上大文档 想象一下,你手头有一份长达几十页的技术报告、一篇复杂的学术论文,或者一份冗长的会议纪要。你需要快速抓住核心要点,但人…...
Qwen3-ASR-1.7B实战:智能客服语音转文字方案落地解析
Qwen3-ASR-1.7B实战:智能客服语音转文字方案落地解析 1. 引言:智能客服的语音识别挑战 在智能客服系统中,语音识别(ASR)技术承担着将客户语音转化为可处理文本的关键任务。然而传统ASR方案在实际落地时常常面临三大挑战: 多语言…...
基于Spring Boot和SSM框架的ERP进销存管理系统源码分享:单据流转与物流信息管理解...
基于spring boot的ERP进销存管理系统 单据流转 物流信息管理系统源码 物流信息系统 超市进销存管理系 药品管理系统 系统设计与开发 SSM框架、Java开发、vue开发、B/S架构、Java项目 亮点:单据之间有关联,可以实现单据的流转 前后端分离 本系统功能包括…...
DAMOYOLO-S模型深度解析:实时口罩检测背后的算法奥秘
DAMOYOLO-S模型深度解析:实时口罩检测背后的算法奥秘 1. 引言 在计算机视觉领域,实时目标检测一直是个热门话题。特别是在公共卫生场景中,口罩检测技术成为了智能监控系统的关键组成部分。今天我们要深入探讨的DAMOYOLO-S模型,正…...
StructBERT本地部署实操:systemd服务守护+自动重启异常恢复
StructBERT本地部署实操:systemd服务守护自动重启异常恢复 安全提示:本文仅讨论本地化部署技术方案,所有数据处理均在用户自有环境中完成,不涉及任何外部网络传输或第三方服务调用。 1. 项目概述与环境准备 StructBERT中文语义智…...
Kotaemon镜像实战:快速搭建技术支持智能问答机器人
Kotaemon镜像实战:快速搭建技术支持智能问答机器人 1. Kotaemon镜像简介 Kotaemon是由Cinnamon开发的开源项目,它是一个专注于文档问答(DocQA)的RAG UI界面。这个镜像为终端用户和开发者提供了一个开箱即用的解决方案,帮助快速搭建基于检索…...
Qwen3.5-9B优化技巧:清理历史、管理日志,让你的AI助手运行更流畅
Qwen3.5-9B优化技巧:清理历史、管理日志,让你的AI助手运行更流畅 1. 引言 当你的Qwen3.5-9B AI助手运行一段时间后,可能会发现响应速度变慢、内存占用增加等问题。这通常是由于积累的对话历史和日志文件导致的。本文将详细介绍如何通过定期…...
TortoiseSVN与VisualSVN Server局域网协作开发环境搭建指南
1. 为什么需要局域网SVN协作开发环境 在中小型团队开发中,代码版本控制是刚需。你可能遇到过这样的场景:同事A修改了公共模块却忘记通知其他人,导致团队成员的本地代码无法运行;或者多人同时修改同一个文件时,手工合并…...
