#temporal-graph #graph #temporal

已撤回 docbrown-core

DocBrown 的核心包,一个时间图库

0.0.8 2023年4月9日
0.0.7 2023年4月5日
0.0.6 2023年3月19日

#10#temporal-graph

Download history 21/week @ 2024-03-28 21/week @ 2024-04-04

每月 57 次下载
docbrown-db 中使用

AGPL-3.0-only

235KB
6K SLoC


Raphtory


Test and Build Issues

🌍 网站   📖 文档   Pometry   🐛 报告错误   加入 Slack


什么是 Doc Brown? 🥼

Doc Brown 是 Raphtory 的 Rust 原型,用于下一个版本,重新思考了底层图模型和算法 API 的几个方面。

请查看 问题,了解将要包含的核心功能和它们提议的语义。

以下是如何 Doc Brown 工作的示意图

Raphtory-DocBrown-Diagram

GraphDB 是图的总管理员。一个 GraphDB 实例可以有 N 个分片。这些分片(也称为 TemporalGraphParts)存储图的片段。如果您之前使用过 Raphtory 的 Scala/Python 版本,那么分片的概念与 Raphtory 中的分区相似,即图的各个部分存储到分区中。在 Doc Brown 中向图中添加边或节点时,GraphDB 将在分片内部搜索一个适当的位置来放置这些边或节点。在此图中,有 4 个分片(或分区)标记为 S1、S2、S3、S4。它们共同构成了整个时间图,因此每个分片的名称为 "TemporalGraphPart"。

分片用于性能和分布式原因。在 Raphtory 中,多个分片并行运行可以大大加快速度。您可以在几秒钟内从您的时间图分析中看到结果。此外,您可以在多台机器上运行您的分析(例如,每台机器一个分片)。

运行 Doc Brown 👨🏼‍🔬

API 目前处于...变化

image

但是,如果您想测试 Raphtory Rust 原型,这里有一个快速入门指南。

运行 LOTR 示例 🧙🏻‍♂️

先决条件

确保您的操作系统上已安装 Rust。以下是如何安装 Rust 的指南。

1. 设置 Doc Brown

克隆Doc Brown仓库,找到examples目录,在那里您可以找到《指环王》示例。在examples/lotr下创建一个名为“Data”的文件夹,并将LOTR CSV数据下载到这个文件夹中。您可以从这里下载原始CSV文件:此处

2. 运行Doc Brown

通过运行以下命令构建Doc Brown以确保它编译和构建

cargo build

如果您有任何链接器错误,请使用以下命令进行构建

cargo build --no-default-features

接下来,运行main.rs中的主函数,该函数从LOTR CSV文件创建一个图,显示了书中不同角色的互动。为此,您需要位于lotr文件夹中,从根目录到该文件的路径是./examples/src/bin/lotr。一旦您在这里,运行此命令以运行LOTR示例

cargo run --bin lotr

您应该会看到类似以下输出的内容,其中包含有关边和顶点的信息

Loaded graph from encoded data files ./examples/src/bin/lotr/data/graphdb.bincode with 139 vertices, 701 edges which took 0 seconds

Gandalf exists = true

恭喜,您已经成功运行了第一个Rust版本的Raphtory图!

3. 运行测试

要运行Doc Brown中的测试,请回到您的根目录并运行此命令

cargo test

代码示例

// Create your GraphDB object and state the number of shards you would like, here we have 2
let graph = GraphDB::new(2);

// Add vertex and edges to your graph with the respective properties
graph.add_vertex(
  src_id,
  time,
  &vec![("name".to_string(), Prop::Str("Character".to_string()))],
);

graph.add_vertex(
  dst_id,
  time,
  &vec![("name".to_string(), Prop::Str("Character".to_string()))],
);

graph.add_edge(
  src_id,
  dst_id,
  time,
  &vec![(
      "name".to_string(),
      Prop::Str("Character Co-occurrence".to_string()),
  )],
);

// We calculate a hash for the string "Gandalf" to be used as a unique identifier for Gandalf
let gandalf = utils::calculate_hash(&"Gandalf");

// Get the in-degree, out-degree and degree of Gandalf
let in_degree = graph.degree_window(gandalf, 0, i64::MAX, Direction::IN);
let out_degree = graph.degree_window(gandalf, 0, i64::MAX, Direction::OUT);
let degree = graph.degree_window(gandalf, 0, i64::MAX, Direction::BOTH);

文档

DocBrown有文档,包括教程、解释和Rust文档。您可以在ReadTheDocs上找到它

贡献

  • 安装指南安装Rust
  • 安装Python 3.10(建议使用虚拟/conda环境)。
  • 安装构建/测试所需的pip包
pip install maturin pytest

社区

加入日益壮大的开源爱好者群体,他们正在使用Raphtory来推动他们的图分析项目!

  • 关注Slack获取最新的Raphtory新闻和发展动态

  • 加入我们的Slack与我们聊天并回答您的问题!

关于Raphtory的文章和演讲

贡献者

由于Doc Brown仍然是原型,我们欢迎任何贡献。如果您发现任何问题或想自己解决一些问题,请访问问题页面。如果您有任何问题或想了解更多关于如何加入Raphtory的信息,请加入我们的Slack

许可

Raphtory根据Apache许可证的条款进行许可(请参阅我们的LICENSE文件)。

依赖关系

~6–16MB
~229K SLoC