文档要求作为transaction-attribute传递(对/begin
的调用):
最大事务大小:事务大小限制(以字节为单位)。仅由RocksDB存储引擎执行。
尽管php
-client忽略了该属性,但我还是设法做到了这一点,方法是在将事务示例交给处理程序之前手动设置该属性:
$trx->set('maxTransactionSize', $config['maxTransactionSize'])
这是事务属性($trx->attributes
)的var_dump
,它位于调用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上测试了这个,结果相同。
1条答案
按热度按时间q5iwbnjs1#
事实证明,阅读整个文档是明智的。128 MB是流事务大小的硬上限。
在协调器上强制执行流事务的最大生存期和事务大小,以确保事务不会阻止群集正常运行:
操作之间的最大空闲超时为10秒每个DB-Server的最大事务大小为128 MB这些限制也适用于单个服务器上的流事务。
这意味着你必须使用js-transaction来处理需要更多内存的查询。arangodb-php客户端提供了
Transaction.php
来在客户端 Package 这些查询,不需要编写/扩展foxx-app --至少,没有js-transaction文档中提到的限制(https://www.arangodb.com/docs/devel/http/transaction-js-transaction.html)。编辑:我将我的案例重新实现为js-transaction,它可以顺利完成。