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

数据库管理-第187期 23ai:怎么用SQL创建图(20240510)

数据库管理187期 2024-05-10

  • 数据库管理-第187期 23ai:怎么用SQL创建图(20240510)
    • 1 安装PGX
      • 1.1 数据库配置对应用户
      • 1.2 使用RPM包安装Graph Server
      • 1.3 安装Oracle Graph Client
      • 1.4 访问PGX页面
    • 2 SQL Property Graph
      • 2.1 创建SQL属性图
      • 2.2 关于点和边图元素表
      • 2.3 关于点和边表建
      • 2.4 关于标签(LABEL)和属性(PROPERTY)
      • 2.5 使用Graph Option来创建SQL属性图
        • 2.5.1 使用OPTION来制定图的MODE
        • 2.5.2 使用OPTION来允许/禁止不同属性类型共享属性名称
      • 2.6 相关权限
      • 2.7 Revalidating and Drop
      • 2.8 JSON支持
    • 3 SQL Graph查询
    • 总结

数据库管理-第187期 23ai:怎么用SQL创建图(20240510)

作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Associate: Database(Oracle与MySQL)
PostgreSQL ACE Partner
10年数据库行业经验,现主要从事数据库服务工作
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP、认证技术专家、年度墨力之星,ITPUB认证专家、专家百人团成员,OCM讲师,PolarDB开源社区技术顾问,OceanBase观察团成员
圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭

1 安装PGX

安装Graph Server,PGX,本次部署版本为24.2.0,需要到这个网址去下载:

https://edelivery.oracle.com/

这里下载最新的Oracle Graph Server and Client 24.2.0(全部加起来有点大):
image.png
重命名一下并解压看看:
image.png
image.png
image.png
还需要单独部署一台OracleLinux 8的主机,本次操作的两台机器如下:

主机名IP地址操作系统角色
23ai-free10.10.10.230OracleLinux 9.3DB 23ai Free
pgx10.10.10.80OracleLinux 8.9PGX App

1.1 数据库配置对应用户

这里继续使用之前用于JSON关系二元性视图实验的用户ec,密码为ec,已授予connect和resource权限:

--这两个role权限是23ai新增,之前版本需要手工创建:https://docs.oracle.com/en/database/oracle/property-graph/24.2/spgdg/user-authentication-and-authorization.html
GRANT GRAPH_DEVELOPER TO ec;
GRANT GRAPH_ADMINISTRATOR to ec;

image.png
为了偷懒把两个权限都赋予了。

1.2 使用RPM包安装Graph Server

dnf -y install libgfortran
# install Oracle JDK 11
rpm -i jdk-11.0.23_linux-x64_bin.rpm# install graph
rpm -i oracle-graph-24.2.0.x86_64.rpm# add operating system users allowed to use the server installation to the operating system group oraclegraph
# usermod -a -G oraclegraph <graphuser>
useradd graph
usermod -a -G oraclegraph graph
passwd graph# As <graphuser>, configure the server by modifying the files /etc/oracle/graph/pgx.conf
vim /etc/oracle/graph/pgx.conf
# ...
# "pgx_realm": {
#   "implementation": "oracle.pg.identity.DatabaseRealm",
#   "options": {
#     "jdbc_url": "jdbc:oracle:thin:@myhost:1521/myservice",
#     "token_expiration_seconds": 3600,
# ...
...
"pgx_realm": {"implementation": "oracle.pg.identity.DatabaseRealm","options": {"jdbc_url": "jdbc:oracle:thin:@10.10.10.230:1521/freepdb1","token_expiration_seconds": 3600,
...# disable tls
vim /etc/oracle/graph/server.conf
{"port": 7007,"enable_tls": false,"enable_client_authentication": false,"working_dir": "/opt/oracle/graph/pgx/tmp_data"
}systemctl start pgx

1.3 安装Oracle Graph Client

su - graph
unzip Oracle\ Graph\ Client\ 24.2.0.zip
unzip oracle-graph-client-24.2.0.zip

用过下面的命令可以连接到PGX:

cd oracle-graph-client-24.2.0/bin/
./opg4j --base_url https://10.10.10.80:7007 --username ec

image.png
也可以通过PGX安装包含的client进行连接:

/opt/oracle/graph/bin/opg4j --base_url http://10.10.10.80:7007 --username e

image.png

1.4 访问PGX页面

从Oracle Graph Server 23.3开始,使用RPM安装的PGX是包含了图形界面,可以不用部署Oracle Graph Webapps(相关部署可以参看对应官方文档:https://docs.oracle.com/en/database/oracle/property-graph/24.2/spgdg/deploying-oracle-graph-server-web-server.html),现在可以通过10.10.10.80:7007/ui来访问PGX:
image.png
输入数据库对应账户名/密码:ec/ec即可访问:
image.png

2 SQL Property Graph

以在任何基于SQL的接口(如SQLDeveloper、SQLPLUS或SQLcl)中使用SQL属性图,也可以从使用JDBC的Java程序中使用。

  • 从已经schema中存在的数据库对象创建一个SQL属性图,比如:
    – 表(包含创建SQL属性图的限制中列出的一些例外)
    – 物化视图
    – 外部表
    – 任何上面数据库对象的同义词
  • 为SQL属性图创建同义词
  • Revalidate一个属性图
  • 在一个SQL属性图上运行图模式匹配查询
  • 删除一个SQL属性图

2.1 创建SQL属性图

使用CREATE PROPERTY GRAPH DDL语句,可以直接在Oracle数据库中创建属性图对象。
这里我们用一个官方文档的示例来演示创建SQL属性图,首先需要创建示例数据:

CREATE TABLE university (id NUMBER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1),name VARCHAR2(10),CONSTRAINT u_pk PRIMARY KEY (id));INSERT INTO university (name) VALUES ('ABC');
INSERT INTO university (name) VALUES ('XYZ');CREATE TABLE persons (person_id NUMBER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENTBY 1),name VARCHAR2(10),birthdate DATE,height FLOAT DEFAULT ON NULL 0,hr_data JSON,CONSTRAINT person_pk PRIMARY KEY (person_id));INSERT INTO persons (name, height, birthdate, hr_data)VALUES ('John', 1.80, to_date('13/06/1963', 'DD/MM/YYYY'), '{"department":"IT","role":"Software Developer"}');INSERT INTO persons (name, height, birthdate, hr_data)VALUES ('Mary', 1.65, to_date('25/09/1982', 'DD/MM/YYYY'), '{"department":"HR","role":"HR Manager"}');INSERT INTO persons (name, height, birthdate, hr_data)VALUES ('Bob', 1.75, to_date('11/03/1966', 'DD/MM/YYYY'), '{"department":"IT","role":"Technical Consultant"}');INSERT INTO persons (name, height, birthdate, hr_data)VALUES ('Alice', 1.70, to_date('01/02/1987', 'DD/MM/YYYY'), '{"department":"HR","role":"HR Assistant"}');CREATE TABLE student_of (s_id NUMBER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1),s_univ_id NUMBER,s_person_id NUMBER,subject VARCHAR2(10),CONSTRAINT stud_pk PRIMARY KEY (s_id),CONSTRAINT stud_fk_person FOREIGN KEY (s_person_id) REFERENCES persons(person_id),CONSTRAINT stud_fk_univ FOREIGN KEY (s_univ_id) REFERENCES university(id));INSERT INTO student_of(s_univ_id, s_person_id,subject) VALUES (1,1,'Arts');
INSERT INTO student_of(s_univ_id, s_person_id,subject) VALUES (1,3,'Music');
INSERT INTO student_of(s_univ_id, s_person_id,subject) VALUES (2,2,'Math');
INSERT INTO student_of(s_univ_id, s_person_id,subject) VALUES (2,4,'Science');CREATE TABLE friends (friendship_id NUMBER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1),person_a NUMBER,person_b NUMBER,meeting_date DATE,CONSTRAINT fk_person_a_id FOREIGN KEY (person_a) REFERENCES persons(person_id),CONSTRAINT fk_person_b_id FOREIGN KEY (person_b) REFERENCES persons(person_id),CONSTRAINT fs_pk PRIMARY KEY (friendship_id)
);INSERT INTO friends (person_a, person_b, meeting_date) VALUES (1, 3, to_date('01/09/2000', 'DD/MM/YYYY'));
INSERT INTO friends (person_a, person_b, meeting_date) VALUES (2, 4, to_date('19/09/2000', 'DD/MM/YYYY'));
INSERT INTO friends (person_a, person_b, meeting_date) VALUES (2, 1, to_date('19/09/2000', 'DD/MM/YYYY'));
INSERT INTO friends (person_a, person_b, meeting_date) VALUES (3, 2, to_date('10/07/2001', 'DD/MM/YYYY'));commit;

这里创建了四张表:university表存储大学名称信息,person表存储人员的信息,student_of表存储大学、人员以及专业关联的信息,friends表则存储包含第一次见面信息的人与人之间的关联信息。这里可以注意到每张表都有主键,后两张作为关联信息表的非主键列与前两张基础信息表的主键是有外键约束关系的。我们依托这四张表创建下面的SQL属性图:
image.png
语句如下:

CREATE PROPERTY GRAPH students_graphVERTEX TABLES (persons KEY (person_id)LABEL personPROPERTIES (person_id, name, birthdate AS dob)LABEL person_htPROPERTIES (height),university KEY (id))EDGE TABLES (friendsKEY (friendship_id)SOURCE KEY (person_a) REFERENCES persons(person_id)DESTINATION KEY (person_b) REFERENCES persons(person_id)PROPERTIES (friendship_id, meeting_date),student_ofSOURCE KEY (s_person_id) REFERENCES persons(person_id)DESTINATION KEY (s_univ_id) REFERENCES university(id)PROPERTIES (subject));

在执行时,前面的示例创建了一个SQL属性图对象,该对象使用schema中的表来定义其图元素表。请注意,创建新的SQL属性图对象只会存储属性图元数据,并且不会将数据从底层数据库对象复制到图元素表中。这意味着在查询SQL属性图时,所有的图查询都是对数据库中的当前图数据执行的。如果您有足够的权限,还可以指定另一个schema来包含SQL属性图。
示例中的图定义创建了一个图,该图包括:

  • 两个点图元素表:
    • person:表有一个唯一键person_id,与两个标签(LEBEL)关联:
      • person:这个标签将person_id、name和birthdate作为属性公开
      • person_ht:这个标签仅把height作为属性公开
    • university:这个表的标签是隐式推断的,默认情况下,基础数据库表的所有可见列都显示为属性。
  • 两个边图元素表:
    • friends: 这个边表引用person作为源点表和目标点表的基础数据库表。边表的源键和目标键(person_a和person_b)分别对应于源点表和目标点表的唯一键。边表的标签是根据图元素表的名称(在本例中为friends)自动推断的,并将friendship_id和meeting_date作为属性公开。
    • student_of:这个边表分别引用person和university作为源点表和目标点表的基础数据库表。边表的源键字和目标键字(s_person_id和s_univ_id)分别对应于源点表和目的点表的唯一键。边缘表的标签是根据图形元素表的名称(在本例中为student_of)自动推断的,并将subject公开为属性。

2.2 关于点和边图元素表

从底层数据库对象定义的SQL属性图的点和边存储在图元素表中。图元素表可以试点表也可以是边表。
Vertex graph element table(点图元素表):

  • 一个点图元素表通过VERTEX TABLES子句定义
  • 点表中的每一行对应图中的一个点
  • 一个点元素表名称独立于底层数据库对象名称
  • 默认情况下,点图元素表的名称和底层数据库对象名称一致
  • 点元素表名称在图中必须是唯一的。为了可以是源自于同一个底层数据库对象可以在SQL属性图中定义为多个图形元素表,必须使用AS子句指定多个元素表的名称

Edge graph element table(边图元素表):

  • 一个边图元素表通过EDGE TABLES子句定义
  • 它使用引用各个点表的source和destination关键字指定源点表和目标点表之间的直接关系
  • 边表中的每一行对应图中的一个边
  • 一个边元素表名称独立于底层数据库对象名称
  • 默认情况下,边图元素表的名称和底层数据库对象名称一致
  • 边素表名称在图中必须是唯一的。一个边表名字不能和点表和其他边表名称一致

2.3 关于点和边表建

在SQL属性图中的每个点表和边表都必须有一个键,用以标识SQL属性图中一个唯一的点或一个边。键是由底层表中的一列或多列定义的。基于从底层表的一个现有主键或唯一约束来隐式推断这个键、键是唯一的。
然而需要注意的是,使用唯一约束的键列需要用ENFORCED MODE来创建图,否则使用TRUSTED MODE来使用没有唯一约束的键列。
点和边表的键可以使用下面任意的内建的数据类型列来定义:

  • VARCHAR2
  • NVARCHAR2
  • NUMBER
  • BINARY_FLOAT
  • BINARY_DOUBLE
  • CHAR
  • NCHAR
  • DATE
  • INTERVAL (both YEAR TO MONTH and DAY TO SECOND)
  • TIMESTAMP

注意,TIMESTAMP WITH TIME ZONE是不被支持的。
Vertex Table Key(点表键):

  • 默认情况下,点表的键自动从底层数据库对象的一个单一的主键或者唯一键约束定义。如果二者同时存在,则使用主键约束优先于唯一键约束
  • 如果点表的键是自动基于一个单一的唯一键推断的,那么这个列除了UNIQUE以外也必须是NOT NULL
  • 如果底层数据库对象没有包含唯一约束来强制控制数据唯一性,那么必须明确在VERTEX TABLES子句中显式定义的KEY的子子句,来确定点表定义唯一键的列。注意,这个列的名称必须与底层数据库对象的名称相匹配
  • 复合点表键也是支持的
    Edge Table Key(边表键):
  • 默认情况下,边表的键自动从底层数据库对象的一个单一的主键或者唯一键约束定义。如果二者同时存在,则使用主键约束优先于唯一键约束
  • 如果边表的键是自动基于一个单一的唯一键推断的,那么这个列除了UNIQUE以外也必须是NOT NULL
  • 如果底层数据库对象没有包含唯一约束来控强制制数据唯一性,那么必须明确在EDGE TABLES子句中显式定义的KEY的子子句,来确定点表定义唯一键的列。注意,这个列的名称必须与底层数据库对象的名称相匹配
  • 默认情况下,源和目标表键自动从边表和底层源和目标表之间的外键约束分别获取
  • 然而,在一下任意情况下必须在源和目标点表中明确指定KEY子子句:
    • 在边表和关联点表之间没有外键约束
    • 在边表和关联点表之间有多个外键约束
    • 边表以及它的源和目标点表的底层数据库对象为物化视图或外部表

2.4 关于标签(LABEL)和属性(PROPERTY)

标签可以与一个或多个图元素表相关联,并且它们丰富了图定义。标签可以定义为具有或不具有属性。可以选择为图中的点表和边表定义LABEL和PROPERTIES。如果未指定,则会自动为图形元素表分配一个带有图元素表名称的标签,并且所有可见列都显示为属性,使用列名作为属性名称。
LABEL(标签):

  • 默认情况下,点表和边表自动使用各自的元素表名称分配标签
  • DEFAULT LABEL子子句也可以用于显式的应用上一条规则
  • 可以使用LABEL子子句显示的给点和边图元素表指定一个新的标签名称
  • 一个图元素表可以有多个标签
  • 同一个标签可以被多个图元素表共享
    在慢满足一下条件的情况下,一个标签可以被不止一个图元素表使用(shared label):
    • 共享此标签的所有图元素表都声明相同的一组属性名称。请注意,属性顺序在标签定义中并不重要。
    • 由同一属性名称公开的不同列或值表达式具有union compatible类型。

Properties(属性):

  • 默认情况下,在没有定义标签或在属性图定义时使用DEFAULT LABEL子子句,点表和边表的所有可见列会自动公开为属性
  • 使用任意Oracle内建数据类型的列都可以作为SQL属性图中标签的属性被公开。包含虚拟列、JSON、CLOB和BLOB。
    但是下面的不被支持:
    • XMLType和SDO_GEOMETRY
    • 在XMLType列上存储为二进制XML的SQL/XML值表达式,和在SDO_GEOMETRY object数据类型列使用SDO_GEOMETRY内建函数返回的是属性支持类型的值则是允许的。不支持任何通用对象数据类型和用户定义的数据类型及其对应的SQL运算符值表达式。
    • ANYTYPE
  • 在SQL属性图创建时,点和边属性的数据类型确定如下:
    • 与不同标签关联的不同属性与基础数据库列有相同的数据类型
    • 来自不同标签的具有相同名称的属性与基础数据库列具有相同的数据类型。然而你必须在创建SQL属性图的时候使用ALLOW MIXED PROPERTY TYPES选项
    • 来自同一标签的具有相同名称的属性将具有UNION ALL兼容类型的基础数据库列,也必须在创建SQL属性图的时候使用ALLOW MIXED PROPERTY TYPES选项
  • 如果要显式定义标签的点或边属性,则支持以下属性声明:
    • PROPERTIES [ARE] ALL COLUMNS:将图元素表的所有可见列作为标签属性公开。但是,如果在创建SQL属性图之后,在源数据库对象中添加或删除了任何列,则这些列将不会反映在图上
    • PROPERTIES [ARE] ALL COLUMNS EXCEPT(<column_names_list>):将图元素表的所有可见列作为标签属性公开,但显式列出的列除外
    • PROPERTIES(<list_of_column_names>):仅将图元素表中指定的的列作为标签属性公开。属性名称默认为列名
    • PROPERTIES(<column_name AS property_name,…>):和上一条一样,但是AS property_name附加到column_name,然后property_name用作属性名称
    • PROPERTIES(<column_expressions AS property_name,…>):声明一个属性,该属性是列上的表达式。在这种情况下,AS子句是强制性的。值表达式可以是在标量数据类型列上定义的SQL运算符表达式,也可以是JSON表达式。
    • NO PROPERTIES:没有列在标签中公开
  • 伪列(Pseudo-column)不能作为标签属性公开(这里我怀疑官方文档有误,打成了Peudo-column)

2.5 使用Graph Option来创建SQL属性图

您可以使用图选项(Graph Option)来控制SQL属性图形在创建时的行为。
可以使用options子句在CREATE PROPERTY GRAPH DDL语句的末尾指定图选项。可以根据需要使用MODE或MIXED PROPERTY TYPES选项,也可以同时使用这两种选项。

2.5.1 使用OPTION来制定图的MODE

可以下面的图选项在创建SQL属性图的时候指定图的MODE:

  • ENFORCED MODE:这确保了在底层数据库表上存在对唯一键约束的依赖关系。如果满足以下任何条件,在创建SQL属性图时使用这个模式,CREATE PROPERTY GRAPH语句将引发错误:
    • 图元素表指定的点或边表键既不是主键也不是NOT NULL的唯一键
    • 没有明确的图元素表的点或边表键并且系统无法系统识别默认的点或边表键,比如在底层数据库表中没有单独的主键或单独的NOT NULL唯一约束的列
    • 对于指定的边的源键和对应的源点键,或者对于指定边的目标键和对应目标的点键,在底层表之间不存在对应的外键
    • 边表在没有源或目标明确的键,系统无法隐式推断键,因为边表和引用的源(或目标)点表之间没有单个外键约束
  • TRUSTED MODE (默认):使用TRUSTED MODE时,不依赖于底层数据库表上的唯一键约束。因此,前面的例子在TRUSTED MODE下运行时不会抛出任何错误。这意味着,如果选择使用此选项,则必须保证每个图形元素表上主键的唯一性,以及边表及其源表和目标表之间的有效外键引用。否则,图查询结果可能不正确,因为没有达到预期的保证。
2.5.2 使用OPTION来允许/禁止不同属性类型共享属性名称

可以使用下面的值来指定MIXED PROPERTY TYPES选项:

  • ALLOW MIXED PROPERTY TYPES:这个值确保了:
    • 如果两个拥有相同名称的属性属于不同标签,那么它们可以有完全不同的类型
    • 如果在共享标签内共享属性名称,则它们应该是所有所有可兼容的类型
      比如FLOAT和VARCHAR就不兼容,而FLAT和BINARY_DOUBLE则是兼容的
  • DISALLOW MIXED PROPERTY TYPES (默认):这确保了具有相同名称的属性应严格为相同的数据类型。这适用于所有标签,无论它们与单个或多个图元素表相关联。

2.6 相关权限

这里直接贴出截图:
image.png

2.7 Revalidating and Drop

ALTER PROPERTY GRAPH graph_name COMPILE;
DROP PROPERTY GRAPH graph_name;

2.8 JSON支持

SQL属性图是支持JSON数据类型的。

3 SQL Graph查询

这里是根据上一节创建SQL属性图,下面是一个范例:

SELECT * FROM GRAPH_TABLE (students_graphMATCH(a IS person) -[e IS friends]-> (b IS person WHERE b.name = 'Mary')WHERE a.name='Bob'COLUMNS (a.name AS person_a, b.name AS person_b)
);

image.png
使用SELECT FROM GRAPH_TABLE语句和MATCH子句:

  • FROM子句:包括GRAPH_TABLE运算符,该运算符将输入的图名称作为第一个参数
  • MATCH子句:表示要在SQL属性图上搜索的图形元素模式(点或边模式)。它可以选择性地包括元素模式WHERE子句,如前面的示例((b IS person WHERE b.name=‘Mary’))查询中所示。此界内WHERE子句可以访问任何匹配的变量
  • WHERE子句:这是一个可选的界外WHERE子句。与元素模式WHERE子句类似,它可以访问所有图形模式变量,并在MATCH子句中表达适用于整个模式的谓词。
  • COLUMNS子句:包含查询输出的列

关于更多的pattern(模式),请查看官方文档https://docs.oracle.com/en/database/oracle/property-graph/24.2/spgdg/sql-graph-queries.html

总结

本期部署了PGX,并演示了SQL属性图的创建、重定义、查询等,这里需要说明的是PGX上SQL属性图是无法可视化展示的,那么用哪种方式可以可视化,下期继续分享。
老规矩,知道写了些啥。

相关文章:

数据库管理-第187期 23ai:怎么用SQL创建图(20240510)

数据库管理187期 2024-05-10 数据库管理-第187期 23ai:怎么用SQL创建图&#xff08;20240510&#xff09;1 安装PGX1.1 数据库配置对应用户1.2 使用RPM包安装Graph Server1.3 安装Oracle Graph Client1.4 访问PGX页面 2 SQL Property Graph2.1 创建SQL属性图2.2 关于点和边图元…...

基于VOLOPV2的自动驾驶环境感知系统

基于VOLOPV2的自动驾驶环境感知系统是一个复杂的系统&#xff0c;它主要负责实时检测并识别周围环境中的各种物体和信息&#xff0c;为自动驾驶车辆提供必要的感知数据。以下是对该系统的一个简要介绍&#xff1a; 环境感知是自动驾驶系统中的一个关键部分&#xff0c;它依赖于…...

使用Python爬虫会遇到的问题和解决方法(包含案例)

一、HTTP错误&#xff08;如403 Forbidden&#xff09; 问题描述&#xff1a; 当使用requests库发起请求时&#xff0c;可能会遇到HTTP 403 Forbidden错误&#xff0c;这通常意味着服务器理解了请求&#xff0c;但是拒绝执行它。 解决方法&#xff1a; 1.设置headers&#xf…...

Spring Boot 读取配置优先级顺序是什么?

在使用 Spring Boot 进行开发时&#xff0c;配置文件是非常重要的一部分&#xff0c;它可以用来配置应用程序的行为、数据源、日志级别等信息。 但是&#xff0c;当配置文件中存在多个配置来源时&#xff0c;Spring Boot 是如何确定读取配置的优先级顺序的呢&#xff1f; 本文…...

数据挖掘(二)数据预处理

前言 基于国防科技大学 丁兆云老师的《数据挖掘》 数据挖掘 数据挖掘&#xff08;一&#xff09;数据类型与统计 2、数据预处理 2.1数据清理 缺失值处理&#xff1a; from sklearn.impute import SimpleImputer# 创建一个SimpleImputer对象&#xff0c;指定缺失值的处理策略…...

docker学习-docker常用其他命令整理

随便写写&#xff0c;后面有空再更新 镜像命令&#xff0c;容器命令已在之前略有更新&#xff0c;这次不写&#xff0c; 一、后台启动命令 # 命令 docker run -d 容器名 # 例子 docker run -d centos # 启动centos&#xff0c;使用后台方式启动 # 问题&#xff1a; 使用doc…...

【matlab基础知识代码】(十六)代数方程的图解法多项式型方程的准解析解方法

>> ezplot(exp(-3*t)*sin(4*t2)4*exp(-0.5*t)*cos(2*t)-0.5,[0 5]), line([0 5],[0 0]) 验证 >> t0.6738; >> exp(-3*t)*sin(4*t2)4*exp(-0.5*t)*cos(2*t)-0.5 ans -2.9852e-04 >> ezplot(x^2*exp(-x*y^2/2)exp(-x/2)*sin(x*y)) >> hold on; …...

智能奶柜:健康生活新风尚

智能奶柜&#xff1a;健康生活新风尚 在快节奏的都市生活中&#xff0c;健康与便利成为了现代人的双重追求。而在这两者交汇之处&#xff0c;智能奶柜应运而生&#xff0c;它不仅是科技与生活的完美融合&#xff0c;更是日常营养补给的智慧之选。 清晨的第一缕温暖 —— 新鲜…...

SpringBoot 集成 FFmpeg 解析音视频

文章目录 1 摘要2 核心 Maven 依赖3 核心代码3.1 FFmpeg 解析音视频工具类3.2 音视频文件信息参数3.3 音视频文件上传Controller3.4 application 配置文件 4 测试数据4.1 视频文件解析4.2 音频文件解析 5 注意事项5.1 文件必须在本地 6 推荐参考文档7 Github 源码 1 摘要 FFmp…...

基于单片机的直流电机测速装置研究与设计

摘要: 基于单片机的直流电机测速装置采用了对直流电机的中枢供电回路串联取样电阻的方式实现对电机转速的精确实时测量。系统由滤波电路、信号放大电路、单片机控制电路以及稳压电源等功能模块电路构成。工作过程中高频磁环作为载体&#xff0c;利用电磁感应的基本原理对直流电…...

【快捷部署】022_ZooKeeper(3.5.8)

&#x1f4e3;【快捷部署系列】022期信息 编号选型版本操作系统部署形式部署模式复检时间022ZooKeeper3.5.8Ubuntu 20.04tar包单机2024-05-07 一、快捷部署 #!/bin/bash ################################################################################# # 作者&#xff…...

引领AI数据标注新纪元:景联文科技为智能未来筑基

在人工智能蓬勃发展的今天&#xff0c;数据如同燃料&#xff0c;驱动着每一次技术飞跃。在这场智能革命的浪潮中&#xff0c;景联文科技凭借其深厚的专业实力与前瞻性的战略眼光&#xff0c;正站在行业前沿&#xff0c;为全球的人工智能企业提供坚实的数据支撑。 全国布局&…...

多模态大语言模型和 Apple 的 MM1

原文地址&#xff1a;multimodal-large-language-models-apples-mm1 2024 年 4 月 13 日 抽象是计算机科学中最关键的概念之一&#xff0c;具有一些最强大的影响。从简单的角度来看&#xff0c;抽象就是将某一事物应用于多种不同情况的能力。例如&#xff0c;如果你创造了一种…...

算法day04

第一题 &#xff1a; 209. 长度最小的子数组 有上题可知&#xff0c;我们会采用双指针和单调性的思路来解决 我们本题采用左右双指针从数组的0位置同向前进&#xff0c;所以将此类模型称为滑块&#xff1b; 步骤思路如下&#xff1a; 步骤一&#xff1a; 定义所有双指针都指向…...

电信网关配置管理系统 rewrite.php 文件上传致RCE漏洞复现

0x01 产品简介 中国电信集团有限公司(英文名称“China Telecom”、简称“中国电信”)成立于2000年9月,是中国特大型国有通信企业、上海世博会全球合作伙伴。电信网关配置管理系统是一个用于管理和配置电信网络中网关设备的软件系统。它可以帮助网络管理员实现对网关设备的远…...

从零学算法14

14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 示例 1&#xff1a; 输入&#xff1a;strs [“flower”,“flow”,“flight”] 输出&#xff1a;“fl” 示例 2&#xff1a; 输入&#xff1a;strs [“d…...

[入门] Unity Shader前置知识(5) —— 向量的运算

在Unity中&#xff0c;向量无处不在&#xff0c;我想很多人都使用过向量类的内置方法 normalized() 吧&#xff0c;我们都知道该方法是将其向量归一化从而作为一个方向与速度相乘&#xff0c;以达到角色朝任一方向移动时速度都相等的效果&#xff0c;但内部具体是如何将该向量进…...

html的i标签 “\e905“ font-family 字体没有效果

一、html的i标签 “\e905” 没有效果 在HTML和CSS中&#xff0c;\e905 这样的字符通常与字体图标&#xff08;Font Icons&#xff09;或自定义字体&#xff08;Custom Fonts&#xff09;中的Unicode字符相关。具体来说&#xff0c;\e905 是一个Unicode转义序列&#xff0c;但它…...

Golang reflect.MakeFunc() 的用法及示例

Golang 作为一门强类型语言&#xff0c;在某些场景下&#xff0c;我们需要动态地创建函数或者修改函数&#xff0c;这个时候就可以使用反射的方法去实现。在反射中&#xff0c;我们可以使用 reflect.MakeFunc() 方法来创建一个新的函数&#xff0c;本文我将介绍使用反射及其 Ma…...

深入学习和理解Django视图层:处理请求与响应

title: 深入学习和理解Django视图层&#xff1a;处理请求与响应 date: 2024/5/4 17:47:55 updated: 2024/5/4 17:47:55 categories: 后端开发 tags: Django请求处理响应生成模板渲染表单处理中间件异常处理 第一章&#xff1a;Django框架概述 1.1 什么是Django&#xff1f;…...

【MySQL】SQL基本知识点DDL(1)

目录 1.SQL分类&#xff1a; 2.DDL-数据库操作 3.DDL-表操作-创建 4.DDL-表操作-查询 5.DDL-表操作-数据类型 6.DDL-表操作-修改 1.SQL分类&#xff1a; 2.DDL-数据库操作 3.DDL-表操作-创建 注意&#xff1a;里面的符号全部要切换为英文状态 4.DDL-表操作-查询 5.DDL…...

短剧奔向小程序,流量生意如何开启?

随着移动互联网的飞速发展&#xff0c;小程序作为一种轻量级、易传播的应用形态&#xff0c;逐渐在各个领域展现出其独特的商业价值。而最近爆火的短剧小视频作为一种受众广泛的娱乐形式&#xff0c;与小程序结合后&#xff0c;不仅为观众提供了更为便捷的观看体验&#xff0c;…...

微服务下的技术栈架构解析

微服务是一种架构风格&#xff0c;它将一个复杂的应用拆分成多个独立自治的服务&#xff0c;每个服务负责应用程序中的一小部分功能。这些服务通过定义良好的API进行通信&#xff0c;通常是HTTP RESTful API或事件流。微服务架构的主要特点包括单一职责、自治性、可独立部署和扩…...

Mesa3D图形库与NIR(New Intermediate Representation)

Mesa 是一个开源图形库&#xff0c;为 Unix 和 Linux 系统提供了 OpenGL 和 Vulkan API 的实现。它也支持其他图形 API&#xff0c;如OpenCL、OpenGL ES 和 Vulkan。Mesa 项目的目标是为开源社区提供高性能的图形库&#xff0c;使得开源操作系统能够充分利用现代图形硬件。 Me…...

C++:模板初阶

文章目录 泛型编程函数模板概念函数模板格式函数模板的原理函数模板的实例化模板参数的匹配原则 模板类类模板的定义格式类模板实例化 泛型编程 如何实现一个通用的交换函数呢&#xff1f; 函数重载可以帮助我们完成 void Swap(int& left, int& right) {int temp l…...

为什么要学Python?学Python有什么用?

为什么要学Python&#xff1f;学Python有什么用&#xff1f; 在当今的数字化时代&#xff0c;编程已成为一项宝贵的技能。Python&#xff0c;作为一种流行的编程语言&#xff0c;因其易于学习和强大的功能而受到全球开发者的青睐。本文将探讨学习Python的原因和它的实际应用&am…...

Linux磁盘IO、网络IO、零拷贝详解

一、什么是I/O&#xff1f; 在计算机操作系统中&#xff0c;所谓的I/O就是输入&#xff08;input&#xff09;和输出&#xff08;output&#xff09;,也可以理解为读&#xff08;read&#xff09;和写&#xff08;write&#xff09;,针对不同的对象&#xff0c;I/O模式可以划分…...

工业交换机外壳材质大比拼,看看哪种外壳适合你

在工业领域里&#xff0c;交换机就像我们的网络心脏&#xff0c;时刻跳动着确保信息畅通无阻。而它的外壳&#xff0c;就是保护这颗“心脏”的铠甲。今天&#xff0c;咱们就来聊聊这些铠甲——工业交换机外壳的材质和防护等级&#xff0c;看看它们如何守护我们的网络世界。 首…...

智慧公厕的技术基础、保障技术和应用价值

近年来&#xff0c;随着信息技术的快速发展&#xff0c;智慧公厕逐渐成为城市管理的热点项目。智慧公厕利用物联网技术与大数据、云计算、网络通信、自动化控制等先进技术相结合&#xff0c;公共厕所的管理变得更加快捷高效&#xff0c;实现了真正的智能化使用和智慧化管理。下…...

思腾合力受邀参加VALSE 2024视觉与学习青年学者研讨会

在充满学术氛围的五月&#xff0c;思腾合力荣幸受邀参加了于2024年5月5-7日在重庆举行的第十四届VALSE大会。作为视觉与学习领域的顶级交流平台&#xff0c;VALSE大会每年都吸引着全国专家与学者的目光。 本次大会不仅延续了往届的高水平学术研讨&#xff0c;还进一步拓宽了研究…...