文档要求以事务属性的形式传递(对/begin的调用):
maxTransactionSize:事务大小限制(以字节为单位)。仅由RocksDB存储引擎授予。
尽管php-client忽略了该属性,但我还是设法做到了这一点,在将事务实例交给处理程序之前先手动设置它:
$trx->set('maxTransactionSize', $config['maxTransactionSize'])这是事务属性( var_dump )的$trx->attributes,直接在调用begin之前。
includes/libs/arangodb/lib/ArangoDBClient/StreamingTransactionHandler.php:50:
array(2) {
'collections' =>
array(3) {
'read' =>
array(0) {
}
'write' =>
array(0) {
}
'exclusive' =>
array(1) {
[0] =>
string(7) "actions"
}
}
'maxTransactionSize' =>
int(536870912)
}但交易失败的原因是:
错误: AQL:中止事务,因为达到了134217728字节的最大事务大小限制(执行时)
我错过了什么/做错了什么?
我在3.5.4和3.6.1上进行了测试,结果也是一样的。
发布于 2020-03-04 10:01:46
结果证明,阅读整个文档是明智的。128 is是流事务大小的硬上限。
对协调程序强制执行流事务的最大生存期和事务大小,以确保事务不能阻止集群正常运行:
在操作之间的最大空闲超时时间为10秒,每个DB最大事务大小为128 MB,这些限制也适用于单个服务器上的流事务。
这意味着对于需要更多内存的查询,必须使用js事务。arangodb-php客户端提供了Transaction.php来将这些包在客户端,不需要编写/扩展foxx应用程序--至少在js-事务(https://www.arangodb.com/docs/devel/http/transaction-js-transaction.html)文档中没有提到限制。
编辑:我以js事务的形式重新实现了我的案例,它不受阻碍地完成了。
https://stackoverflow.com/questions/60512297
复制相似问题