Обсуждение статьи "Работа с СУБД MySQL из MQL5 (MQL4)" - страница 11

 
Привет! Вопрос знатокам - как много данных и как часто я смогу читать из MySQL в МТ5 ? 
К примеру у меня данных 50 000 элементов и я их в таблице обновляю каждую 0,1 сек (числа). Сможет ли Мт5 их так же подхватывать из MySQL и обновлять каждую 0,1 сек? Лимитирование есть какое то функционала приведенного в этой статье по КБ за 1 запрос ? 
 
Alex Renko #:
Привет! Вопрос знатокам - как много данных и как часто я смогу читать из MySQL в МТ5 ? 
К примеру у меня данных 50 000 элементов и я их в таблице обновляю каждую 0,1 сек (числа). Сможет ли Мт5 их так же подхватывать из MySQL и обновлять каждую 0,1 сек? Лимитирование есть какое то функционала приведенного в этой статье по КБ за 1 запрос ? 

Ну, вопрос, конечно, интересный...

Надо сказать что по количеству возвращаемых SELECT строк запроса нет никаких лимитов.

Для самого же запроса лимит по размеру 64 Кб. Так что если Вы пытаетесь обновить 50к строк данных, то лучше их разбить на партии, скажем по 1000 строк и таким образом слать 50 запросов.

Что же касается скорости в 100 мс, если БД у вас на одном сервере, а ваш терминал в котором исполняется MQL с соединением к БД несколько отдален, то скорее всего Вы упретесь в network latency, в размере пинга...

Например, если у Вас между сервером БД и терминала пинг в размере 60 мс, то фактически ответ от сервера будет с задержкой = 60мс (запрос) + время обработки запроса на стороне БД + 60мс(ответ).


Этот проект всего лишь простенькая обертка для доступа к функционалу динамических библиотек mysql.

Набор функционала ограничен основными практически полезными функциями, можете расширять, добавлять то, что Вам необходимо, скажем добавить поддержку асинхронных запросов, и тогда можете слать все 50 запросов по 1000 строк не дожидаясь исполнения каждого по очереди.


P.S.: на Github можете посмотреть исходники библиотеки и предустановленные лимиты (https://github.com/elugovoy/MQLMySQL-Project/tree/master/MQLMySQL)

P.P.S.: также можете скачать, изменить на свое усмотрение, скомпилировать и тестить.

MQLMySQL-Project/MQLMySQL at master · elugovoy/MQLMySQL-Project
  • elugovoy
  • github.com
MQL & DLL libraries for working with MySQL database - elugovoy/MQLMySQL-Project
 
andreysneg #:

Можно както узнать количество Fields которые можно получить после MySqlCursorFetchRow ? 

Может какаято функция скрытая есть типа RowFieldsSize ...


Как я понял, если Field нету, то MySqlGetFieldAsString возвращается пустота. Но и если String Field специально содержит пустоту, то тоже возвращается пустота. Т.е. не всегда можно самому отследить количество Fields перебором. 


Как костыль можно узнать через sql команду сначала, но потом опять select делать, но это уже лишний Select.



Просим развивать библиотеку , очень полезная штука. Конечно давно пара mysql встроить в mt

Хм... а что за запросы такие хитрые у Вас что нужно определять количество полей, возвращенным им же?

Обычно в коменде SELECT перечисляют только то, что нужно в конкретной ситуации. Не используйте SELECT *, выбирайте только то, что нужно :) это нормальная практика.

Костылей не стоит делать, можете с Github исходники взять и добавить обертку для функции  mysql_fetch_fields()  MySQL API

 
andreysneg #:

Insert и Update query - только 16 кб лимит запроса ?


Если в запросе больше 16.000 символов то метатрейдер падает ( закрывается ). если меньше то норм.

Прикрепляю пример UPDATE за 32.000 символов


Поле для обновления в базе - LONGTEXT

В библиотеке определен размер для запросов в 64kb:

#define MAX_QUERY_SIZE 65535    // Max size of SQL query

Полагаю в Вашем случае (да наверное и не только в вашем, а дело в MQL string) идет 4-байтная кодировка utf, то есть 16*4 = 64 и предел таки достигается...

Тут либо запросы разбивать либо буфер увеличить для запроса и перекомпилировать.