Linux环境docker安装Neo4j,以及Neo4j新手入门教学(超详细版本)
目录
- 1、 图数据库Neo4j简介
- 1.1 什么是图数据库
- 1.2 能解决什么痛点
- 1.3 对比关系型数据库
- 1.4 什么是Neo4j
- 1.5 Neo4j的构建元素
- 2. 环境搭建
- 2.1 安装Neo4j Community Server
- 2.2 docker 安装Neo4j Community Server
- 2.3 Neo4j Desktop安装
- 3. Neo4j - CQL使用
- 3.1 Neo4j - CQL简介
- 3.2 常用命令
- CREATE创建
- MATCH查询
- RETURN返回
- WHERE子句
- DELETE删除
- REMOVE删除
- SET子句
- ORDER BY排序
- UNION子句
- LIMIT和SKIP子句
- NULL值
- IN操作符
- INDEX索引
- UNIQUE约束
- DISTINCT
- 3.3 常用函数
- 3.4 neo4j-admin使用
- 3.5 利用CQL构建西游关系图谱
1、 图数据库Neo4j简介
1.1 什么是图数据库
图数据库:是基于图论实现的一种NoSQL数据库,其数据结构是和查询方式是以图论为基础的,图数据库主要用于存储更多的连接数据。
图论:用多个节点代表事物,用节点之间连线代表事务之间关系的图形。
1.2 能解决什么痛点
随着社交、电商、金融、零售、物联网等行业的快速发展,现实社会织起了了一张庞大而复杂的关系网,传统数据库很难处理关系运算。大数据行业需要处理的数据之间的关系随数据量呈几何级数增长, 急需一种支持海量复杂数据关系运算的数据库,图数据库应运而生。
使用场景:
- 社交领域:实现好友推荐等
- 电商领域:实现商品实时推荐等
- 金融领域:银行用图数据库做风控处理等
- ………………
1.3 对比关系型数据库
美国心理学家米尔格伦提出的“六度空间“理论:你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多六个人你就能够认识任何一个陌生人。
关系型数据库做法:一张用户表,一张用户和用户之间的关系表,每个人认识的没有一千也有八百,想找出想要的数据,每深入一层,难度成几何增长,但使用图数据库,难度大大降低。在关系型数据库和图数据库(Neo4j)之间进行了实验:在一个社交网络里找到最大深度为5的 朋友的朋友,他们的数据集包括100万人,每人约有50个朋友。
实验结果如下:
1.4 什么是Neo4j
Neo4j是一个开源的NoSQL图形数据库,2003 年开始开发,使用 scala和java 语言,2007年开始发布。是世界上最先进的图数据库之一,提供原生的图数据存储,检索和处理;采用属性图模型(Property graph model),极大的完善和丰富图数据模型;专属查询语言 Cypher,直观,高效;
Neo4j的特性:
- SQL就像简单的查询语言Neo4j CQL
- 它遵循属性图数据模型
- 它通过使用Apache Lucence支持索引
- 它支持UNIQUE约束
- 它包含一个用于执行CQL命令的UI:Neo4j数据浏览器
- 它支持完整的ACID(原子性,一致性,隔离性和持久性)规则
- 它采用原生图形库与本地GPE(图形处理引擎)
- 它支持查询的数据导出到JSON和XLS格式 它提供了REST API,可以被任何编程语言(如Java,Spring,Scala等)访问
- 它提供了可以通过任何UI MVC框架(如Node JS)访问的Java脚本 它支持两种Java API:Cypher API和Native Java API来开发Java应用程序
Neo4j的优点:
- 它很容易表示连接的数据
- 检索/遍历/导航更多的连接数据是非常容易和快速的
- 它非常容易地表示半结构化数据
- Neo4j CQL查询语言命令是人性化的可读格式,非常容易学习
- 使用简单而强大的数据模型
- 它不需要复杂的连接来检索连接的/相关的数据,因为它很容易检索它的相邻节点或关系细节没有 连接或索引
1.5 Neo4j的构建元素
Neo4j图数据库主要有以下构建元素:
- 节点
- 属性
- 关系
- 标签
- 数据浏览器
节点
- 节点(Node)是图数据库中的一个基本元素,用来表示一个实体记录,就像关系数据库中的一条记录一样。在Neo4j中节点可以包含多个属性(Property)和多个标签(Label)。
- 节点是主要的数据元素
- 节点通过关系连接到其他节点
- 节点可以具有一个或多个属性(即,存储为键/值对的属性)
- 节点有一个或多个标签,用于描述其在图表中的作用
属性
- 属性(Property)是用于描述图节点和关系的键值对。其中Key是一个字符串,值可以通过使用任何 Neo4j数据类型来表示
- 属性是命名值,其中名称(或键)是字符串
- 属性可以被索引和约束
- 可以从多个属性创建复合索引
关系
关系(Relationship)同样是图数据库的基本元素。当数据库中已经存在节点后,需要将节点连接起来 构成图。关系就是用来连接两个节点,关系也称为图论的边(Edge) ,其始端和末端都必须是节点,关系不 能指向空也不能从空发起。关系和节点一样可以包含多个属性,但关系只能有一个类型(Type) - 关系连接两个节点
- 关系是方向性的
- 节点可以有多个甚至递归的关系
- 关系可以有一个或多个属性(即存储为键/值对的属性)
基于方向性,Neo4j关系被分为两种主要类型:单向关系和双向关系
标签
标签(Label)将一个公共名称与一组节点或关系相关联,节点或关系可以包含一个或多个标签。 我们可以为现有节点或关系创建新标签,我们可以从现有节点或关系中删除标签。
标签用于将节点分组
- 一个节点可以具有多个标签
- 对标签进行索引以加速在图中查找节点
- 本机标签索引针对速度进行了优化
Neo4j Browser
一旦我们安装Neo4j,我们就可以访问Neo4j数据浏览器 http://localhost:7474/browser/
个人理解:
- 标签类似MySQL中的表
- 节点类似MySQL中的每行数据对象
- 属性类似MySQL中的每个字段
- 关系类似MySQL中关联表中的数据
2. 环境搭建
2.1 安装Neo4j Community Server
注意: neo4j 4.3及以上版本对应的java版本是jdk11
jdk8可以下载Neo4j Community Edition 3.5.28
下载:https://pan.baidu.com/s/1lvn55ZSUknaicVNdMblPEQ
提取码:8a54
文档:https://neo4j.com/docs/operations-manual/3.5/
进入到bin目录,执行 neo4j console
在浏览器中访问:http://localhost:7474
使用用户名neo4j和默认密码neo4j进行连接,然后会提示更改密码。
2.2 docker 安装Neo4j Community Server
注意需要开放以下端口:
- 7474 for HTTP
- 7473 for HTTPS
- 7687 for Bolt
拉取镜像
docker pull neo4j:3.5.22-community
运行镜像
docker run -d -p 7474:7474 -p 7687:7687 --name neo4j \
-e "NEO4J_AUTH=neo4j/123456" \
-v /usr/local/soft/neo4j/data:/data \
-v /usr/local/soft/neo4j/logs:/logs \
-v /usr/local/soft/neo4j/conf:/var/lib/neo4j/conf \
-v /usr/local/soft/neo4j/import:/var/lib/neo4j/import \
neo4j:3.5.22-community
2.3 Neo4j Desktop安装
下载地址:https://neo4j.com/download-center/
启动后可以选择安装本地neo4j数据库或者连接远程neo4j数据库。
3. Neo4j - CQL使用
3.1 Neo4j - CQL简介
Neo4j的Cypher语言是为处理图形数据而构建的,CQL代表Cypher查询语言。像Oracle数据库具有查询 语言SQL,Neo4j具有CQL作为查询语言。
- 它是Neo4j图形数据库的查询语言。
- 它是一种声明性模式匹配语言 它遵循SQL语法。
- 它的语法是非常简单且人性化、可读的格式。
3.2 常用命令
官方英文文档:https://neo4j.com/docs/cypher-manual/3.5/clauses/
中文命令文档:https://www.w3cschool.cn/neo4j/neo4j_cql_match_command.html
CREATE创建
create语句是创建模型语句用来创建数据模型
创建节点
#创建带标签和属性的节点并返回节点
create (n:person {name:'如来'}) return n
创建关系
#使用新节点创建关系
CREATE (n:person {name:'杨戬'})-[r:师傅]->(m:person {name:'玉鼎真人'}) return type(r);
#使用已知节点创建带属性的关系
create (n:person {name:'沙僧'}) return n;
create (n:person {name:'唐僧'}) return n;match (n:person {name:'沙僧'}),(m:person{name:'唐僧'})
create (n)-[r:`师傅`{relation:'师傅'}]->(m)
return r
#检索关系节点的详细信息
match (n:person)-[r]-(m:person) return n,m
创建全路径
create p=(:person{name:'蛟魔王'})-[:义兄]->(:person{name:'牛魔王'})<-[:义兄]- (:person {name:'鹏魔王'}) return p
MATCH查询
Neo4j CQL MATCH命令用于
- 从数据库获取有关节点和属性的数据
- 从数据库获取有关节点,关系和属性的数据
MATCH (n:person) RETURN n LIMIT 25
RETURN返回
Neo4j CQL RETURN子句用于
- 检索节点的某些属性
- 检索节点的所有属性
- 检索节点和关联关系的某些属性
- 检索节点和关联关系的所有属性
MATCH (n:person) RETURN id(n),n.name,n.tail,n.relation
WHERE子句
像SQL一样,Neo4j CQL在CQL MATCH命令中提供了WHERE子句来过滤MATCH查询的结果。
MATCH (n:person) where n.name='牛魔王' or n.name='唐僧' RETURN n #创建关系
match (n:person),(m:person)
where n.name='唐僧' and m.name='如来'
create (n)-[r:BOSS]->(m)
return n.name,type(r),m.name
DELETE删除
Neo4j使用CQL DELETE子句
- 删除节点。
- 删除节点及相关节点和关系。
# 删除节点 (前提:节点不存在关系)
MATCH (n:person{name:"如来"}) delete n # 删除关系
MATCH (n:person{name:"如来"})<-[r]- (m) delete r return type(r)
MATCH (n:person{name:"如来"})-[r]->(m) delete r return type(r)MATCH (n:person{name:"如来"}) delete n
# 删除整个标签内容
match (n:person) detach delete n
REMOVE删除
有时基于客户端要求,我们需要向现有节点或关系添加或删除属性。我们使用Neo4j CQL REMOVE子句来删除节点或关系的现有属性。
- 删除节点或关系的标签
- 删除节点或关系的属性
#创建多个节点
create (a:person {name:"test111",age:20,sex:"男"}),
(b:person {name:"test222",age:30,sex:"女"}),
(c:person {name:"test333",age:40,sex:"男"})
return a,b,c
#删除属性
MATCH (n:person {name:"test111"}) remove n.age return n #删除标签
match (m:person {name:"test222"}) remove m:person return m
SET子句
有时,根据我们的客户端要求,我们需要向现有节点或关系添加新属性。要做到这一点,Neo4j CQL提 供了一个SET子句。
- 向现有节点或关系添加新属性
- 添加或更新属性值
MATCH (n:person {name:"test111"}) set n.age=32 return n
ORDER BY排序
Neo4j CQL在MATCH命令中提供了“ORDER BY”子句,对MATCH查询返回的结果进行排序。
我们可以按升序或降序对行进行排序。默认情况下,它按升序对行进行排序。 如果我们要按降序对它们 进行排序,我们需要使用DESC子句。
#升序
MATCH (n:person) RETURN id(n),n.name order by id(n) asc
#降序
MATCH (n:person) RETURN id(n),n.name order by id(n) desc
UNION子句
与SQL一样,Neo4j CQL有两个子句,将两个不同的结果合并成一组结果
- UNION:它将两组结果中的公共行组合并返回到一组结果中。 它不从两个节点返回重复的行。
限制:结果列类型和来自两组结果的名称必须匹配,这意味着列名称应该相同,列的数据类型应该相同。 - UNION ALL:它结合并返回两个结果集的所有行成一个单一的结果集。它还返回由两个节点重复行。
限制:结果列类型,并从两个结果集的名字必须匹配,这意味着列名称应该是相同的,列的数据类型应该 是相同的。
MATCH (n:person) RETURN n.name as name
UNION
MATCH (m:person) RETURN m.name as name MATCH (n:person) RETURN n.name as name
UNION all
MATCH (m:person) RETURN m.name as name
LIMIT和SKIP子句
Neo4j CQL已提供LIMIT子句和 SKIP 来过滤或限制查询返回的行数。
LIMIT返回前几行,SKIP忽略前几行。
# 前两行
MATCH (n:person) RETURN n.name limit 2
# 忽略前两行
MATCH (n:person) RETURN n.name SKIP 2
NULL值
Neo4j CQL将空值视为对节点或关系的属性的缺失值或未定义值。
当我们创建一个具有现有节点标签名称但未指定其属性值的节点时,它将创建一个具有NULL属性值的新节点。
match (n: person) where n.label is null return id(n),n.name,n.tail,n.label
IN操作符
与SQL一样,Neo4j CQL提供了一个IN运算符,以便为CQL命令提供值的集合。
match (n: person) where n.name in['沙僧','唐僧'] return id(n),n.name,n.tail,n.label
INDEX索引
Neo4j SQL支持节点或关系属性上的索引,以提高应用程序的性能。
我们可以为具有相同标签名称的所有节点的属性创建索引。
我们可以在MATCH或WHERE或IN运算符上使用这些索引列来改进CQL Command的执行。
Neo4J索引操作
- Create Index 创建索引
- Drop Index 丢弃索引
# 创建索引
create index on :person (name)
# 删除索引
drop index on : person (name)
UNIQUE约束
在Neo4j数据库中,CQL CREATE命令始终创建新的节点或关系,这意味着即使您使用相同的值,它也会 插入一个新行。 根据我们对某些节点或关系的应用需求,我们必须避免这种重复。像SQL一样,Neo4j数据库也支持对NODE或Relationship的属性的UNIQUE约束
UNIQUE约束的优点
- 避免重复记录。
- 强制执行数据完整性规则
#创建唯一约束
create constraint on (n:person) assert n.name is unique#删除唯一约束
drop constraint on (n:person) assert n.name is unique
DISTINCT
这个函数的用法就像SQL中的distinct关键字,返回的是所有不同值。
match (n:person) return distinct(n.name)
3.3 常用函数
字符串函数
与SQL一样,Neo4J CQL提供了一组String函数,用于在CQL查询中获取所需的结果。
MATCH (e) RETURN id(e),e.name,substring(e.name,0,2)
AGGREGATION聚合
和SQL一样,Neo4j CQL提供了一些在RETURN子句中使用的聚合函数。 它类似于SQL中的GROUP BY 子句。
我们可以使用MATCH命令中的RETURN +聚合函数来处理一组节点并返回一些聚合值。
MATCH (e) RETURN count(e)
关系函数
Neo4j CQL提供了一组关系函数,以在获取开始节点,结束节点等细节时知道关系的细节。
match (a)-[r] ->(b) return id(r),type(r)
3.4 neo4j-admin使用
数据库备份
对Neo4j数据进行备份、还原、迁移的操作时,要关闭neo4j
cd %NEO4J_HOME%/bin
#关闭
neo4j neo4j stop
#备份
neo4j-admin dump --database=graph.db --to=/neo4j/backup/graph_backup.dump
数据库恢复
还原、迁移之前 ,要关闭neo4j服务。
#数据导入
neo4j-admin load --from=/neo4j/backup/graph_backup.dump --database=graph.db – force
#重启服务
neo4j start
3.5 利用CQL构建西游关系图谱
远程文件地址:(文件放任意位置,配置Nginx之后能访问到就行)
#导入西游人物数据
load csv from 'http://124.223.79.77/neo4j/import/西游人物.csv' as line create (:西游人物 {name:line[0]})
#导入西游关系数据
load csv from 'http://124.223.79.77/neo4j/import/西游关系.csv' as line
create (:西游关系 {from:line[0],to:line[1],relation:line[3]})
#将两者之间的数据进行关联
match (a:`西游人物`),(b:`西游关系`),(c:`西游人物`)
where a.name=b.from and c.name=b.to
create (a)-[:人物关系{relation:b.relation}]->(c)
return a#清空人物关系数据
match (a:`西游人物`)-[r]->(b) delete r return type(r)
本地文件地址:(文件放Neo4j的import目录下)
#导入西游人物数据
load csv from ''file:///西游人物.csv' as line create (:西游人物 {name:line[0]})
#导入西游关系数据
load csv from ''file:///西游关系.csv' as line
create (:西游关系 {from:line[0],to:line[1],relation:line[3]})
#将两者之间的数据进行关联
match (a:`西游人物`),(b:`西游关系`),(c:`西游人物`)
where a.name=b.from and c.name=b.to
create (a)-[:人物关系{relation:b.relation}]->(c)
return a#清空人物关系数据
match (a:`西游人物`)-[r]->(b) delete r return type(r)
部分进阶语法
https://www.jianshu.com/p/5022b413ec3a
https://blog.csdn.net/liucy007/article/details/120967186
#shortestPath函数返回最短的Path
match p=shortestPath(
(a:`西游人物` {name:"秦琼"})-[*]-(b:`西游人物` {name:"孙悟空"})
)
return length(p),nodes(p)
#查看节点层级数据
match (a:`西游人物`{name:"唐僧"})<-[r:`人物关系`*1..4]-(b) return a,b,r
match (a:`西游人物`{name:"唐僧"})-[r:`人物关系`*1..4]->(b) return a,b,r
集成到spring boot 开源示例
https://gitee.com/JasonYangMeng/springdata-neo4j.git
附件:
文档中包含的附件获取方式:https://www.yuque.com/liaozk/hkmkrq/traam3ag3iy67gl7
相关文章:

Linux环境docker安装Neo4j,以及Neo4j新手入门教学(超详细版本)
目录 1、 图数据库Neo4j简介1.1 什么是图数据库1.2 能解决什么痛点1.3 对比关系型数据库1.4 什么是Neo4j1.5 Neo4j的构建元素 2. 环境搭建2.1 安装Neo4j Community Server2.2 docker 安装Neo4j Community Server2.3 Neo4j Desktop安装 3. Neo4j - CQL使用3.1 Neo4j - CQL简介3.…...
C++ inline 关键字有什么做用?
C/C 之中 inline 是一个很有意思的关键字,奇奇怪怪的用法见过不少,今天抽点时间出来聊聊这个东西。 inline 可以用在那些方面?修饰 inline 内链关键字到底有什么作用? OK:started 1、inline 可以用在类成员函数的声明…...

eNSP学习——理解ARP及Proxy ARP
目录 名词解释 实验内容 实验目的 实验步骤 实验拓扑 配置过程 基础配置 配置静态ARP 名词解释 ARP (Address Resolution Protocol)是用来将IP地址解析为MAC地址的协议。ARP表项可以分为动态和静态两种类型。 动态ARP是利用ARP广播报文,动态执行并自动进…...

Unity中UGUI在Mask剪裁粒子特效的实现
在Unity使用Mask是剪裁不了粒子特效的,之前有想过RenderTexture来实现,不过使用RenderTexture不适合用于很多个特效,因为RenderTexture依赖Camera的照射,如果在背包中每种道具都有不同的特效,那使用RenderTexture则需要…...

精通 VS 调试技巧,学习与工作效率翻倍!
✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C语言学习 贝蒂的主页:Betty‘s blog 1. 什么是调试 当我们写代码时候常常会遇见输出结果不符合我们预…...

yarn 安装包时报“certificate has expired”
在通过yarn包管理器安装 yarn install 时候 报错: info No lockfile found. [1/4] Resolving packages... error Error: certificate has expired at TLSSocket.onConnectSecure (node:_tls_wrap:1539:34) at TLSSocket.emit (node:events:513:28) at…...

Qt5项目拆解第一集解决:中文乱码| 全局字体|注册表|QSS/CSS
# 一、乱码解决代码片段 QTextCodec是Qt中用于处理文本编码和字符集转换的类。它提供了一系列静态函数来实现不同编码的文本转换,包括编码转换、字符集检测和转换、以及数据流中的文本编码处理。QTextCodec类使得Qt可以在不同的编码和字符集之间进行无缝转换,从而方便地处理…...

消息队列RabbitMQ.01.安装部署与基本使用
目录 RabbitMQ的作用 Message queue 释义 问题思考 存在的问题 优化方案 案例分析 带来的好处 消息队列特点 Email邮件案例分析 Docker安装部署RabbitMQ 1.下拉镜像 2.运行RabbitMQ 3.打开防火墙端口号并重新运行防火墙 4.容器启动后,可以通过 docker logs 容器 查…...

1.24号c++
C绪论 c是c语言的扩充,C包含了C的所有属性,换一句话说,C语言在C中都合法。 C语言编程思想:面向过程 c编程思想:面向对象 可以说在C中一切皆对象。 c的三大属性:封装,继承,多态。…...

【GitHub项目推荐--12 年历史的 PDF 工具开源了】【转载】
最近在整理 PDF 的时候,有一些需求普通的 PDF 编辑器没办法满足,比如 PDF 批量合并、编辑等。 于是,我就去 GitHub 上看一看有没有现成的轮子,发现了这个 PDF 神器「PDF 补丁丁」,让人惊讶的是这个 PDF 神器有 12 年的…...
React16源码: React中的PortalComponent创建, 调和, 更新的源码实现
PortalComponent 1 )概述 React Portal之所以叫Portal,因为做的就是和“传送门”一样的事情render到一个组件里面去,实际改变的是网页上另一处的DOM结构主要关注 portal的创建, 调和, 更新过程 2 )源码 定位到 packages/react-…...

Hive-SQL语法大全
Hive SQL 语法大全 基于语法描述说明 CREATE DATABASE [IF NOT EXISTS] db_name [LOCATION] path; SELECT expr, ... FROM tbl ORDER BY col_name [ASC | DESC] (A | B | C)如上语法,在语法描述中出现: [],表示可选,如上[LOCATI…...

编译原理2.3习题 语法制导分析[C++]
图源:文心一言 编译原理习题整理~🥝🥝 作为初学者的我,这些习题主要用于自我巩固。由于是自学,答案难免有误,非常欢迎各位小伙伴指正与讨论!👏💡 第1版:自…...

JUC-CAS
1. CAS概述 CAS(Compare ans swap/set) 比较并交换,实现并发的一种底层技术。它将预期的值和内存中的值比较,如果相同,就更新内存中的值。如果不匹配,一直重试(自旋)。Java.util.concurrent.atomic包下的原…...

Effective C++——关于重载赋值运算
令operator返回一个*this的引用 在重载,,*等运算符时,令其返回一个指向this的引用。 class MyClass {int* val; public:MyClass(int i) : val(new int(i)){}MyClass():val(new int(0)){}void print() {cout << *val << endl;}MyClass& operator(co…...
vscode debug
需要对GitHub上的工程debug。 所以花时间看了下,参考了bili视频和chatgpt的解答。 chatgpt给的步骤 要在 VS Code 中调试 C++ 项目,可以按照以下步骤进行设置和操作: 确保已安装 C++ 扩展:在 VS Code 中选择 “Extensions”(或使用快捷键 Ctrl+Shift+X),搜索并安装官…...
数据库选型其实技术维度不太重要
看到这个标题可能觉得我在乱说,数据库选型要从多个角度和维度看来,还有各种POC。很多供应商朋友告诉我POC是一个漫长的过程,非常痛苦,要解决各种技术问题。怎么能说和技术无关呢? 因为从我的经历和周围听说的经验来说…...

【C++】入门(二)
前言: c基础语法(下) 文章目录 五、引用5.1 引用概念5.2 引用使用规则5.3 常引用5.4 引用的使用场景5.5 引用和指针的区别 六、内联函数6.1 概念6.2 内联函数的特性 七、auto关键字(C11)7.1 概念7.2 使用规则7.3 用于f…...
Nginx 代理服务路径带/和不带/的问题
nginx初始配置如下 server {listen 6087;location / {#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。#例如,您的网站运行目录在/etc/www下,则填写/etc/www。#允许跨域请求的域,* 代表所有add_header Access-Control-…...

C# CefSharp 输入内容,点击按钮,并且滑动。
前言 帮别人敲了个Demo,抱试一试心态,居然成功了,可以用。给小伙伴们看看效果。 遇到问题 1,input输入value失败,里面要套了个事件,再变换输入value。后来用浏览器开发工具,研究js代码,太难了&a…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...