49 次发布
0.8.0 | 2024 年 8 月 7 日 |
---|---|
0.7.3 | 2024 年 7 月 31 日 |
0.7.1 |
|
0.7.0-rc.3 |
|
0.1.0 | 2020 年 10 月 22 日 |
#44 在 数据库接口
4,564 每月下载量
用于 15 个 Crates(12 个直接使用)
455KB
12K SLoC
Neo4rs
neo4rs
是 Neo4j 图数据库的驱动程序,使用 Rust 编写。
neo4rs
实现了 bolt 规范
此驱动程序与 Neo4j 版本 5.x 和 4.4 兼容。仅支持最新的 5.x 版本,遵循 Neo4j 版本支持策略。
API 文档:
示例
// concurrent queries
let uri = "127.0.0.1:7687";
let user = "neo4j";
let pass = "neo";
let graph = Graph::new(&uri, user, pass).await.unwrap();
for _ in 1..=42 {
let graph = graph.clone();
tokio::spawn(async move {
let mut result = graph.execute(
query("MATCH (p:Person {name: $name}) RETURN p").param("name", "Mark")
).await.unwrap();
while let Ok(Some(row)) = result.next().await {
let node: Node = row.get("p").unwrap();
let name: String = node.get("name").unwrap();
println!("{}", name);
}
});
}
//Transactions
let mut txn = graph.start_txn().await.unwrap();
txn.run_queries([
"CREATE (p:Person {name: 'mark'})",
"CREATE (p:Person {name: 'jake'})",
"CREATE (p:Person {name: 'luke'})",
])
.await
.unwrap();
txn.commit().await.unwrap(); //or txn.rollback().await.unwrap();
MSRV
此包具有最低支持的 Rust 版本(MSRV)为 1.63.0
。
MSRV 的更改 不 被视为破坏性更改。对于 1.0.0 之后的版本,可以在次要版本增量(1.1.3 -> 1.2.0)中进行 MSRV 的更改;对于 1.0.0 之前的版本,可以在补丁版本增量(0.1.3 -> 0.1.4)中进行 MSRV 的更改。
开发
测试
该包包含单元测试和集成测试。单元测试使用cargo test --lib
运行,无需运行Neo4j实例。集成测试使用cargo test
运行,需要运行中的Neo4j实例。
运行集成测试
要运行测试,您需要运行docker或现有的Neo4j实例。由于测试可能不会自动清理,推荐使用docker。
使用Docker
要使用docker运行测试,您需要已安装并运行docker。您可以通过设置NEO4J_VERSION_TAG
环境变量来控制使用的Neo4j版本。默认版本是4.2
。测试将使用官方的neo4j
docker镜像,版本作为标签。
您可能会遇到“无法启动容器”的恐慌或测试失败。在这种情况下,在运行测试之前,尝试先使用docker pull neo4j:$NEO4J_VERSION_TAG
拉取镜像。
这可能发生在您的机器架构不支持该镜像的情况下,例如arm64
架构的苹果硅Mac。在这种情况下,拉取镜像将失败,并显示类似“no matching manifest for linux/arm64/v8”的消息。您需要使用--platform
标志拉取不同架构的镜像,例如docker pull --platform linux/amd64 neo4j:$NEO4J_VERSION_TAG
。docker中有一个实验性选项可以使用Rosetta运行这些镜像,这样测试就不需要花费很长时间(请检查docker文档)。
您也可以使用较新的neo4j版本,如4.4
,它支持arm64
架构。
使用现有的Neo4j实例
要使用现有的Neo4j实例运行测试,您需要将NEO4J_TEST_URI
环境变量设置为连接字符串,例如neo4j+s://42421337thisisnotarealinstance.databases.neo4j.io
。默认用户是neo4j
,但可以使用NEO4J_TEST_USER
环境变量进行更改。默认密码是neo
,但可以使用NEO4J_TEST_PASS
环境变量进行更改。
一些测试可能根据Neo4j版本运行不同的查询。您可以使用NEO4J_VERSION_TAG
环境变量设置Neo4j实例的版本。
建议只运行单个集成测试,并在测试后手动清理数据库。
env NEO4J_TEST_URI=neo4j+s://42421337thisisnotarealinstance.databases.neo4j.io NEO4J_TEST_USER=neo4j NEO4J_TEST_PASS=supersecret NEO4J_VERSION_TAG=5.8 cargo test --test <name of the integration test, see the file names in lib/tests/>
更新CI的Cargo.lock
文件
我们有一些CI测试,用于验证MSRV以及依赖项的最小版本。最小版本是满足Cargo.toml
条目的最低版本,而不是默认的最高版本。
如果您更改了Cargo.toml
中的任何内容,您需要更新CI的Cargo.lock
文件。
该项目使用xtask来帮助更新锁文件。
建议在运行以下命令之前关闭所有编辑器,或者更具体地说,关闭此项目的所有 rust-analyzer 实例。
更新 ci/Cargo.lock.msrv
# If there are errors, update Cargo.toml to fix and try again from the top.
# You might have to downgrade or remove certain crates to hit the MSRV.
# A number of such downgrades are already defined in the `update_msrv_lock` function
# in the xtask script.
# Alternatively, you might suggest an increase of the MSRV.
cargo xtask msrv
使用 xtask
需要系统上已安装 curl
和 jq
。
更新 ci/Cargo.lock.min
# If there are errors, update Cargo.toml to fix and try again from the top.
cargo xtask min
使用 xtask
需要系统上已安装 curl
和 jq
。
许可协议
Neo4rs 可以根据您的选择以下任一许可协议进行许可
- Apache License,版本 2.0,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT License (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
依赖项
~15–25MB
~463K SLoC