1

文档说作为事务属性传递(对 的调用/begin):

maxTransactionSize:以字节为单位的事务大小限制。仅由 RocksDB 存储引擎授予。

我设法做到了这一点,尽管php-client 忽略了该属性,通过在我将事务实例交给处理程序之前手动设置它:

 $trx->set('maxTransactionSize', $config['maxTransactionSize'])

这是直接在调用之前var_dump的事务属性 ( ) :$trx->attributesbegin

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 上对此进行了测试,结果相同。

4

1 回答 1

1

事实证明,阅读整个文档是明智的。128MB 是流式事务大小的硬上限。

在协调器上强制执行流事务的最大生命周期和事务大小,以确保事务不会阻止集群正常运行:

操作之间的最大空闲超时为 10 秒 每个 DB-Server 的最大事务大小为 128 MB 这些限制也适用于单个服务器上的流事务。

这意味着您必须对需要更多内存的查询使用 js-transaction。arangodb-php 客户端提供Transaction.php将这些包装在客户端,无需编写/扩展 foxx-app - 至少,js-transactions 的文档中没有提到任何限制(https://www.arangodb .com/docs/devel/http/transaction-js-transaction.html)。

编辑:我将我的案例重新实现为 js-transaction,并且它不受阻碍地完成。

于 2020-03-04T10:01:46.287 回答