连接

一旦您安装了驱动程序并拥有正在运行的 Neo4j 实例,您就可以准备好将您的应用程序连接到数据库了。

连接到数据库

您可以通过创建一个DriverWithContext对象并提供 URL 和身份验证令牌来连接到 Neo4j 数据库。

package main

import (
    "context"
    "fmt"
    "github.com/neo4j/neo4j-go-driver/v5/neo4j"
)

func main() {
    ctx := context.Background() (2)
    dbUri := "<URI for Neo4j database>"
    dbUser := "<Username>"
    dbPassword := "<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 对象以释放所有分配的资源,即使在连接失败或后续查询中出现运行时错误时也是如此。最安全的做法是在成功创建对象后deferDriverWithContext.Close(ctx) 的调用。请注意,在某些情况下,.Close() 可能会返回错误,因此您可能也希望捕获该错误。

Driver 对象是不可变的、线程安全的,并且创建成本高昂,因此您的应用程序应该只创建一个实例并将其传递(您可以在线程之间共享 Driver 实例)。如果您需要通过多个不同的用户查询数据库,请使用模拟,而无需创建新的 DriverWithContext 实例。如果您想更改 DriverWithContext 配置,则需要创建一个新对象。

连接到 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

原子性、一致性、隔离性和持久性 (ACID) 是保证数据库事务可靠处理的属性。符合 ACID 的 DBMS 确保数据库中的数据即使在发生故障时也能保持准确和一致。

最终一致性

如果数据库保证所有集群成员将在某个时间点存储数据的最新版本,则该数据库最终一致。

因果一致性

如果读写查询以相同的顺序由集群中的每个成员看到,则数据库具有因果一致性。这比最终一致性更强。

NULL

空标记不是类型,而是值不存在的占位符。有关更多信息,请参阅Cypher → 使用 null

事务

事务是完整提交或在失败时回滚的工作单元。例如银行转账:它涉及多个步骤,但它们必须全部成功或被撤消,以避免资金从一个账户中扣除但未添加到另一个账户中。

背压

背压是与数据流相反的力。它确保客户端不会被数据以超出其处理能力的速度淹没。

事务函数

事务函数是由 ExecuteReadExecuteWrite 调用执行的回调。如果服务器发生故障,驱动程序会自动重新执行回调。

DriverWithContext

DriverWithContext 对象包含建立与 Neo4j 数据库连接所需的详细信息。