如何在arangodb-php中增加流式事务的'maxTransactionSize'

68bkxrlz  于 2022-12-09  发布在  Go
关注(0)|答案(1)|浏览(141)

文档要求作为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上测试了这个,结果相同。

q5iwbnjs

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,它可以顺利完成。

相关问题