集群使用——资源管理和租户创建
概述
OceanBase 数据库是多租户的分布式数据库,租户使用的资源建立在资源池上。资源池包含了资源单元,而资源单元则规定了具体资源的量化(如
CPU、Memory、Disk_Size 和 IOPS 等)。
创建租户前,必须规定租户使用的资源范围,资源池和资源单元就是为了满足租户资源隔离和负载均衡而存在的。
资源管理中的概念
资源单元(Resource Unit,Unit)
- 资源单元是一个容器。实际上,副本是存储在资源单元之中的,所以资源单元是副本的容器。
- 资源单元包含了计算存储资源(Memory、CPU 和 IO 等)同时资源单元也是集群负载均衡的一个基本单位,
- 在集群节点上下线,扩容缩容时会动态调整资源单元在节点上的分布进而达到资源的使用均衡。
资源池 (Resource Pool)
- 一个租户拥有若干个资源池,这些资源池的集合描述了这个租户所能使用的所有资源。
- 一个资源池由具有相同资源规格(Unit Config)的若干个资源单元组成。
- 一个资源池只能属于一个租户。每个资源单元描述了位于一个 Server 上的一组计算和存储资源,可以视为一个轻量级虚拟机,包括若干 CPU 资源、内存资源、磁盘资源等。一个租户在同一个 Server 上最多有一个资源单元(资源单元是和副本关联的,显而易见一个服务器不能有同一份数据的两个副本)。
资源配置(Resource Config)
- 资源配置是资源单元的具体配置,包含资源单元所属的资源池信息、使用资源的租户信息、资源单元的配置信息(如 CPU 核数和内存资源)等。修改资源配置可以动态调整资源单元的计算资源,进而调整对应租户的资源。
下面开始演示资源管理和租户创建:
1)资源管理
集群默认有个内部租户(sys),可以查看和管理集群的资源(sql如下):
select a.zone,concat(a.svr_ip,':',a.svr_port) observer, cpu_total, cpu_assigned, (cpu_total-cpu_assigned) cpu_free,mem_total/1024/1024/1024 mem_total_gb, mem_assigned/1024/1024/1024 mem_assign_gb, (mem_total-mem_assigned)/1024/1024/1024 mem_free_gbfrom __all_virtual_server_stat a join __all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port) order by a.zone, a.svr_ip;
结果如下(实验环境集群为单节点集群):
+-------+---------------------+-----------+--------------+----------+----------------+----------------+----------------+| zone | observer | cpu_total | cpu_assigned | cpu_free | mem_total_gb | mem_assign_gb | mem_free_gb |+-------+---------------------+-----------+--------------+----------+----------------+----------------+----------------+| zone1 | 192.168.152.30:2882 | 14 | 2.5 | 11.5 | 5.000000000000 | 1.250000000000 | 3.750000000000 |+-------+---------------------+-----------+--------------+----------+----------------+----------------+----------------+1 row in set (0.006 sec)
查看资源单元规格
MySQL [oceanbase]> select * from __all_unit_config;+----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+| gmt_create | gmt_modified | unit_config_id | name | max_cpu | min_cpu | max_memory | min_memory | max_iops | min_iops | max_disk_size | max_session_num |+----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+| 2023-02-07 09:51:59.323369 | 2023-02-07 09:51:59.323369 | 1 | sys_unit_config | 5 | 2.5 | 1610612736 | 1342177280 | 10000 | 5000 | 10737418240 | 9223372036854775807 |+----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+1 row in set (0.001 sec)MySQL [oceanbase]>
可以看出,资源单元规格 sys_unit_config 的定义里 CPU 和内存的最小值和最大值定义不一样,而第一条sql统计资源中的已分配资源时是按最小值进行计算的。这将会导致剩余的可用资源计算不那么准确。 所以,建议把该资源单元规格中定义的 CPU 和内存的最小值和最大值拉平。
修改资源单元 sys_unit_config:
alter resource unit sys_unit_config min_cpu=5,max_cpu=5,min_memory='1610612736B', max_memory='1610612736B';再次查看资源情况可以看见资源统计计算准确
查看已分配资源池的情况
select t1.name resource_pool_name, t2.`name` unit_config_name, t2.max_cpu, t2.min_cpu, t2.max_memory/1024/1024/1024 max_mem_gb, t2.min_memory/1024/1024/1024 min_mem_gb,t3.unit_id, t3.zone, concat(t3.svr_ip,':',t3.`svr_port`) observer,t4.tenant_id,t4.tenant_name from __all_resource_pool t1 join __all_unit_config t2 on (t1.unit_config_id=t2.unit_config_id)join __all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`)left join __all_tenant t4 on (t1.tenant_id=t4.tenant_id)order by t1.`resource_pool_id`, t2.`unit_config_id`, t3.unit_id;+--------------------+------------------+---------+---------+----------------+----------------+---------+-------+---------------------+-----------+-------------+
| resource_pool_name | unit_config_name | max_cpu | min_cpu | max_mem_gb | min_mem_gb | unit_id | zone | observer | tenant_id | tenant_name |
+--------------------+------------------+---------+---------+----------------+----------------+---------+-------+---------------------+-----------+-------------+
| sys_pool | sys_unit_config | 5 | 5 | 1.500000000000 | 1.500000000000 | 1 | zone1 | 192.168.152.30:2882 | 1 | sys |
+--------------------+------------------+---------+---------+----------------+----------------+---------+-------+---------------------+-----------+-------------+
2 rows in set (0.005 sec)
2)如何创建和连接 MySQL 租户
1.创建资源单元规格:该步骤为可选步骤,如果有合适的规格可以跳过此步骤,直接进行复用
2.创建资源池:可以每个 zone 一个资源池,使用独立的资源单元规格,也可以所有 zone 使用同一个资源单元规格,都在一个资源池下。
3.创建租户:创建租户时需关联到第 2 步中创建的资源池。
4.连接租户:
MySQL 客户端连接
OBClient 客户端连接
OceanBase 连接驱动(JDBC)
DBEAVER 客户端连接
ODC 客户端连接:OceanBase 提供官方图形化客户端工具 OceanBase Developer Center,简称 ODC
-创建资源单元规格
查看创建的资源单元规格:select * from __all_unit_config;
CREATE resource unit S1max_cpu=3, min_cpu=3, max_memory='3G', min_memory='3G', max_iops=10000, min_iops=1000, max_session_num=1000000, max_disk_size='1024G';
CREATE resource unit S2 max_cpu=4, min_cpu=4, max_memory='3G', min_memory='3G', max_iops=10000, min_iops=1000, max_session_num=1000000, max_disk_size='1024G';
MySQL [oceanbase]> select * from __all_unit_config;+----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+| gmt_create | gmt_modified | unit_config_id | name | max_cpu | min_cpu | max_memory | min_memory | max_iops | min_iops | max_disk_size | max_session_num |+----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+| 2023-02-07 09:51:59.323369 | 2023-02-07 12:20:46.250880 | 1 | sys_unit_config | 5 | 5 | 1610612736 | 1610612736 | 10000 | 5000 | 10737418240 | 9223372036854775807 || 2023-02-07 14:09:21.996793 | 2023-02-07 14:09:21.996793 | 1001 | S1 | 3 | 3 | 3221225472 | 3221225472 | 10000 | 1000 | 1099511627776 | 1000000 || 2023-02-07 14:09:37.685271 | 2023-02-07 14:09:37.685271 | 1002 | S2 | 4 | 4 | 3221225472 | 3221225472 | 10000 | 1000 | 1099511627776 | 1000000 |+----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+3 rows in set (0.001 sec
-创建资源池
创建语法:单节点集群的话:create resource pool pool_1 unit='S1' , unit_num=1, zone_list=('zone1') ;(单副本单节点集群unit_num只能是1)1-1-1集群的话:create resource pool pool_1 unit='S1' , unit_num=1, zone_list=('zone1' ,'zone2') ;(1-1-1集群,每一个zone中的server是1,unit_num最大是1) create resource pool pool_2 unit='S2' , unit_num=1, zone_list=('zone3');3-3-3集群的话create resource pool pool1unit=‘s1’,unit_num=3#一个zone中包含的observer数据量x>=3), 集群最低要求3-3-3,否则会报错(3个zone(表示3副本),每个zone中3台observer。zone_list=(‘zone1’,‘zone2’,‘zone3’,‘zone4’)
UNIT_NUM = unitnum:指定要创建的单个 Zone 下的 Unit 个数。每个单元会根据当前集群负载,自动在每个 Zone中选择一个 Server 负载,
但同一个资源池的多个 Unit 不能分配到同一个 Server,即一个资源池包含的 Unit 个数不能超过单 Zone 内 Server 的个数。
资源池创建出来后,集群的可用资源就减少了。但是这个资源池还没有关联到具体租户,所以无法被业务使用。
查看已分配资源池的情况select t1.name resource_pool_name, t2.`name` unit_config_name, t2.max_cpu, t2.min_cpu, t2.max_memory/1024/1024/1024 max_mem_gb, t2.min_memory/1024/1024/1024 min_mem_gb,t3.unit_id, t3.zone, concat(t3.svr_ip,':',t3.`svr_port`) observer,t4.tenant_id,t4.tenant_name from __all_resource_pool t1 join __all_unit_config t2 on (t1.unit_config_id=t2.unit_config_id)join __all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`)left join __all_tenant t4 on (t1.tenant_id=t4.tenant_id)order by t1.`resource_pool_id`, t2.`unit_config_id`, t3.unit_id;+--------------------+------------------+---------+---------+----------------+----------------+---------+-------+---------------------+-----------+-------------+| resource_pool_name | unit_config_name | max_cpu | min_cpu | max_mem_gb | min_mem_gb | unit_id | zone | observer | tenant_id | tenant_name |+--------------------+------------------+---------+---------+----------------+----------------+---------+-------+---------------------+-----------+-------------+| sys_pool | sys_unit_config | 5 | 5 | 1.500000000000 | 1.500000000000 | 1 | zone1 | 192.168.152.30:2882 | 1 | sys || pool_1 | S1 | 3 | 3 | 3.000000000000 | 3.000000000000 | 1001 | zone1 | 192.168.152.30:2882 | NULL | NULL |+--------------------+------------------+---------+---------+----------------+----------------+---------+-------+---------------------+-----------+-------------+
再次查看剩余资源MySQL [oceanbase]> select a.zone,concat(a.svr_ip,':',a.svr_port) observer, cpu_total, cpu_assigned, (cpu_total-cpu_assigned) cpu_free,-> mem_total/1024/1024/1024 mem_total_gb, mem_assigned/1024/1024/1024 mem_assign_gb, (mem_total-mem_assigned)/1024/1024/1024 mem_free_gb-> from __all_virtual_server_stat a join __all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port) order by a.zone, a.svr_ip;+-------+---------------------+-----------+--------------+----------+----------------+----------------+----------------+| zone | observer | cpu_total | cpu_assigned | cpu_free | mem_total_gb | mem_assign_gb | mem_free_gb |+-------+---------------------+-----------+--------------+----------+----------------+----------------+----------------+| zone1 | 192.168.152.30:2882 | 14 | 8 | 6 | 5.000000000000 | 4.500000000000 | 0.500000000000 |+-------+---------------------+-----------+--------------+----------+----------------+----------------+----------------+1 row in set (0.005 sec)MySQL [oceanbase]>
-创建租户:
创建租户时需关联到第 2 步中创建的资源池。
create tenant obmysql resource_pool_list=('pool_1'), primary_zone='RANDOM',comment 'mysql tenant/instance', charset='utf8' set ob_tcp_invited_nodes='%' ;
ob_tcp_invited_nodes设置客户端IP白名单,‘%’,表示允许所有的来源,默认仅为本机127.0.0.1。
zone_list=(‘zone1’,‘zone2’,‘zone3’) 租户资源使用的zone(资源分布在哪些zone上,实验环境是单机集群,没法按照示例创建)。
primary_ZONE=‘ZONE1,ZONE2,ZONE3’ 主副本偏好设置。
查看tenant信息
MySQL [oceanbase]> select * from gv$tenant;+-----------+-------------+-----------+--------------+----------------+-----------------------+-----------+---------------+| tenant_id | tenant_name | zone_list | primary_zone | collation_type | info | read_only | locality |+-----------+-------------+-----------+--------------+----------------+-----------------------+-----------+---------------+| 1 | sys | zone1 | zone1 | 0 | system tenant | 0 | FULL{1}@zone1 || 1001 | obmysql | zone1 | RANDOM | 0 | mysql tenant/instance | 0 | FULL{1}@zone1 |+-----------+-------------+-----------+--------------+----------------+-----------------------+-----------+---------------+2 rows in set (0.003 sec)
总结:一个资源单元为 UNIT,UNIT是最小的资源分割单位。一个资源池中包含若干 UNIT,一台Observer 只能有一个资源池的一个 UNIT。(所以创建resourcepool时unit_num最大数不能超过单个zone总observer的数目)一个资源池只能赋予给一个租户,一个租户可以包含多个资源池。资源池若指定只分布在一个zone,则该zone失效后,数据丢失,无副本。一个资源池建议指定分布在多个zone,多个zone则存在副本。(最好是全部zone,需大于2,若等于2,一个zone损坏,由于不满足多数派,虽然数据还有一个副本,但是服务会停止)
–连接租户
1.obclient
obclient -h192.168.152.30 -uroot@obmysql -P2881 -p -c -A oceanbasealter user root identified by 'bJVqqEVt' ;obclient -h192.168.152.30 -uroot@obmysql -P2881 -pbJVqqEVt -c -A oceanbaseshow databases;
过程如下:
[admin@obce01 ~]$ obclient -h192.168.152.30 -uroot@obmysql -P2881 -p -c -A oceanbaseEnter password: --------------------------------------------------------初始密码为空Welcome to the OceanBase. Commands end with ; or \g.Your MySQL connection id is 3221489885Server version: 5.7.25 OceanBase 3.1.0 (r3-b20901e8c84d3ea774beeaca963c67d7802e4b4e) (Built Aug 10 2021 08:10:38)MySQL [oceanbase]> alter user root identified by 'bJVqqEVt' ;Query OK, 0 rows affected (0.014 sec)MySQL [oceanbase]> Bye[admin@obce01 ~]$ obclient -h192.168.152.30 -uroot@obmysql -P2881 -pbJVqqEVt -c -A oceanbaseWelcome to the OceanBase. Commands end with ; or \g.Your MySQL connection id is 3221489906Server version: 5.7.25 OceanBase 3.1.0 (r3-b20901e8c84d3ea774beeaca963c67d7802e4b4e) (Built Aug 10 2021 08:10:38)Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MySQL [oceanbase]> show databases;+--------------------+| Database |+--------------------+| oceanbase || information_schema || mysql || test |+--------------------+4 rows in set (0.005 sec)MySQL [oceanbase]>
-
ODC客户端
下载安装:下载客户端版 ODC新建连接串:智能识别 obclient -h192.168.152.30 -uroot@obmysql -P2881 -pbJVqqEVt -c -A oceanbase
相关文章:

集群使用——资源管理和租户创建
概述 OceanBase 数据库是多租户的分布式数据库,租户使用的资源建立在资源池上。资源池包含了资源单元,而资源单元则规定了具体资源的量化(如 CPU、Memory、Disk_Size 和 IOPS 等)。 创建租户前,必须规定租户使用的资源…...

谷歌浏览器登录失败,提示【无法同步到“...@gmail.com”】
首先安装Chrome同步助手(Chrome-Sync-Helper,看了很多博客,谷歌浏览器同步问题好像都要用这个),改成.rar,解压,文件夹_metadata重命名为metadata,然后添加到谷歌浏览器的扩展程序中。…...
75 111111
选择题(共75题,合计75.0分) 1. 选项ABCD中显示了所创造的商业价值以及在产品中实施各种功能需要进行的开发工作。团队应优先实施哪项功能? The business value created and the development effort needed to implement the various features in the product are sh…...

分销系统逻辑
相关概念 主营商户: 提供分销商品和佣金的商户分销商: 拥有自己的销售渠道,能够帮助推动产品销售的个人或商户消费者: 购买分销商品的人。佣金: 主营商户返还给经销商的比例抽成 分销功能设计 (1)分销商准入规则设计 无规则: 没有分销商的准入门槛限制…...

MySQL视图特性
文章目录MySQL视图特性基本使用准备测试表创建视图修改视图影响基表修改基表影响视图删除视图视图规则和限制MySQL视图特性 视图的概念 视图是一个虚拟表,其内容由查询定义,同真实的表一样,视图包含一系列带有名称的列和行数据。视图中的数据…...

RabbitMQ详解(二):Docker安装RabbitMQ
在Docker上安装部署RabbitMQ方便快捷,不需要额外安装Erlang环境,所以写该篇文章先来介绍如何在Docker上部署RabbitMQ。 一、安装并运行 (1)、在docker hub 中查找rabbitmq镜像 docker search rabbitmq:3.9.12-management带有“mangement”的版本&…...
如何使用代码注释:关于JavaScript与TypeScript 注释和文档的自动生成
如何使用代码注释:关于JavaScript与TypeScript 注释和文档的自动生成jcLee95:https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/detail…...

Echarts 设置面积区域图(areaStyle核心)
第011个点击查看专栏目录Echarts折线区域面积图的视觉效果更加饱满丰富,在系列不多的场景下尤其适用。区域面积图将折线到坐标轴的空间设置背景色,用区域面积表达数据。通过 areaStyle 设置折线图的填充区域样式,将其设为为 {} 表示使用默认…...

pandas——字符串处理【建议收藏】
pandas——字符串处理 作者:AOAIYI 创作不易,如果觉得文章不错或能帮助到你学习,记得点赞收藏评论一下哦 文章目录pandas——字符串处理一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.cat() 拼接字符串2.split()切片字符串…...

反射,枚举,lambda表达式
目录 1、反射 1.1 基本概念 1.2 反射相关的类 1.3 创建 Class 对象 1.4 反射的使用 1.4.1 通过反射创建对象: 1.4.2 获取私有的构造方法 1.4.3 获取私有的成员变量 1.4.4 获取私有的方法 1.5 总结 2、枚举 2.1 认识枚举 2.2 使用枚举 2.3 枚举与反射…...

.Net Core对于RabbitMQ封装分布式事件总线
首先我们需要了解到分布式事件总线是什么; 分布式事件总线是一种在分布式系统中提供事件通知、订阅和发布机制的技术。它允许多个组件或微服务之间的协作和通信,而无需直接耦合或了解彼此的实现细节。通过事件总线,组件或微服务可以通过发布…...
GPIO功能描述
GPIO 文章目录 GPIO1. 功能描述1.1 OSCI/OSCO 引脚1.3 HSEIN/HSEOUT引脚1.2 Bit-Band1.4 VRTCAFx引脚1.5 EWKUPx引脚1.6 QSPI0 引脚1.7 LVDIN引脚1.8 SARADC引脚1.9 ADCIN引脚2. 测试项描述2.1 PAD Location2.2 LBOR和BOR复位2.3 驱动能力2.4 模拟态\高阻态2.5 SWD\JTAG2.6 输出…...

指派问题与匈牙利法讲解
指派问题概述:实际中,会遇到这样的问题,有n项不同的任务,需要n个人分别完成其中的1项,每个人完成任务的时间不一样。于是就有一个问题,如何分配任务使得花费时间最少。通俗来讲,就是n*n矩阵中&a…...

day5——冒泡排序,选择排序和插入排序的学习
选择排序冒泡排序插入排序 选择排序 选择排序的基本思路就是: 首先假定第一个的下表为所有元素中最小的一个, 然后用后面的每一个元素跟这个元素进行比较, 如果后面的元素比这个元素更小一点, 那么就将找到的最小的元素的下标和…...
Windows 数据类型 (Windows Data Types)
参考:https://learn.microsoft.com/en-us/windows/win32/winprog/windows-data-types 要求 要求值最低受支持的客户端Windows XP [仅限桌面应用]最低受支持的服务器Windows Server 2003 [仅限桌面应用]HeaderBaseTsd.h;WinDef.h;WinNT.hAPIENTRY 系统函数的调用约…...

九龙证券|本周5只新股申购,特斯拉、蔚来、理想的供应商来A股了!
据现在组织,2月13日到17日共有5只新股申购,其间上证主板2只,深证主板1只,北交所2只。 2月14日发动打新的深证主板新股多利科技成立于2010年,是一家专心于轿车冲压零部件及相关模具的开发、出产与出售的企业。从2020年…...
设计模式(持续更新)
本文主要是记录java的设计模式在实际工作中的应用案例,或者是对设计模式的个人理解及备忘 一、单例模式Singleton 工作场景(静态类): 在外部系统对接中,需要调用外部系统A的接口,但是接口是有身份校验的…...

Prometheus 告警规则
Prometheus 告警规则 Prometheus官方内置的第三方报警通知包括:邮件、 即时通讯软件(如Slack、Hipchat)、移动应用消息推送(如Pushover)和自动化运维工具(例如:Pagerduty、Opsgenie、Victorops) Promethe…...
mulesoft MCIA 破釜沉舟备考 2023.02.13.02
mulesoft MCIA 破釜沉舟备考 2023.02.13.03 1. According to MuleSoft, which deployment charcateristic applies to a microservices application architecture?2. A mule application designed to fulfil two requirements3. A mule application must periodically process…...
获取DLL运行时路径的方法
之前项目中发现的问题,记录下解决方案1. 问题背景OVVRNTool项目中,底层图像基本操作功能由DLL库函数提供,上层基于DLL封装了两个应用CMD和GUI,然后通过Qt打包分发;发布是直接采用绿色免安装的方式打包,具体…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...

实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
React核心概念:State是什么?如何用useState管理组件自己的数据?
系列回顾: 在上一篇《React入门第一步》中,我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目,并修改了App.jsx组件,让页面显示出我们想要的文字。但是,那个页面是“死”的,它只是静态…...

echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式
pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图,如果边框加在dom上面,pdf-lib导出svg的时候并不会导出边框,所以只能在echarts图上面加边框 grid的边框是在图里…...

EasyRTC音视频实时通话功能在WebRTC与智能硬件整合中的应用与优势
一、WebRTC与智能硬件整合趋势 随着物联网和实时通信需求的爆发式增长,WebRTC作为开源实时通信技术,为浏览器与移动应用提供免插件的音视频通信能力,在智能硬件领域的融合应用已成必然趋势。智能硬件不再局限于单一功能,对实时…...

ubuntu中安装conda的后遗症
缘由: 在编译rk3588的sdk时,遇到编译buildroot失败,提示如下: 提示缺失expect,但是实测相关工具是在的,如下显示: 然后查找借助各个ai工具,重新安装相关的工具,依然无解。 解决&am…...