GraphRAG与知识图谱
一、GraphRAG介绍
1.1 什么是 Graph RAG?
Graph RAG(Retrieval-Augmented Generation),是一种基于知识图谱的检索增强技术, 通过构建图模型的知识表达,将实体和关系之间的联系用图的形式进行展示,然后利用大语言模型 LLM进行检索增强。
GraphRAG是微软研究院开发的一种创新型检索增强生成(RAG)方法,基于MIT开源协议,旨在提高大语言模型LLM在处理复杂信息和私有数据集时的推理能力
1.2 GraphRAG诞生背景
传统RAG是将一篇文章打碎拆分为几个小的章节(chunks),然后embedding后存入向量库,在查询阶段,RAG将用户指令挨个在向量库与这些chunks的embedding向量进行相似度匹配,然后输出最匹配的k个作为prompt的上下文(context),无论是在文档预处理进向量库阶段,还是用户查询阶段,都没加考虑各个chunk之间的关联,这就形成了普通RAG技术的先天设计缺陷。
传统rag:
解决外部知识的详情介绍,某些细节的检索。
比如: 比如孔乙己是哪里人?
graphRAG:
跨多个段落,甚至多个文章。
文章中的主要主题是什么?
GraphRAG提出了一种回答总结类问题的算法思路,下面展示了GraphRAG算法的工作流程,包括索引建立阶段(index time)和查询阶段(query time)。
1.3 graphrag的基本概念
- Document(文档)- 系统中的输入文档。这些文档要么代表CSV 中的单独行,要么代表单独的 .txt文件。
- TextUnit(文本块)- 要分析的文本块。这些块的大小、重叠以及它们是否遵守任何数据边界可以在下面配置。一个常见的用例是设置CHUNK_BY_COLUMNS为id,以便文档和 TextUnits 之间存在一对多关系,而不是多对多关系。
- Entity(实体)- 从 TextUnit 中提取的实体。这些实体代表人物、地点、事件或您提供的其他实体模型。
- Relationship(关系)- 两个实体之间的关系。这些关系由协变量生成。
- Covariate(协变量)- 提取的声明信息,其中包含可能受时间限制的实体的陈述.
- Claim(声明)- 代表具有评估状态和时间限制的积极事实陈述,以协变量(Covariates)的称呼在各处使用。
- Community Report(社区报告)- 一旦生成实体,我们就对它们执行分层社区检测,并为该层次结构中的每个社区生成报告。
- Node(节点)- 包含已嵌入和聚集的实体和文档的呈现图形视图的布局信息。
1.3.1 索引建立(index time)
索引建立阶段,属于数据预处理阶段,主要目的是从提供的文档集合中,提取出知识图谱(Knowledge Graph),然后以聚类算法(Leiden),将知识图谱分为数个社区(community),并总结每个社区(community)所表达的含义(community summary)。
graphRAG索引阶段流程图:
1.3.2 Querying过程
从上面的介绍,我们了解到在构建索引的过程中,GraphRAG会生成实体关系图、社区层级结构,以及它们的sumamry、source chunk等各种维度的信息,以向量和结构化的方式进行存储。下面我们介绍在检索时如何使用这些信息来做信息增强。Query分两种类型,分别为Local Search和Global Search。
1.3.2.1 Local Search
local Search是一种基于Entity的回答模式。它结合知识图谱中的结构化数据和输入文档中的非结构化数据,在查询时通过相关实体信息扩展 LLM 上下文。该方法非常适合回答需要理解输入文档中提到的具体实体的问题(例如,“孔乙己和掌柜的之间的关系?”)。
其流程图如下所示:
给定用户查询(或加上对话历史记录),Local Search会从知识图谱中识别出一组与用户输入在语义上相关的实体。这些实体作为进入知识图谱的入口点,能够提取进一步相关的细节,如相连实体、关系、实体协变量(与实体相关的变量)和社区报告。此外,它还从原始输入文档中提取与已识别实体相关的相关文本chunk。然后对这些候选数据源进行优先级排序和过滤,以适应预定义大小的单个上下文窗口,该窗口用于生成对用户查询的响应。
1.3.2.2 Global Search
Global Search是基于整个数据集的推理。常规RAG在处理需要跨数据集聚合信息后进行组合回答的场景时很难有很好的表现。例如,“本文的主题是什么?”这种问题查询效果会很差,因为常规RAG的处理方式是:依赖于数据集中存在语意相似的文本内容的向量检索。如果知识库中没有文本内容包含这个问题的答案,则无法给出高质量的回答。
然而,使用 GraphRAG 可以回答此类问题,因为 LLM 生成的知识图谱的结构可以告诉我们整个数据集的结构(以及主题)。这使得私有数据集能够组织成有意义的语义clusters,并且这些clusters已被预先总结。通过使用我们的全局搜索方法,LLM 在响应用户查询时可以使用这些cluster来总结这些主题,并回答用户对整个数据集的问题。
其流程图如下所示:
给定用户查询(或加上对话历史记录),Global Search使用从图的社区层次结构中指定级别生成的一系列 LLM 社区报告作为上下文数据,以 map-reduce 方式生成响应。在 map 步骤中,社区报告被分割成预定义大小的文本chunks。每个文本chunk然后用于生成一个中间响应,其中包含一个要点列表,每个要点都附有一个表示该要点重要性的数值评级。在 reduce 步骤中,从中间响应中筛选出最重要的要点进行汇总,并将其用作上下文生成最终响应。
全局搜索响应的质量会受到用于社区报告来源的社区层次结构级别的显著影响。较低的层次级别报告更为详细,通常会产生更为全面的响应,但由于报告数量的增加,这也可能增加生成最终响应所需的时间和 LLM 资源。
1.4 Graph RAG 思想一句话总结
Graph RAG 思想: 对用户输入的query提取实体,然后构造子图形成上下文,最后送入大模型完成生成
二、知识图谱介绍
知识图谱(Knowledge Graph)是一种以结构化形式描述现实世界实体及其关系的技术,通过将数据组织为“节点-边-节点”的三元组(如“北京-是-中国首都”),构建出语义关联的网络。
核心组成:
- 实体(Entities):表示具体或抽象的事物,如“李白”“北京”。
- 关系(Relationships):连接实体的边,定义交互方式,如“出生于”“首都”。
- 属性(Attributes):描述实体的特征,如“李白-字太白”“北京-人口2170万”。
- 本体(Ontology):领域内的概念体系与关系约束,如“城市-国家”间的“首都”关系。
示例:在医疗领域,知识图谱可链接“糖尿病”“胰岛素”“高血糖”等实体,通过“治疗方法”“症状”等关系辅助诊断。
应用场景:
- 推荐系统:基于用户兴趣关联商品(如喜欢科幻电影的用户推荐《三体》)。
- 智能问答:解析复杂问题(如“哪些法国导演获得过奥斯卡奖?”)。
- 金融风控:通过企业关联网络识别欺诈风险。
- 医疗健康:辅助诊断(如根据症状推荐可能的疾病及用药)。
三、图数据库与neo4j
3.1 市面上图数据库介绍
3.1.1 排名:
https://db-engines.com/en/ranking/graph+dbms
3.1.2 主流图数据库
3.2 neo4j
neo4j学习地址:
https://www.w3cschool.cn/neo4j/neo4j_need_for_graph_databses.html
3.2.1 docker安装neo4j社区版
docker run -d -p 7474:7474 -p 7687:7687 --name neo4j -v /home/neo4j/data:/data -v /home/neo4j/logs:/logs -v /home/neo4j/conf:/var/lib/neo4j/conf -v /home/neo4j/import:/var/lib/neo4j/import neo4j:5.5.0-community
访问地址:http://localhost:7474/
默认账号密码:
neo4j || neo4j
3.2.1 cql实例
简介:
3.2.2 操作实例
增加一个节点:
create (n:Person {name:"孔乙己",age:31})
带有关系属性:
create (p:Person{name:"孔乙己",age:31})-[: 偷书 { 金额 :3000}]->(n:Person{name:"丁举人",age:35})
删除节点:
create (n:Person {name:"掌柜",age:33});match (n:Person{name:"掌柜"}) delete n;-- 根据id删除match (n:Person) where id(n)=3 delete n
删除关系:
MATCH (p:Person {name: "孔乙己", age: 31})-[f:`偷书`]->(n:Person {name: "丁举人", age: 35}) DELETE f
修改:
加上标签:
match (t:Person) where id(t)=0 set t:衣服 return t;
加上属性:
match (a:衣服) where id(t)=0 set a.衣服="长衫" return a
修改属性:
match (a:衣服) where id(a)=0 set a.衣服="破烂的长衫" return a
查:
match (p:Person) - [:偷书] -> (n:Person) return p,n
效果:
3.2.3 红楼梦示例
红楼梦知识图谱示例:
https://grapheco.org/
贾宝玉知识图谱
薛蟠知识图谱
四、GraphRAG
git地址:
https://github.com/microsoft/graphrag
前置操作:
ollama pull qwen2.5:7b
ollama pull quentinz/bge-large-zh-v1.5
4.1 安装graphRAG
4.1.1 安装 GraphRAG
pip install graphrag
需要 Python 3.10-3.12 环境
4.1.2 创建知识数据文件夹
安装完整后,需要创建一个文件夹,用来存储你的知识数据,目前 GraphRAG 只支持 txt 和 csv 格式。
mkdir -p ./ragtest/input
4.1.3 准备一份数据放在 /ragtest/input 目录下
4.1.4 初始化工作区
首先,我们需要运行以下命令来初始化:
python -m graphrag.index --init --root ./ragtest
运行完成后,在 ragtest 目录下生成以下两个文件:settings.yaml。ragtest 目录下的结构如下:
- settings.yaml:GraphRAG 的核心配置文件,允许用户自定义模型、嵌入模型、存储设置和管道参数,通过 YAML 格式提供灵活的配置选项;
4.2 修改配置文件支持本地部署大模型
首先确保已安装 Ollama。
安装qwen2.5 7b和bge-large-zh-v1.5;
4.2.1 修改.setting.yaml
右边为修改后的内容:
注意这里:默认的chunks.size是1200。 较大的块会导致输出保真度较低,参考文本意义较小;使用较大的块可以大大缩短处理时间。
4.2.2 运行 GraphRAG 构建知识图谱索引
python -m graphrag.index --root ./ragtest
构建知识图谱的索引需要一定的时间,构建过程如下所示:
成功:
4.3 修改源码支持本地部署大模型
接下来修改源码,保证进行 local 和 global 查询时给出正确的结果。
4.3.1 修改成本地的 Embedding 模型
修改源代码的目录和文件:
/root/miniconda3/lib/python3.10/site-packages/graphrag/llm/openai/openai_embeddings_llm.py
改动如下:
4.3.2 修改 Embedding 模型
修改源代码的目录和文件:
/root/miniconda3/lib/python3.10/site-packages/graphrag/query/llm/oai/embedding.py
修改如下:
4.4 GraphRAG 效果测试
4.4.1 local 查询
执行命令:
python -m graphrag.query --root ./ragtest --method local "孔乙己和掌柜的关系是什么?"
4.4.2 global 查询
执行命令:
python -m graphrag.query --root ./ragtest --method global "本文主题是什么?"
4.4.3 提示微调 prompt tuning
参加【提示微调 prompt tuning.txt】
五、GraphRAG详情
GraphRAG 采用了知识图谱的理念,在底层实现中同时使用了图数据库和向量数据库。图数据库存储有关实体和实体间关系的数据,而向量数据库则存储与文本单元相对应的嵌入向量空间。
本地搜索(Local Search):基于实体的推理
本地搜索方法将知识图谱中的结构化数据与输入文档中的非结构化数据结合起来,在查询时用相关实体信息增强 LLM 上下文这种方法非常适合回答需要了解输入文档中提到的特定实体的问题(例如,"洋甘菊有哪些治疗功效?)
全局搜索(Global Search): 基于全数据集推理
根据LLM生成的知识图谱结构能知道整个数据集的结构(以及主题)这样就可以将私有数据集组织成有意义的语义集群,并预先加以总结。LLM在响应用户查询时会使用这些聚类来总结这些主题;
五、将graphRAG生成的文件导入到neo4j查看
具体实现【参见demo】。
查看graphrag索引后,各个实体之间的关系:
六、GraphRAG的适用场景
6.1 总结对比:GraphRAG vs 传统 RAG
场景类型 | 传统 RAG 的局限性 | GraphRAG 的优势 |
---|---|---|
跨文档分析 | 信息碎片化,难以关联全局语义 | 通过知识图谱实现全局语义关联 |
实时数据处理 | 全量索引重建成本高 | 支持增量更新,降低维护开销 |
多模态整合 | 依赖单一文本模态,异构数据处理难 | 统一图结构融合文本/表格/图谱数据 |
复杂推理任务 | 单跳检索,难以支持多步逻辑推理 | 基于图的多跳推理能力 |
相关文章:
GraphRAG与知识图谱
一、GraphRAG介绍 1.1 什么是 Graph RAG? Graph RAG(Retrieval-Augmented Generation),是一种基于知识图谱的检索增强技术, 通过构建图模型的知识表达,将实体和关系之间的联系用图的形式进行展示ÿ…...
hive通过元数据库删除分区操作步骤
删除分区失败: alter table proj_60_finance.dwd_fm_ma_kpi_di_mm drop partition(year2025,month0-3,typeADJ); 1、查询分区的DB_ID、TBL_ID – 获取数据库ID-26110 SELECT DB_ID FROM DBS WHERE NAME ‘proj_60_finance’; – 获取表ID-307194 SELECT TBL_ID FR…...
LINUX 5 cat du head tail wc 计算机拓扑结构 计算机网络 服务器 计算机硬件
计算机网络 计算机拓扑结构 计算机按性能指标分:巨型机、大型机、小型机、微型机。大型机、小型机安全稳定,小型机用于邮件服务器 Unix系统。按用途分:专用机、通用机 计算机网络:局域网‘、广域网 通信协议’ 计算机终端、客户端…...
flink 增量快照同步文件引用关系和恢复分析
文章目录 文件引用分析相关代码分析从state 恢复,以rocksdb为例不修改并行度修改并行度keyGroupRange过程问题 文件引用分析 每次生成的checkpoint 里都会有所有文件的引用信息 问题,引用分析里如何把f1,f2去掉了,可以参考下面的代码&#…...
属性修改器 (AttributeModifier)
主页面设置组件 import { MyButtonModifier } from ../datastore/MyButtonModifier;Entry ComponentV2 struct MainPage {// 支持用状态装饰器修饰,行为和普通的对象一致Local modifier: MyButtonModifier new MyButtonModifier();build() {Column() {Button(&quo…...
汽车BMS技术分享及其HIL测试方案
一、BMS技术简介 在全球碳中和目标的战略驱动下,新能源汽车产业正以指数级速度重塑交通出行格局。动力电池作为电动汽车的"心脏",其性能与安全性不仅直接决定了车辆的续航里程、使用寿命等关键指标,更深刻影响着消费者对电动汽车的…...
电网电能质量分析:原理、算法及实际应用
一、引言 在现代社会,电力供应的稳定性和可靠性对工业生产、社会生活的各个方面都至关重要。电能质量作为衡量电力系统供电能力的关键指标,其优劣直接影响到电力设备的运行效率、使用寿命以及生产过程的稳定性。随着电力系统规模的不断扩大,新…...
PyCharm Community社区版链接WSL虚拟环境
#记录工作 在过去,PyCharm Community Edition(社区版)不具备链接 WSL 虚拟环境的功能,该功能仅在 PyCharm Professional(专业版)和企业版中提供。如今,从 PyCharm Community Edition 2024.3.5 …...
2026考研数学张宇武忠祥复习视频课,高数基础班+讲义PDF
2026考研数学武忠祥老师课(网盘):点击下方链接 2026考研数学武忠祥网课(最新网盘) 一、基础阶段(3-5个月) 目标:搭建知识框架掌握基础题型 教材使用: 高数:…...
Spring Boot嵌入前端静态资源:从原理到实战的完整指南
在Java Spring Boot项目中集成前端静态资源是构建现代Web应用的必备技能。本文将深入解析Spring Boot的静态资源处理机制,通过实战案例演示完整的集成流程,并分享性能优化与安全加固的最佳实践。 一、Spring Boot静态资源处理原理 1.1 默认资源路径 S…...
DeepSeek对比ChatGPT有何改进,可以用更低成本计算
下面是基于DeepSeek公开论文和代码,与ChatGPT对比后总结的改进点,以及其为何能用更少算力训练大模型的解析。 https://arxiv.org/pdf/2412.19437 1. 改进点对比 1.1 架构稀疏化与混合专家(MoE)设计 DeepSeek采用稀疏激活与混合…...
JavaScript双问号操作符(??)详解,解决使用 || 时因类型转换带来的问题
目录 JavaScript双问号操作符(??)详解,解决使用||时因类型转换带来的问题 一、双问号操作符??的基础用法 1、传统方式的痛点 2、双问号操作符??的精确判断 3、双问号操作符??与逻辑或操作符||的对比 二、复杂场景下的空值处理 …...
Go语言从零构建SQL数据库(5)-Pratt解析算法:SQL表达式解析的核心引擎
Pratt解析算法:SQL表达式解析的核心引擎 1. 算法概述与工作原理 Pratt解析算法(自顶向下运算符优先级解析)是一种优雅的表达式解析方法,特别适合处理具有不同优先级运算符的复杂表达式。在我们的SQL解析器中,它负责解…...
数字政府与电子政务综合分析报告
数字政府与电子政务综合分析报告 一、引言 随着信息技术的飞速发展,数字政府和电子政务成为全球公共管理领域的重要趋势。数字政府和电子政务的建设不仅是提升政府治理能力的必然选择,也是推动国家治理现代化的重要途径。本文将对数字政府和电子政务进…...
服务器虚拟化技术深度解析:医药流通行业IT架构优化指南
一、服务器虚拟化的定义与原理 (一)技术定义:从物理到虚拟的资源重构 服务器虚拟化是通过软件层(Hypervisor)将物理服务器的CPU、内存、存储、网络等硬件资源抽象为逻辑资源池,分割成多个相互隔离的虚拟机…...
QT ARM 开发环境搭建
搭建 QT ARM 开发环境主要包括主机环境配置、交叉编译工具链安装、QT 库交叉编译和 QT Creator 配置几个步骤。以下是详细流程: 一. 主机环境准备 系统要求 推荐 Ubuntu 18.04/20.04 LTS 或更高版本 至少 50GB 可用磁盘空间 8GB 以上内存 安装基础依赖 sudo apt update sud…...
【设计模式】外观模式
简介 想象你要在家里看电影,需要做以下操作: 打开电视启动音响调暗灯光关闭窗帘 如果每次都要手动操作这些步骤会很麻烦。外观模式可以帮你将这些步骤封装成一个统一的接口,比如“一键观影模式”,你只需按一个按钮,…...
[特殊字符] 驱动开发硬核特训 · Day 5 - 深入解析 Platform Driver 驱动框架
主题:深入解析 Platform Driver 驱动框架 —— 从架构设计到工程实战 平台驱动(platform driver)是 Linux 内核中应用最广泛的一种设备驱动框架。它用于管理那些不依赖总线枚举机制的固定外设,如 GPIO 控制器、I2C 控制器、SPI 控…...
创意 Python 爱心代码
在编程的世界里,Python 以其简洁易用和丰富的库而备受喜爱。用 Python 编写爱心代码,不仅能展现编程的魅力,还能传递温暖与爱意。今天就来分享几种创意 Python 爱心代码。 一、基于turtle库绘制爱心 turtle库是 Python 内置的图形库&#x…...
【群晖】挂载小雅alist到AList网盘中
群晖开启远程 在命令行远程到主机 ssh 用户名主机名终端中执行下方命令创建一个在AList中挂载小雅所需要的token: docker exec -i xiaoya sqlite3 data/data.db <<EOF select value from x_setting_items where key "token"; EOF 如果报权限错误…...
嵌入式C语言11(宏/程序的编译过程)
宏 ⦁ 基本概念 C语言中可以利用宏定义实现文本的快速替换,注意:宏定义是单纯的文本替换,不检查语法是否合法。 C语言标准中提供了很多的预处理指令,比如#include、#pragma…以#开头的都属于预处理指令。 预处理指令指的是在…...
城电科技 | 太阳能花怎么选择?光伏太阳花的应用场景在哪里?
在当下追求绿色能源的时代,珠海城电科技的太阳能花逐渐走进人们的视野。那么,太阳能花究竟是什么呢?太阳能花属于光伏发电应用的一种,巧妙地利用太阳能进行发电。它还有着光伏太阳花、光伏发电花、光伏智慧花等别称。 城电科技-光…...
[C++面试] C++中各类括号的差异:[]、{}、<>、()
括号类型典型场景编译期/运行时安全性考量()函数调用、运算优先级两者注意强制转换风险[]数组访问、Lambda捕获运行时主导防止越界访问{}统一初始化、聚合类型编译期检查阻止隐式窄化转换<>模板实例化、元编程编译期注意模板展开爆炸问题 int x{5}; int x(5);有什么区别…...
Qt 入门 3 之对话框 QDialog(1)
Qt 入门 3 之对话框 QDialog 本文从以下几点分开讲述: - 对话框的基本原理介绍 - 两种不同类型的对话框 - 一个由多个窗口组成并且窗口间可以相互切换的程序 1.模态和非模态对话框 QDialog 类是所有对话框窗口类的基类。对话框窗口是一个经常用来完成短小任务或者…...
Python设计模式:组合模式
1. 什么是组合模式 组合模式(Composite Pattern)是一种结构型设计模式,它允许将对象组合成树形结构以表示“部分-整体”的层次关系。组合模式使得客户端对单个对象和组合对象的使用具有一致性。换句话说,组合模式可以让客户端以相…...
第九天 - psutil系统监控库 - 资源监控仪表盘 - 练习:实时CPU/Memory监控
使用Python打造实时资源监控仪表盘(psutilFastAPI) 一、为什么要学习系统监控? 在软件开发中,系统资源监控是每个开发者都需要掌握的重要技能。无论是排查性能瓶颈、优化程序效率,还是确保服务稳定性,实时…...
Spring Boot内嵌服务器全解析:Tomcat vs Jetty vs Undertow 选型指南
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 引言 在Spring Boot应用中,内嵌服务器的选择直接影响应用的性能、资源占用和扩展性。尽管Tomcat作为默认选项被广泛使用,Jetty和Unde…...
【嵌入式学习6】多任务版TCP服务器
目录 如何实现: 客户端1.0版本: 服务端: 客户端2.0版本: thread.join() 是一个线程同步方法,用于主线程等待子线程完成。当你调用 thread.join() 时,主线程会阻塞,直到调用 join() 的子线程…...
抖音直播位置与IP属地不同?如何实现
抖音作为头部平台吸引了大量主播和观众。然而,许多用户发现一个令人困惑的现象:直播间显示的位置信息与账号IP属地不一致。本文将深入分析这一现象背后的原因,探讨可能带来的影响,并提供实用的解决方案。 一、抖音直播显示的位置与…...
Scala(六)
本节课学习了数组、列表、Set集合、Map集合、元组、集合中常用的函数等等。 数组包括可变数组、不可变数组,学习了如何定义和创建数组、可变数组和不可变数组之间的转换、多维数组、数组遍历 列表学习了如何添加元素、合并集合、如何访问元素、遍历列表 Set集合学…...
Android 11.0 framework系统首次开机添加锁屏壁纸的功能
1.前言 在11.0的系统rom定制化开发中,在某些时候需要默认设置锁屏壁纸功能,而系统中没有在 framework/base下没有单独的默认锁屏壁纸的图片替换,默认就是锁屏壁纸和主屏幕壁纸 都是同一张壁纸,所以就需要添加接口来实现设置默认锁屏壁纸的功能 2.framework系统首次开机添…...
Scala数组
数组 - 可变数组:以 ArrayBuffer 创建,可灵活增删改元素 ,如 ArrayBuffer(1, 2, 3) ,并通过 append 等方法操作。 - 不可变数组:由 Array 构建,创建后元素不可变,可借助 toBuffer 等方法转换为…...
Win11 24H2用户个性化设置OOBE跳过微软账户使用本地账户方法
目前Win11已经更新到24H2版本,经过小编测试,已经有两种方法失效了,分别如下。 1.shiftFnF10,oobe \bypassnro 2.微软账户注册界面,输入特定邮件地址和随机密码,例如nothankyou.com、exampleexample.com等…...
遍历集合list工具
文章目录 1.遍历集合list,返回第一个匹配的对象/不匹配返回null:2.集合list排序3.遍历list对象,返回匹配的集合4.从 dbRepeaters 列表中筛选出所有 repeaterId 在 repeaterIds 数组中的 Repeater 对象,并将这些对象收集到一个新的…...
基于 SmartX 原生容灾能力构建简单经济的容灾方案:5 大场景与 4 例实践合集
不少企业都基于虚拟化/超融合架构支持多种核心应用系统与数据库。这些场景不仅涉及多种类型的工作负载,在数据可靠性层面也需要不同级别的保护策略,一些用户还面临灾备演练、集中容灾等更多样的容灾需求,因此,构建全面可靠、易用高…...
说一下分布式组件时钟一致性的解决方案
为什么需要时钟一致性? 在分布式系统中,时钟一致性是确保各节点时间同步的关键问题。 时钟不同步可能导致日志混乱、事务顺序错误、数据不一致等问题 1. 物理时钟同步 基础方案:NTP(网络时间协议) 原理:…...
aws s3api 常用命令
AWS S3API 是 Amazon Web Services(AWS)提供的用于与简单存储服务(S3)进行交互的命令行工具,以下是一些常用命令: 桶操作 创建桶 aws s3api create-bucket --bucket <bucket-name> --region <r…...
006 ElementUI
https://element.eleme.cn/#/zh-CN ElementUI是组件库,网站快速成型工具 npm i element-ui2.12.0在 main.js 中写入以下内容: import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css; Vue.use(ElementUI);...
el-select组件与el-tree组件结合实现下拉选择树型结构框
下拉选择树型结构框 实现效果图组件完整代码 实现效果图 组件完整代码 <template><div class"tree-con"><el-selectv-model"value"placeholder"请选择"class"bs-select"ref"select"><el-optionv-for&…...
windows系统更新nvidia 驱动, 并安装pytorch
windows系统更新nvidia 驱动, 并安装pytorch 1.更新前nvidia-smi 显示版本比较久 2.方法一:通过NVIDIA GeForce Experience自动更新 NVIDIA GeForce Experience是NVIDIA官方提供的一款软件,它不仅可以帮助用户优化游戏设置,还能…...
如何深刻理解Reactor和Proactor
前言: 网络框架的设计离不开 I/O 线程模型,线程模型的优劣直接决定了系统的吞吐量、可扩展性、安全性等。目前主流的网络框架,在网络 IO 处理层面几乎都采用了I/O 多路复用方案(又以epoll为主),这是服务端应对高并发的性能利器。 …...
如何使用WRF-Hydro GIS工具,生成运行WRF-Hydro模型的Domain文件,包括流域、地形、河网、湖泊等
WRF-Hydro模型作为一个集成了大气和水文过程的模型,具有一些挑战性的难点,包括: 复杂的耦合过程:WRF-Hydro模型需要同时考虑大气和水文过程的相互作用,包括降水、蒸发、径流等一系列过程的耦合,这使得模型的…...
adb devices报错 ADB server didn‘t ACK
ubuntu下连接手机首次使用adb devices 报错ADB server didn’t ACK adb devices * daemon not running; starting now at tcp:5037 ADB server didnt ACK Full server startup log: /tmp/adb.1000.log Server had pid: 52986 --- adb starting (pid 52986) --- 04-03 17:23:23…...
机器学习——决策树
1.什么要学习决策树? 处处都是选择,并且到处都是岔路口。比如你发现某只股票几天时间内涨了很多,如果是你,你会买进吗?如果买进了,你就得承担后果,要么会大赚一笔,要么会血本无归。总之,用算法替代主观判断,避免情绪化投资决策。 …...
zk源码—2.通信协议和客户端原理二
大纲 1.ZooKeeper如何进行序列化 2.深入分析Jute的底层实现原理 3.ZooKeeper的网络通信协议详解 4.客户端的核心组件和初始化过程 5.客户端核心组件HostProvider 6.客户端核心组件ClientCnxn 7.客户端工作原理之会话创建过程 6.客户端核心组件ClientCnxn (1)客户端核心…...
Python设计模式:构建模式
1. 什么是构建模式 构建模式(Builder Pattern)是一种创建型设计模式,它允许使用多个简单的对象一步步构建一个复杂的对象。构建模式通过将构建过程与表示分离,使得同样的构建过程可以创建不同的表示。换句话说,构建模…...
C++类间的 “接力棒“ 传递:继承(下)
文章目录 5. 继承与友元6.继承与静态成员7.菱形继承8.继承和组合希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力! 本篇接着补充继承方面的内容,同时本篇的菱形继承尤为重要 5. 继承与友元 class Student; class Person { public:fri…...
C++11QT复习 (十六)
文章目录 Day11 移动语义回顾一、移动语义基础概念二、自定义 String 类的移动语义实现输出运算符重载: 三、测试函数:验证移动与拷贝行为四、左值与右值的补充说明右值引用作为函数返回值 五、知识总结如何区分左值与右值? 六、附加说明&…...
Redis客户端命令到服务器底层对象机制的完整流程?什么是Redis对象机制?为什么要有Redis对象机制?
Redis客户端命令到服务器底层对象机制的完整流程 客户端 → RESP协议封装 → TCP传输 → 服务器事件循环 → 协议解析 → 命令表查找 → 对象机制 → 动态编码 → 数据结构操作 → 响应编码 → 网络回传 Redis客户端命令到服务器底层对象机制的完整流程可分为协议封装、命令解…...
鸿蒙NEXT开发节流、防抖工具类(ArkTs)
import { CacheUtil } from ./CacheUtil; import { DateUtil } from ./DateUtil;/*** 节流、防抖工具类(用于点击事件,防止按钮被重复点击)** author 鸿蒙布道师* since 2025/04/07*/ export class ClickUtil {private static throttleTimeou…...