Производительность и масштабируемость

Для того, чтобы выполнить узел Производные колонки, необходимо одно входящее соединение с узлом, который создает таблицу данных. При этом как родительский, так и дочерний узлы должны быть правильно настроены. В случае с узлом Производные колонки необходимо добавить как минимум одну новую колонку (в противном случае выполнение узла не имеет смысла), а выражение каждой такой колонки должно быть корректным. В ходе выполнения узла PolyAnalyst построчно считывает исходную таблицу данных, после чего для каждой строки рассчитывает значения в новых колонках. Это поэтапная и детерминируемая операция, поэтому в списке задач во время выполнения узла появится индикатор выполнения.

Таблицы данных в PolyAnalyst теоретически могут содержать \(2^{31}\) колонок. В узле Производные колонки вы можете добавить столько колонок, сколько требуется, при условии, что сумма существующих и новых колонок не превысит установленный максимум.

Максимальная глубина вложенности для SRL-выражений составляет 5000. Под созданием вложений понимается использование скобок в выражении, например, ((1+2)/3), где (1+2) – вложение во внешнюю операцию. Иными словами, нельзя использовать более 5000 знаков "(" в SRL-выражении. Подобным же образом вы не можете использовать во вложении более 5000 функций if.

Например, if(a,if(b,if(c,1,2),3),4) содержит две вложенные функций if.

Отметим, что на практике максимальная глубина вложенности выражения достигается крайне редко.

Максимально допустимый размер SRL-выражения для новой колонки составляет около 1 GB. В процессе своей работы вы вряд ли столкнетесь с ситуацией, когда будет достигнут установленный лимит.

В процессе выполнения узел Производные колонки оценивает одну строку за один раз для каждой колонки. Исключение составляют ситуации, когда выполняется оценка SRL-выражений, содержащих вложенные PDL-выражения. Скорость выполнения узла находится в линейной зависимости от числа колонок, которые необходимо создать, и числа строк, к которым применяется SRL-выражение каждой новой колонки.

В целом быстро и однозначно оценить производительность узла Производные колонки достаточно сложно, так как каждый узел уникален из-за своих выражений, а его производительность напрямую зависит от количества выражений и их сложности. Скорость применения одного SRL-выражения к строке для вычисления результата линейно зависит от количества записей. Эта скорость также зависит от числа операций и значений, используемых в выражении. Некоторые операции выполняются очень быстро, а другие – довольно медленно. Так, например, операция 1+1 завершится быстрее, чем операция содержит ли строковое значение АБВ символ Г. Одна из самых медленных SRL-функций – это функция str, которая конвертирует значение в строковое, что объясняется особенностями хранения строковых значений в системе PolyAnalyst.

Обычно вложенные PDL-выражения, позволяющие определить релевантность или количество случаев употребления слова или условия запроса, оцениваются достаточно быстро, так как текстовые колонки, по которым выполняется поиск, заранее проиндексированы. Это позволяет ускорить поиск. Однако некоторые выражения с PDL, например, '…​' + '…​', выполняются очень медленно, так как каждую строку приходится обрабатывать несколько раз.

Поскольку каждое правило оценивается для каждой строки за один раз, выделение памяти осуществляется отдельно для каждого случая, а уже выделенный объем ресурса используется для обработки последующих строк. Иными словами, узел Производные колонки использует небольшой объем доступной памяти в процессе всего выполнения, поскольку каждая операция выполняется последовательно и использует тот же объем памяти. Таким образом, для работы с одним выражением потребуется незначительный объем памяти. По сравнению с другими узлами PolyAnalyst потребление памяти узлом Производные колонки является минимальным.