国内 / dgraph-php-client
使用GRPC的Dgraph PHP客户端
Requires
- php: >=7.1
- google/protobuf: ^3.3
- grpc/grpc: ^1.3
This package is auto-updated.
Last update: 2024-09-18 21:11:13 UTC
README
一个使用gRPC协议的Dgraph PHP客户端。
安装
在开始使用此客户端之前,我们强烈建议您通过tour.dgraph.io和docs.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
还包含其他字段,包括DropAttr
和DropAll
。DropAll
在您希望丢弃所有数据并从头开始而不需要关闭实例时非常有用。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();