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

多租户篇 | MatrixOne与MySQL全面对比

MySQL 是经典的关系型数据库管理系统,以其简单易用的特性在中小型业务系统中广受开发人员的喜爱。但是MySQL的架构也具有一定的局限性,在需要具备"隔离性"的业务,例如 SaaS 系统或微服务架构等对"数据隔离"及"资源隔离"有强需求的场景中,MySQL往往就表现的力不从心。此时,原生具备多租户能力又高度兼容 MySQL 语法的 MatrixOne,就成为开发者的理想选择。

在MySQL中实现多租户通常有两类方式:Shared Application Separate DatabaseShared 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.打开虚拟机&#xff…...

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格式的数据

前置知识&#xff1a; <button onclick"doSelect()">操作下拉列表</button><hr>学历&#xff1a;<select id"degree"><option value"0">--请选择学历--</option><option value"1">专科<…...

SD NAND:为车载显示器注入智能与安全的心脏

SD NAND 在车载显示器的应用 在车载显示器上&#xff0c;SD NAND&#xff08;Secure Digital NAND&#xff09;可以有多种应用&#xff0c;其中一些可能包括&#xff1a; 导航数据存储&#xff1a; SD NAND 可以用于存储地图数据、导航软件以及车载系统的相关信息。这有助于提…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...