连接
一旦您安装了驱动程序并拥有一个正在运行的 Neo4j 实例,您就可以将您的应用程序连接到数据库了。
连接到数据库
您可以通过创建一个 DriverWithContext 对象并提供 URL 和身份验证令牌来连接到 Neo4j 数据库。
package main
import (
"context"
"fmt"
"github.com/neo4j/neo4j-go-driver/v5/neo4j"
)
func main() {
ctx := context.Background() (2)
dbUri := "{neo4j-database-uri}"
dbUser := "{neo4j-username}"
dbPassword := "{neo4j-password}"
driver, err := neo4j.NewDriverWithContext( (1)
dbUri,
neo4j.BasicAuth(dbUser, dbPassword, ""))
if err != nil {
panic(err)
}
defer driver.Close(ctx) (4)
err = driver.VerifyConnectivity(ctx) (3)
if err != nil {
panic(err)
}
fmt.Println("Connection established.")
}
1 | 创建 DriverWithContext 实例仅提供如何访问数据库的信息,但实际上不建立连接。连接将在执行第一个查询时延迟。 |
2 | 大多数驱动程序函数需要 context.Context 参数,请参见 context 包。 |
3 | 要立即验证驱动程序是否可以连接到数据库(有效凭据、兼容版本等),请在初始化驱动程序后使用 .VerifyConnectivity(ctx) 方法。 |
4 | 始终关闭 DriverWithContext 对象以释放所有分配的资源,即使在连接不成功或后续查询中出现运行时错误时也是如此。最安全的做法是在对象成功创建后 defer 调用 DriverWithContext.Close(ctx) 。请注意,在某些特殊情况下 .Close() 可能会返回错误,因此您可能也需要捕获该错误。 |
Driver
对象是不可变的、线程安全的,并且创建成本高昂,因此您的应用程序应只创建一个实例并传递它(您可以在线程之间共享 Driver
实例)。如果您需要通过不同的用户查询数据库,请使用模拟,而无需创建新的 DriverWithContext
实例。如果您想更改 DriverWithContext
配置,则需要创建一个新对象。
驱动程序还支持其他身份验证方法(Kerberos、Bearer、自定义)。 |
连接到 Aura 实例
当您创建 Aura 实例时,您可以下载一个文本文件(所谓的 Dotenv 文件),其中包含以环境变量形式表示的数据库连接信息。该文件名为 Neo4j-a0a2fa1d-Created-2023-11-06.txt
。
您可以手动从该文件中提取 URI 和凭据,或使用第三方模块加载它们。为此,我们推荐使用模块包 godotenv
。
package main
import (
"context"
"os"
"fmt"
"github.com/joho/godotenv"
"github.com/neo4j/neo4j-go-driver/v5/neo4j"
)
func main() {
ctx := context.Background()
err := godotenv.Load("Neo4j-a0a2fa1d-Created-2023-11-06.txt")
if err != nil {
panic(err)
}
dbUri := os.Getenv("NEO4J_URI")
dbUser := os.Getenv("NEO4J_USERNAME")
dbPassword := os.Getenv("NEO4J_PASSWORD")
driver, err := neo4j.NewDriverWithContext(
dbUri,
neo4j.BasicAuth(dbUser, dbPassword, ""))
if err != nil {
panic(err)
}
defer driver.Close(ctx)
err = driver.VerifyConnectivity(ctx)
if err != nil {
panic(err)
}
fmt.Println("Connection established.")
}
Aura 实例与任何其他 Neo4j 实例在概念上没有区别,因为 Aura 只是 Neo4j 的一种部署模式。通过驱动程序与 Neo4j 数据库交互时,无论是 Aura 实例还是其他部署,都没有区别。 |
更多连接参数
有关更多 DriverWithContext
配置参数和更多连接设置,请参见高级连接信息。
词汇表
- LTS
-
长期支持版本是指保证支持多年的版本。Neo4j 4.4 是 LTS 版本,Neo4j 5 也将拥有一个 LTS 版本。
- Aura
-
Aura 是 Neo4j 的完全托管云服务。它提供免费和付费计划。
- Cypher
-
Cypher 是 Neo4j 的图查询语言,可让您从数据库中检索数据。它类似于 SQL,但用于图。
- APOC
-
Awesome Procedures On Cypher (APOC) 是一个函数库(许多),它们本身不容易用 Cypher 表达。
- Bolt
-
Bolt 是 Neo4j 实例和驱动程序之间交互使用的协议。它默认监听端口 7687。
- ACID
-
原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)(ACID) 是保证数据库事务可靠处理的属性。符合 ACID 的 DBMS 确保数据库中的数据即使在发生故障时也能保持准确和一致。
- 最终一致性
-
如果一个数据库保证所有集群成员在某个时间点都会存储最新版本的数据,那么它就是最终一致的。
- 因果一致性
-
如果读写查询按相同顺序被集群的每个成员看到,那么数据库就是因果一致的。这比最终一致性更强。
- NULL
-
null 标记不是一种类型,而是值缺失的占位符。有关更多信息,请参见Cypher → 使用
null
。 - 事务
-
事务是一个工作单元,它要么整体提交,要么在失败时回滚。一个例子是银行转账:它涉及多个步骤,但它们必须全部成功或全部恢复,以避免资金从一个账户中扣除但未添加到另一个账户的情况。
- 背压
-
背压是阻止数据流动的力。它确保客户端不会被比其处理速度更快的数据淹没。
- 事务函数
-
事务函数是由
ExecuteRead
或ExecuteWrite
调用执行的回调。驱动程序在服务器故障时自动重新执行回调。 - DriverWithContext
-
一个
DriverWithContext
对象包含建立与 Neo4j 数据库连接所需的详细信息。