Как увеличить `maxTransactionSize` для потоковых транзакций в arangodb- php - PullRequest
1 голос
/ 03 марта 2020

Документация говорит, что передать как атрибут транзакции (вызов /begin):

maxTransactionSize: ограничение размера транзакции в байтах. Уважаемый только механизмом хранения RocksDB.

Мне удается это сделать, несмотря на тот факт, что php -клиент игнорирует атрибут, устанавливая его вручную перед передачей экземпляра транзакции к обработчику:

 $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, с тем же результатом.

1 Ответ

1 голос
/ 04 марта 2020

Оказывается, разумно читать всю документацию. 128 МБ - это жесткий верхний предел для размера потоковой транзакции.

Максимальный срок действия и размер транзакции для потоковых транзакций применяются Координатором, чтобы гарантировать, что транзакции не могут блокировать работу кластера:

Максимальное время простоя 10 секунд между операциями Максимум размер транзакции 128 МБ на сервер БД. Эти ограничения также применяются для потоковых транзакций на отдельных серверах.

Это означает, что вы должны использовать транзакцию js для запросов, которым требуется больше памяти. Клиент arangodb- php предоставляет Transaction.php, чтобы обернуть их на стороне клиента, нет необходимости писать / расширять foxx-приложение - по крайней мере, нет никаких ограничений, упомянутых в документации js -транзакций ( https://www.arangodb.com/docs/devel/http/transaction-js-transaction.html).

Редактировать: я заново реализовал свое дело как js -транзакцию, и она завершается беспрепятственно.

...