【问题标题】:How to increase `maxTransactionSize` for Streaming Transactions in arangodb-php如何为 arangodb-php 中的流式事务增加“maxTransactionSize”
【发布时间】:2020-03-03 17:07:46
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: php arangodb arangodb-php


    【解决方案1】:

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

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

    两次操作之间的最大空闲超时时间为 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,并且它顺利完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 2020-05-25
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 2015-06-04
      • 1970-01-01
      相关资源
      最近更新 更多