Обсуждение статьи "SQLite: нативная работа с базами данных на SQL в MQL5" - страница 7
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Завтра в бете 2840 будет:
Очень радует, спасибо
Бета 2840 доступна, попробуйте пожалуйста.
Завтра в бете 2840 будет:
пример:
В визард создания баз данных новый json тип включим позже.
Кто разобрался, прошу показать реализацию такой задачи.
В рамках этой задачи правильно ли понимаю, что в обоих случаях (при чтении базы на Терминале2 и записи в базу в Терминале1) нужно ее блокировать через механизм транзакций?
Как наиболее дешево определить, что база данных была обновлена?
Фундаментально неправильно. Вы описываете распределенное клиент-серверное приложение, со схемой 1 писатель, n читателей. При проектировании подобных систем (да и вообще любых распределенных систем) необходимо стараться избегать каких-либо блокировок, используя lock-free способы организации данных и доступ к ним. Если используемая технология не позволяет обойтись без блокировки, то возможно это вообще не лучшее решение для Вашей задачи. При этом для других задач технология может быть замечательной.
В Вашем случае лучше развернуть полноценный сервер (можно на той же машине что и клиент) и писать котировки в очередь сообщений, посмотрите в сторону Kafka, например. Клиент будет читать эти котировки с нужного индекса. Это lock-free схема доступа к данным.
Получается, что обмен данными имеет меньше возможностей, чем через файлы?
Категорически нет. Обмен через файлы ни разу не атомарен, потому требует блокировок как на стороне читателя так и на стороне писателя. Это самый надежный способ получить deadlock и потеряться в отлавливании трудноуловимых и непонятных ошибках.
Фундаментально неправильно. Вы описываете распределенное клиент-серверное приложение, со схемой 1 писатель, n читателей. При проектировании подобных систем (да и вообще любых распределенных систем) необходимо стараться избегать каких-либо блокировок, используя lock-free способы организации данных и доступ к ним. Если используемая технология не позволяет обойтись без блокировки, то возможно это вообще не лучшее решение для Вашей задачи. При этом для других задач технология может быть замечательной.
В Вашем случае лучше развернуть полноценный сервер (можно на той же машине что и клиент) и писать котировки в очередь сообщений, посмотрите в сторону Kafka, например. Клиент будет читать эти котировки с нужного индекса. Это lock-free схема доступа к данным.
Категорически нет. Обмен через файлы ни разу не атомарен, потому требует блокировок как на стороне читателя так и на стороне писателя. Это самый надежный способ получить deadlock и потеряться в отлавливании трудноуловимых и непонятных ошибках.
Спасибо за столь подробный ответ! К сожалению, я совсем забыл, какую тогда задачу решал. Поэтому не могу поделиться своими соображениями по теме.
Бета 2840 доступна, попробуйте пожалуйста.
Вопросы по этому решению
- Есть ли проблемы с одновременным использованием несколькими советниками одной базы данных sqlite?
- Если MT5 падает, могут ли быть потеряны некоторые данные? Как часто он записывает данные на диск?
Добрый день, уважаемые разработчики!
Функция "DatabaseExport" никак не хочет работать...выдает ошибку 5601 (ошибка выполнения запроса, но запрос я не выполняю) когда указываю имя таблицы в параметрах,
а когда указываю SQL запрос, то ошибка 4022 (отмена выполнения программы), возможно ошибка внутри MQL функции, часть кода из моей библиотеки: