Размер скрипта передается в Informix через ODBC - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь выяснить, существуют ли какие-либо ограничения на размер скрипта, передаваемого в Informix через ODB C.

Размер моего скрипта Informix будет составлять несколько мегабайт (примерно 3,5 K INSERT строк в таблицу TEMP) и имеет форму ...

INSERT INTO table (field_1, field_2) VALUES (value_1, value_2)
INSERT INTO table (field_1, field_2) VALUES (value_1, value_2)
...
INSERT INTO table (field_1, field_2) VALUES (value_1, value_2)

..., за которой следует раздел для возврата списка SELECT на основе существующей таблицы. ..

SELECT 
    t1.field_1, 
    t1.field_2, 
    ...
    t1.field_n, 
    t2.field_2  
FROM 
    table_1 AS t1 
    INNER JOIN 
    temp_table_2 AS t2 
        ON  t1.field_1 = t2.field_1

Существуют ли какие-либо ограничения на размер скрипта или таблицы памяти? Я оцениваю (надеюсь?), Что строки 3,5 КБ (мы рассматриваем только один или два столбца) не вызовут проблемы или не окажут неблагоприятного влияния на сервер (легко может быть достаточно памяти). Обратите внимание, что мой единственный способ связи - через ODB C, и это частная база данных - я не могу создавать фактические таблицы данных на сервере.

Причина, по которой я спрашиваю, заключается в том, что ранее я сгенерировал сценарий значительного размера, но вместо помещения идентификаторов 3.5k в таблицу TEMP (со связанными данными) я использовал условие IN, чтобы искать только идентификаторы (обработка может выполняться, как только записи были расположены). Однако я не могу быть уверен, что это вызвало проблему - редактор скриптов (который был неким интерфейсом к базе данных), ограничения для условия IN или размер самого скрипта - вызвали проблему, но в основном скрипт не запустится После этого мы просмотрели скрипт, сохранили его в папке и попытались выполнить его с похожими (но не одинаковыми) результатами (извините - у меня нет сообщений об ошибках ни от одного из процессов - это было сделано некоторое время go).

Буду признателен за советы, ориентированные на Informix, в этой области! : О)

1 Ответ

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

Какую версию Informix вы используете? Предполагая, что это либо 12.10, либо 14.10, тогда не существует определенного ограничения c на размер набора утверждений, но такое чудовище, которое вы предлагаете, является жестоким и необычным наказанием для сервера базы данных (оно определенно злоупотребляет вашим сервером ).

Это также может быть умеренно рискованным; Вы должны убедиться, что правильно цитируете любые данные, предоставленные пользователем, чтобы избежать проблемы Little Bobby Tables .

. Вы должны подготовить один оператор INSERT с двумя значениями-заполнителями:

INSERT INTO table(field_1, field_2) VALUES(?,?)

Затем вы должны выполнить это несколько раз, предоставляя различные значения. Это будет более эффективно, чем заставить сервер анализировать 3500 подобных операторов. В ESQL / C вы можете объявить курсор INSERT, который буферизует наборы значений, сокращая количество обращений к серверу, что также может быть очень полезным. Я не уверен, что это вариант в ODBC; вероятно, нет.

По крайней мере, вы должны поэкспериментировать с использованием подготовленного утверждения. Отправка 3500 x 60+ байтов = 210 КиБ на сервер выполнима. Но вы бы отправляли на сервер меньший объем данных (но было бы больше циклов - что может быть важным фактором), если бы вы использовали подготовленный оператор и выполняли его повторно с новыми параметрами каждый раз. И вы избегаете угроз безопасности при преобразовании значений в строки. (Поскольку вы не указали типы значений, нет уверенности, что существует риск. Если они обозначены цифрами c или такими вещами, как дата и время, они имеют очень низкий риск. Если они представляют собой строки символов, риск значительный - не непреодолимый, но не пренебрежимо малый.)

В более старых версиях Informix были меньшие ограничения на размер набора операторов - 64 КиБ, а до этого - 32 КиБ. Вы вряд ли будете использовать достаточно старую версию, чтобы это было проблемой, но правила со временем изменились.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...