惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
雷峰网
雷峰网
The Cloudflare Blog
博客园 - 叶小钗
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
美团技术团队
J
Java Code Geeks
S
SegmentFault 最新的问题
罗磊的独立博客
WordPress大学
WordPress大学
大猫的无限游戏
大猫的无限游戏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
腾讯CDC
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
T
Tailwind CSS Blog
宝玉的分享
宝玉的分享
博客园 - 聂微东
Apple Machine Learning Research
Apple Machine Learning Research
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - Franky
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
aimingoo的专栏
aimingoo的专栏
M
MIT News - Artificial intelligence
B
Blog RSS Feed
Martin Fowler
Martin Fowler
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 【当耐特】
D
Docker
爱范儿
爱范儿
云风的 BLOG
云风的 BLOG
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Check Point Blog
博客园_首页
Vercel News
Vercel News
量子位
有赞技术团队
有赞技术团队
Google DeepMind News
Google DeepMind News
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Last Week in AI
Last Week in AI
The Register - Security
The Register - Security
G
Google Developers Blog
Hugging Face - Blog
Hugging Face - Blog

中文博客 on 范叶亮 | Leo Van

多智能体系统 (Multi-Agent System) 确定性和掌控欲 - 你的 AI 不是你的 AI LLM Token 消耗节省计划 (How to Save Token for LLM) 智能体的角色定位和身份演化 (Agent Role Orientation and Identity Evolution) 本地部署 OpenClaw,QwenPaw 和 Hermes Agent (Local Deployment of OpenClaw, QwenPaw and Hermes Agent) 本地部署智能体 - OpenClaw,QwenPaw,Hermes Agent ... 部署 Matrix 服务器 Synapse (Deployment of Matrix Server Synapse) 部署 frp 内网穿透服务 (Deployment of frp NAT Traversal Service) 本地部署大模型服务 (Local Deployment of LLM Services) AI 时代的生产力和生产关系 (Forces and Relations of Production in AI Era) 业余无线电入门 - CQ, CQ, CQ, this is BD1CZP. Calling CQ and standing by. 重构 - 之于代码、之于工作、之于生活 大语言模型微调 (Fine-tuning Large Language Models) 提升图片分辨率和质量 - Invoke AI 101 教程 使用画布创建和组合生成新的图片 - Invoke AI 101 教程 探索 AI 模型和概念适配器 - Invoke AI 101 教程 理解图像到图像和降噪过程 - Invoke AI 101 教程 使用控制层和指示控制图片的生成 - Invoke AI 101 教程 使用 Invoke 创作你的第一张图片 - Invoke AI 101 教程 在 OpenWrt 和群晖中自动申请和部署证书 凡人歌 - 凡人,但不要烦心 Shell 调用方式 fork,exec 和 source (Run Shell with fork, exec and source) 重定向和管道 (Redirect and Pipe) 模型压缩和推理加速 (Model Compression and Inference Acceleration) 我们需要多少种编程语言 (How Many Programming Languages do We Need) 数据可视化小贴士 - 面向动态文档生成,秉承规范、统一和实用的理念 从 rm -rf * 说起 - 喜新、怀旧、再出发 当我谈摄影时,我谈些什么 - 色彩篇 Part 1 CSS 布局和定位 (CSS Layout and Position) 当我谈修图时,我谈些什么 - 色彩篇 Part 1 在 Windows 下利用 WSL2 和 Ubuntu 配置 GPU 机器学习环境 文学编程和可重复性研究 (Literate Programming and Reproducible Research) 在 OpenWrt 中安装 Jellyfin 搭建家庭影音中心 自私和贪婪 (Selfish and Greedy) 评分和排名算法 (Rating & Ranking Algorithms) 小记这一波裁员浪潮 基于内容的图像检索 (Content-based Image Retrieval, CBIR) 你所应该知道的 A/B 测试 (A/B Test You Should Know) 一个人的摩旅 (Travel with My Motorcycle Alone) 设计语言初探 (A Glimpse of Design Language) Spark 集群搭建 (Spark Cluster Setup) Hive 安装和配置 (Hive Setup) Hadoop 集群搭建 (Hadoop Cluster Setup) 虚拟环境准备 (Virtual Environment Preparation) 大数据 SQL 性能调优 (Big Data SQL Performance Tuning) SQL 样式指南 (SQL Style Guide) 进程,线程和协程 (Process, Thread and Coroutine) - 实现篇 进程,线程和协程 (Process, Thread and Coroutine) - 理论篇 胶囊网络 (Capsule Network) 投票公平合理吗? 网络算法 (Network Algorithms) - 复杂网络系列 真实世界网络结构 (Structure of Real-World Network) - 复杂网络系列 网络表示,测度和度量 (Network Representation, Measures and Metrics) - 复杂网络系列 文本相似度 (Text Similarity) 而立之前 (Life before 30) 最近邻搜索 (Nearest Neighbor Search) 无模型策略预测和控制 - 时序差分学习 (Model-Free Policy Prediction and Control - Temporal Difference Learning) - 强化学习系列 无模型策略预测和控制 - 蒙特卡洛方法 (Model-Free Policy Prediction and Control - Monte-Carlo Learning) - 强化学习系列 利用动态规划求解马尔可夫决策过程 (Planning by Dynamic Programming) - 强化学习系列 贝叶斯优化 (Bayesian Optimization) 马尔可夫决策过程 (Markov Decision Process) - 强化学习系列 多臂赌博机 (Multi-armed Bandit) - 强化学习系列 强化学习简介 (Introduction of Reinforcement Learning) - 强化学习系列 在群晖 NAS 上编译安装 tmux 隐马尔可夫,条件随机场和序列标注 (Hidden Markov Model, Conditional Random Fields and Sequence Labeling) 图嵌入和图神经网络 (Graph Embedding and Graph Neural Network) 预训练自然语言模型 (Pre-trained Models for NLP) toB 产品用户权限 (User Privileges of toB Products) 京东数科 HIPO 学习之旅 (JDD HIPO Learning Journey) 杭州和东京之旅 (Tour of Hangzhou and Tokyo) 国际智慧温室种植挑战赛 (International Autonomous Greenhouse Challenge) 记忆中的儿时 (My Childhood in Memory) 启发式算法 (Heuristic Algorithms) 关不掉的浏览器标签页 (Browser Tabs You do not Close) 贝塞尔曲线 (Bézier Curve) 如何阅读一本书 (How to Read a Book) 相似性和距离度量 (Similarity and Distance Measurement) 集成学习算法 (Ensemble Learning) 计算复杂性与动态规划 (Computational Complexity and Dynamic Programming) 利用 Flask 和 Google App Engine 部署模型服务 序列到序列和注意力机制 (Seq2Seq and Attention Machanism) 词向量 (Word Embeddings) 循环神经网络 (Recurrent Neural Network, RNN) 泰国之行 (Tour of Thailand) 媒介之战 (War of Medias) 卷积神经网络 (Convolutional Neural Network, CNN) 买书,囤书,看书 (Buy Books, Hoard Books and Read Books) Play Safe, Smart Choice & Yuppie 基于 PyQt5/PySide2 和 QML 的跨平台 GUI 程序开发 流形学习 (Manifold Learning) 深度学习优化算法 (Optimization Methods for Deep Learning) 深度学习优化算法 (Optimization Methods for Deeplearning) 生成对抗网络简介 (GAN Introduction) Ising 模型,Hopfield 网络和受限的玻尔兹曼机 (Ising, Hopfield and RBM) 马尔科夫链蒙特卡洛方法和吉布斯采样 (MCMC and Gibbs Sampling) 特征值分解,奇异值分解和主成分分析 (EVD, SVD and PCA) 墨尔本之行 (Trip to Melbourne)
图存储与计算 (Network Storage and Computing) - 复杂网络系列
范叶亮 · 2021-01-01 · via 中文博客 on 范叶亮 | Leo Van

图存储与计算

Network Storage and Computing

复杂网络系列

分类: 机器学习, 复杂网络 / 字数: 3629 / 标签: 复杂网络, 图存储, 网络存储, 图计算, 网络计算, 语义网络, Semantic Web, 语义网堆栈, Semantic Web Stack, 资源描述框架, Resource Description Framework, RDF, 链接数据, Linked Data, Apache Jena, Graph of The Gods, ARQ, SPARQL, 图数据库, NoSQL, OLTP, OLAP, Neo4j, JanusGraph, Dgraph, TigerGraph, Nebula Graph, Gremlin, Apache TinkerPop, Cypher, nGQL, GraphX, Plato, GraphScope, ByteGraph, Galileo, 图嵌入, Graph Embedding, 图神经网络, Graph Neural Network, GNN


本文为《复杂网络系列》文章

图存储

语义网络与 RDF 存储

1968 年 Ross Quillian 在其博士论文中最先提出语义网络(Semantic Web),把它作为人类联想记忆的一个显式心理学模型,并在他设计的可教式语言理解器 TLC(Teachable Language Comprehenden)中用作知识表示方法。

语义网络的基本思想是在网络中,用“节点”代替概念,用节点间的“连接弧”(称为联想弧)代替概念之间的关系,因此,语义网络又称联想网络。它在形式上是一个带标识的有向图。由于所有的概念节点均通过联想弧彼此相连知识推导。

一个语义网络的基本构成如下:

  • 语义网络中的节点:表示各种事物、概念、情况、属性、动作、状态等,每个节点可以带有若干属性,一般用框架或元组表示。此外,节点还可以是一个语义子网络,形成一个多层次的嵌套结构。
  • 语义网络中的弧:表示各种语义联系,指明它所连接的节点间某种语义关系。
  • 节点和弧都必须带有标识,以便区分各种不同对象以及对象间各种不同的语义联系。

之后 Tim Berners-Lee 又提出了语义网堆栈(Semantic Web Stack)的概念。语义网堆栈利用图示解释是不同层面的语言所构成的层级结构,其中,每一层面都将利用下游层面的能力,语义网堆栈如下图所示:

资源描述框架(Resource Description Framework,RDF)是用于描述网络资源的 W3C 标准,比如网页的标题、作者、修改日期、内容以及版权信息。

RDF 使用 Web 标识符来标识事物,并通过属性和属性值来描述资源。

对资源、属性和属性值的解释:

  • 资源是可拥有 URI 的任何事物,比如 http://www.w3school.com.cn/rdf
  • 属性是拥有名称的资源,比如 authorhomepage
  • 属性值是某个属性的值,比如 Davidhttp://www.w3school.com.cn(请注意一个属性值可以是另外一个资源)

下面是一个 RDF 示例文档(这是一个简化的例子,命名空间被忽略了):

<?xml version="1.0"?>

<RDF>
  <Description about="http://www.w3school.com.cn/RDF">
    <author>David</author>
    <homepage>http://www.w3school.com.cn</homepage>
  </Description>
</RDF>

资源属性属性值的组合可形成一个陈述(被称为陈述的主体、谓语和客体)。上述的 RDF 文档包含了如下两个陈述:

  • 陈述:The author of http://www.w3school.com.cn/rdf is David
    • 陈述的主体是:http://www.w3school.com.cn/rdf
    • 谓语是:author
    • 客体是:David
  • 陈述:The homepage of http://www.w3school.com.cn/rdf is http://www.w3school.com.cn
    • 陈述的主体是:http://www.w3school.com.cn/rdf
    • 谓语是:homepage
    • 客体是:http://www.w3school.com.cn

更多 RDF 介绍请参见:https://www.w3school.com.cn/rdf/index.asp 。

Apache Jena 是一个用于构建语义网络(Semantic Web)和链接数据(Linked Data)应用的开源 Java 框架。Jena 提供了 3 大部分功能:

  1. RDF
    • RDF API:提供构建和读取 RDF 图的核心 API,并利用 RDF/XMLTurtle 等数据类型序列化数据。
    • ARQ(SPARQL):提供一种 SPARQL 1.1 的编译引擎 ARQ 用于查询 RDF。
  2. Triple store
    • TDB:提供一种原生高效的 Triple 存储 TDB,全面支持 Jena APIs。
    • Fuseki:提供 REST 风格的 RDF 数据交互方式。
  3. OWL
    • Ontology API:通过 RDFS,OWL 等为 RDF 数据添加更多语义信息。
    • Inference API:通过内置的 OWL 和 RDFS 语义推理器 构建个性化的推理规则。

下面以 Graph of The Gods 的关系图对 Jena 的基本功能进行说明。Graph of The Gods 是一张描述希腊神话相关事物之间关系的图,其中顶点的类型有:titan(泰坦,希腊神话中曾经统治师姐的古老神族),god(神),demigod(半神),human(人),monster(怪物),location(地点);关系的类型有:father(父亲),brother(兄弟),mother(母亲),battled(战斗),lives(居住)。

以 Apache Tomcat 作为容器来安装 Apache Jena Fuseki,下载最新版的 Apache Jena Fuseki 并解压,将其中的 fuseki.war 复制到已经安装并运行的 Apache Tomcat 的 webapps 路径下。安装完毕后,进入 http://127.0.0.1:8080/fuseki 即可使用 Apache Jena Fuseki。

在导入 Graph of The Gods 数据后,执行如下查询语句可以获得 jupiter 的所有兄弟:

PREFIX gods: <http://leovan.me/gods/>

SELECT DISTINCT ?god
WHERE {
  ?god gods:brother gods:jupiter
}

查询结果为:

god
1 gods:pluto
2 gods:neptune

图数据库

图数据库是一个使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。不同于关系型数据库,图数据库为 NoSQL(Not Only SQL)的一种,属于联机事务处理(OLTP)的范畴,可以解决现有关系数据库的局限性。

下图展示了近年来不同类型数据库的流行度趋势,不难看出近年来越来越多的人开始关注图数据库。

数据库流行度趋势 https://db-engines.com/en/ranking_categories

截止到 2020 年 12 月,图数据库的排名如下图所示:

图数据库排名 https://db-engines.com/en/ranking/graph+dbms

其中,Neo4jJanusGraphDgraphTigerGraphNebula Graph 均为时下常用的图数据库。从下图的流行度趋势角度来看,JanusGraph、Dgraph、TigerGraph 和 Nebula Graph 等后起之秀发展迅速。

图数据库流行度趋势 https://db-engines.com/en/ranking_trend/graph+dbms

不同的图数据库有着不同的优劣势,用户可以根据实际业务场景选择合适的图数据库。下面给到一些较新的图数据库对比和评测:

  1. 主流开源分布式图数据库 Benchmark
  2. 图数据库对比:Neo4j vs Nebula Graph vs HugeGraph
  3. 图分析系统基准测试报告
  4. 图数据平台产品测试报告

查询语言

图查询语言(Graph Query Language,GQL)是一种用于图数据库的查询语言,类比于关系型数据库的查询语言 SQL。2019 年 9 月,GQL 被提议为一种新的数据库查询语言(ISO/IEC WD 39075),目前仍处于开发当中,因此市面上还没有统一的图查询语言标准。

Gremlin

GremlinApache TinkerPop 框架下的图遍历语言。Gremlin 适用于基于 OLTP 的图数据库以及基于 OLAP 的图分析引擎,支持命令式和声明式查询。支持 Gremlin 的图数据库有:Neo4j、JanusGraph 等。

Cypher

Cypher 是一种声明式图查询语言,这使得在不必编写遍历逻辑的情况下可以实现高效的查询。支持 Cypher 的图数据库有:Neo4j、RedisGraph、Nebula Graph 等。

nGQL

nGQL 是一种声明式的图查询语言,支持图遍历、模式匹配、聚合运算和图计算等特性。支持 nGQL 的图数据库有:Nebula Graph。

比较

针对 3 种不同的查询语言,对于图中相关概念的表示也略有不同,如下表所示:

术语 Gremlin Cypher nGQL
Vertex Node Vertex
Edge Relationship Edge
点类型 Label Label Tag
边类型 label RelationshipType edge type
点 ID vid id(n) vid
边 ID eid id(r)
插入 add create insert
删除 drop delete delete / drop
更新属性 setProperty set update

更多不同查询语言之间的详细对比可以参见如下资料:

  1. 一文了解各大图数据库查询语言 | 操作入门篇
  2. 文档解读 | SQL vs. nGQL

图计算

图计算框架

GraphX

GraphX 是一个基于 Spark 大规模图计算框架。GraphX 通过引入一个包含带有属性的顶点和变的有向图对 Spark 的 RDD 进行了扩展。通过 subgraph、joinVertices 和 aggregateMessages 等算子实现了 PageRank、连通子图、LPA 等图算法。

Plato

Plato 是由腾讯开源的高性能图计算框架。Plato 主要提供两方面的能力:离线图计算和图表示学习,目前支持的图算法如下:

算法分类 算法
图特征 树深度/宽度;节点数/边数/密度/节点度分布;N-阶度;HyperANF
节点中心性指标 KCore;Pagerank;Closeness;Betweenness
连通图 & 社团识别 Connected-Component;LPA;HANP
图表示学习 Node2Vec-Randomwalk;Metapath-Randomwalk
聚类/分圈算法 FastUnfolding
其他图相关算法 BFS;共同类计算
待开源算法 Word2Vec;Line;GraphVite;GCN

在计算性能上,Plato 与 Spark GraphX 在 PageRank 和 LPA 两个算法上的计算耗时与内存消耗对比如下图所示:

Plato & Spark GraphX Benchmark

GraphScope

GraphScope 由有阿里巴巴开源的一个统一的分布式图计算平台。GraphScope 提供了一个一站式环境,可以通过用户友好的 Python 接口在集群内对图进行操作。GraphScope 利用一系列开源技术使得集群上的大规模图数据的多阶段处理变得简单,这些技术包括:用于分析的 GRAPE、用于查询的 MaxGraph 、用于图神经网络计算的 Graph-Learn 和用于提供高效内存数据交换的 vineyard。GraphScope 的整体架构如下图所示:

Architecture of GraphScope

GraphScope Interactive Engine(GIE)是一个用于探索性分析大规模复杂图结构数据的引擎,它通过 Gremlin 提供高级别的图查询语言,同时提供自动并行执行功能。

GraphScope Analytical Engine(GAE)是一个基于 GRAPE 1 提供并行图算法的分析引擎。除了提供基础的内置算法以外,GAE 允许用户利用 Python 基于 PIE 1 编程模型编写自定义算法,PIE 编程模型的运行方式如下图所示:

Execution Model in GAE

GraphScope 还提供以顶点为中心的 Pregel 模型 2,用户可以使用 Pregel 模型来实现自定义算法。

GraphScope Learning Engine(GLE)是一个用于开发和训练大规模图神经网络的分布式框架。GLE 提供基于全量图(用于 GCN、GAT 等算法)和采样子图(用于 GraphSAGE,FastGCN、GraphSAINT 等算法)两种不同方式训练图模型。整体架构如下图所示:

GLE

Galileo

Galileo 是由京东零售研发的图计算平台,提供离线和在线图计算和图数据服务能力。目前 Galileo 暂未开源,待开源后补充相关信息。

图神经网络

关于图神经网络内容,请参见之前的博客 图嵌入 (Graph Embedding) 和图神经网络 (Graph Neural Network)

🎉🎉🎉 Happy New Year! 🎉🎉🎉