国内/dgraph-php-client

使用GRPC的Dgraph PHP客户端

dev-master 2018-05-17 02:02 UTC

This package is auto-updated.

Last update: 2024-09-18 21:11:13 UTC


README

一个使用gRPC协议的Dgraph PHP客户端。

安装

在开始使用此客户端之前,我们强烈建议您通过tour.dgraph.iodocs.dgraph.io了解如何运行和与Dgraph交互。

目录

安装

您需要安装PECL,并安装sync和grpc包。

sudo pecl install grpc
sudo pecl install sync

在您的项目中

composer require dgraph

使用客户端

创建客户端

Dgraph对象可以通过传递一个包含DgraphClient客户端的列表作为可变参数来初始化。连接到同一集群中的多个Dgraph服务器可以实现更好的工作负载分配。

以下代码片段只显示了单个连接。

$hostname = 'localhost:9080';
$options = [
    'credentials' => Grpc\ChannelCredentials::createInsecure(),
];
$client = new DgraphClient($hostname, $options);

$dgraph = new Dgraph([$client]);

修改数据库

要设置模式,创建一个Operation实例并使用Alter端点。

$schema = "name: string @index(exact) .";
$operation = new Operation();
$operation->setSchema($schema);

$dgraph->alter($operation);

Operation还包含其他字段,包括DropAttrDropAllDropAll在您希望丢弃所有数据并从头开始而不需要关闭实例时非常有用。DropAttr用于删除与谓词相关的所有数据。

创建事务

要创建事务,调用DgraphClient::newTxn(),它返回一个Txn对象。此操作不会产生网络开销。

在初始化后,一个好的做法是在调用Txn::Discard()后使用finally语句。在调用Txn::Commit()之后调用Txn::Discard()是无操作的,并且您可以多次调用Txn::Discard()而不会有任何额外的副作用。

$txn = $dgraph->newTxn($dgraph);
  try {
    // Do something here
    // ...
  } finally {
    $txn->discard();
  }

运行突变

Txn::mutate()运行突变。它接受一个Mutation对象,该对象提供两种主要方式来设置数据:JSON和RDF N-Quad。您可以选择方便的方式。

我们将使用JSON。我们将在一个数组中设置属性和值,对其进行编码,并在Mutation对象中使用它。

// Create data
$personProperties = [
    'id' => '_alice',
    'name' => 'Alice',
];
$person = json_encode($personProperties);

// Run mutation
$mutation = (new Mutation())
    ->setSetJson($person);

$txn->mutate($mutation);

$txn->commit();

有时,您只想提交突变而不进行任何进一步查询。在这种情况下,您可以在Mutation对象中使用CommitNow字段来指示突变必须立即提交。

可以在Mutation对象上将IgnoreIndexConflict标志设置为true,以不在索引上运行冲突检测,这会减少事务冲突和终止的数量。但是,这会以潜在的更新操作不一致为代价。

运行查询

您可以通过调用Txn::query($query)来运行查询。您需要传递一个GraphQL+-查询字符串。如果您想传递一个包含您可能在查询中设置的任何变量的额外映射,请使用变量映射作为第三个参数调用Txn::queryWithVars($query, $vars)

让我们运行以下带有变量$a的查询

$query = 'query all($a: string) {
    all(func: eq(name, $a)) {
      name
    }
  }';

$response = $txn->ueryWithVars($query, ['$a' => 'Alice']);

echo $response->getJson();

提交事务

可以使用Txn::commit()方法提交事务。如果您的交易仅由对Txn::query()Txn::queryWithVars()的调用组成,而没有对Txn::mutate()的调用,则调用Txn::commit()是不必要的。

如果其他事务同时修改了此事务中修改的同一数据,则将返回错误。当交易失败时,由用户决定是否重试交易。

$txn = dgraphClient->newTxn();
// Perform some queries and mutations.

$context = $txn->commit();