powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Правильная работа с MySQL
25 сообщений из 97, страница 1 из 4
Правильная работа с MySQL
    #39626590
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не пинайте сильно. :)
Как правильно работать с соединением MySql?
1. Открывать соединение - брать данные - закрывать?
2. Открывать, работать с открытым и поднимать если упало?
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39626684
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEv,

Зависит от вкуса)
Я работаю по 2.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39627341
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто нет работы с таймингами и прочими вещами соединений.
Мне проще так, но терзают смутные сомнения.. :)

-Начать соединение, взять данные, закрыть, вывести данные на экран.
-Отредактировать , открыть соединение, записать в базу, закрыть соединение.
То есть всегда на короткий миг открывать соединение только для обращения к базе, потому что самое медленное - это интерфейс.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39627342
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asdorMaestroEv,

Зависит от вкуса)
Я работаю по 2.

Спасибо.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39627358
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEv,
Описанный вами вариант, "открыть -действия- закрыть"
Мне кажется более предпочтительным.

Я держу 1 соединение, из-за некоторых особенностей архитектуры.
(Просто к БД коннектятся, как 1 пользователь, а в бд, есть своя система юзеров, прав, монитора...)
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39627375
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEvКак правильно работать с соединением MySql?
1. Открывать соединение - брать данные - закрывать?
2. Открывать, работать с открытым и поднимать если упало?
Это зависит от многих причин.

Не вдаваясь в подробности - если много клиентов у сервера, то однозначно вариант 1 (со стороны разработчика).
Если нагрузка небольшая то можно использовать и вариант 2.

В реальной же жизни - всё зависит от драйвера который Вы используете для connection. И как правило это "смесь" открытых connections in the pool. Дело в том, что предоставление новых connection на стороне сервера довольно затратная операция.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39635086
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжим.
Часто пользуюсь подобными конструкциями:
**
DEFINE BAR 4 OF sprav PROMPT "\<Справочник" SKIP FOR !DOSTUP("Доступ к справочнику")
ну или
IF DOSTUP("СОЗДАНИЕ_НОВОГО_КЛИЕНТА")
=CREANEWKLI()
ENDIF
***

Ранее в таблицах VFP это работало на ура.
Модуль DOSTUP Обращается к таблицам и проверяет доступ.
В условиях MySQL , полагаю это слишком расточительно и скорость упала до неприемлимой, потому что модуль DOSTUP
теперь всякий раз стучится к MySQL , а это похоже не шустрое мероприятие.. Тем более пунктов меню предостаточно, да и доступов разных в программе масса подобного типа:

Вопросы.
- Правильно ли я полагаю, что надо как-то закэшировать (перенести их во временную директорию фокса) все служебные таблицы (справочники) при первом обращении и уже работать с ними как раньше? Или есть варианты?
Ну и как продолжение .. как тогда проверить дату изменения на сервере таблицы, чтобы это было быстро, без коннекта к MySql, чтобы в случае изменения таблицы на MySql - обновлять ее и на фоксе?

Спасибо.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39635191
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем случае всё зависит от многих причин - скорости Вашего доступа к SQL Server, загруженности самого сервера etc...

Вопросы.
- Правильно ли я полагаю, что надо как-то закэшировать

* правильно, большинство "больших" программ так и работает.

- (перенести их во временную директорию фокса) все служебные таблицы (справочники) при первом обращении и уже работать с ними как раньше?

* в общем не правильно. Данные должны быть уже в памяти приложения. Создайте свой класс кэша в FoxPro - у него должно быть ограничено время, когда кэш устаревает и при новом обращении к массиву данных - происходит обновление с сервера. В MS SQL Server есть встроенная функция оповещения подписчиков если данные за которыми Вы следите - изменились.

** я бы посветовал Вам почитать как работает кэш в ASP.NET. Потом просто перенести архитектуру в VFP (там ничего сложного нет).

*** данные по доступу к отдельным сегментам приложения, не изменяемым справочники системы обычно хранятся в кэше with long expiration time.

**** если пользователь обновляет данные, которые кэшируются - обычно все данные или частично по дате обновления переписываются.

***** для небольших прложений можно использовать технологию replication in MS SQL server. При грамотном распределение данных между подписчиками вполне неплохо получается - в каждой локальной сети у Вас будет по своему SQL Server и соответсвенно с кэшами можно не "заморачиваться"... На клиентах бесплатные урезанные MS SQL сервера.

****** можно посмотреть в сторону MS Azure но я думаю что это пока ещё дороговато да и цены не снижаются...

Good luck!
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39635274
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про кэширование конечно хорошо написано.
Но я бы в этом случае, слез с фокса, и писал бы на чем то более адекватном.
Потому, надо бы разобраться откуда тормоз. Может переделать что то в консерватории.
При переходе с файл-сервера, клиент -сервер, иногда и логику надо подтачивать)

MaestroEv...
Ранее в таблицах VFP это работало на ура.
Модуль DOSTUP Обращается к таблицам и проверяет доступ.
В условиях MySQL , полагаю это слишком расточительно и скорость упала до неприемлимой, потому что модуль DOSTUP
теперь всякий раз стучится к MySQL , а это похоже не шустрое мероприятие.. Тем более пунктов меню предостаточно, да и доступов разных в программе масса подобного типа:


Если общие условия использования ПО не изменились, то работа (правильная) с MySQL по меньшей мере, будет не медленнее чем с табл. фокса.
Ищите где тормоз.
Что касается меню, может при его заполнении, сразу и заполнить 1 раз, что этому юзеру можно что нет, и больше не лазить?
У меня просто иначе реализовано, когда создается объект, из БД получаю, что ему доступно в этом объекте.
И в общем то использую роли, а не персональные настройки
Но это лирика все. Ищите где тормоз.
Не может же там быть ОГРОМНЫЙ запрос.
Такие запросы как правило -миллисекнда, и ни на что не влияют
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39635735
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asdor,
Да, все так и у меня.
Dostup("добавлениеклиента") или Dostup("редактированиесчета") - это ничто иное как обращение к таблице и считывание есть у пользователя этот доступ или хотите роль.

У Вас обращение к MySQL - это миллисекунды? Вот тут и проблема!!!!!!!!!!!!

В моем случае нет разницы сколько запрашиваю и из какой таблицы.. всегда это 0,8 и более.
Открыть соединение, взять данные, закрыть соединение.

Соответственно, если меню содержит 500 строк кода, и к каждому пункт есть DOSTUP из базы по ролям, то это уже 6 минут на запуск и торможение во время движения по секунде на каждой строке !
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39635736
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Ch- (перенести их во временную директорию фокса) все служебные таблицы (справочники) при первом обращении и уже работать с ними как раньше?
* в общем не правильно. Данные должны быть уже в памяти приложения. Создайте свой класс кэша в FoxPro - у него должно быть ограничено время, когда кэш устаревает и при новом обращении к массиву данных - происходит обновление с сервера. В MS SQL Server есть встроенная функция оповещения подписчиков если данные за которыми Вы следите - изменились.
Good luck!

Справочников не мало.. Кэшировать в память? Ну допустим, а что явится сигналом, что кэш устарел? Время?
Или все же событие, что ест изменения в таблицах?
Кто-нить знает, как в MySql узнать, что таблица изменилась, не обращаясь к ней?
Иначе скорость не вырастет и на проверку буду тратить те же 0.8 секунды.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39635770
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEv,
Тогда вернитесь к 1му вопросу.
Создайте коннект, и пользуйтесь им всегда.
Т.е. 1й вариант.
Если скорость вырастет - вот вам и ответ на 1й вопрос.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39635772
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asdor,
Пардон - 2й вариант 1го вопроса)
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39635779
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEvВ моем случае нет разницы сколько запрашиваю и из какой таблицы.. всегда это 0,8 и более.
Открыть соединение , взять данные, закрыть соединение.
Подозреваю что тормоза из-за постоянного открыть-закрыть.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39635788
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПодозреваю что тормоза из-за постоянного открыть-закрыть.
Когда работал с MySql та же хрень была. Первый толчок был перейти на постоянное соединение.
Правда мускул тогда 3й был.
Думал что то изменилось...
Да и тогда, полагаю, что то в настройках не то было.
MS SQL мгновенно коннектится.
ТС - а почему на мускул переходите?
Есть бесплатные почти у всех.
Пока в процессе, подумайте...)
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39635789
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEvСправочников не мало.. Кэшировать в память? Ну допустим, а что явится сигналом, что кэш устарел? Время?
Или все же событие, что ест изменения в таблицах?
Кто-нить знает, как в MySql узнать, что таблица изменилась, не обращаясь к ней?
Иначе скорость не вырастет и на проверку буду тратить те же 0.8 секунды.
Эти вопросы лучше в форуме по MySql задать. Возможно есть какие-то штатные средства для решения твоей задачи.

Можно собственный велосипед изобрести: если изменения относительно редки, то завести в базе отдельную таблицу с одной записью и там хранить дату-время последнего изменения. Менять дату при каждом внесении изменений. Прочитать одну строку займет немного времени, намного меньше 0.8 сек.
Ответ можно кэшировать на несколько сек, тогда при работе с меню будет не 500 обращений к БД, а одно в несколько секунд.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39636410
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEvСоответственно, если меню содержит 500 строк кода, и к каждому пункт есть DOSTUP из базы по ролям, то это уже 6 минут на запуск и торможение во время движения по секунде на каждой строке !

-- таблица с правами доступа как раз первый кандидат для кэширования. И тогда меню будут стриться из таблицы памяти быстрее чем в настоящий момент.

MaestroEvВ моем случае нет разницы сколько запрашиваю и из какой таблицы.. всегда это 0,8 и более.
Открыть соединение, взять данные, закрыть соединение.

-- к сожалению я не знаю архитектуры Вашей системы. Где у Вас SQL server? В локальной сети? Тогда 0.8с это очень много. Как Вам уже посоветовали выше - надо задать этот вопрос на тематическом MySQL форуме (я сейчас в основном работаю с Oracle и MS SQL Server). В общем скорость работы сервера зависит от:
- скорости сети и внутренней firewall
- железа на котором "крутится" MySQL server
- версия - коммерческая/не коммерческая
- клиентский драйвер (очень сильно зависит)
- сколько пользователей в сети

-- по большому счёту я бы отказался от MySQL а пользу MS SQL Server. Можно начать с официально бесплатной версии Express Edition (до 50 пользователей и при правильно архитектуре приложения более чем достаточно). Будет мало - можно купить следующую версию.

-- интересно, скольуко у Вас пользователей? Все они в одной локальной сети? Или есть филиалы?

-- в конфигурации с replication которую я описал выше у нас примерно 800 магазинов от Штатов да Малазии. В каждом магазине по express edition of the MS SQL Server. К этому серверу по локальной сети подключаются кассовые терминалы (до 24 штук в самом большом магазине в Лондонстане). В отведённое время сервер передаёт данные на центральный сервер. Данные сегментированы строго по тому товару, который есть в данном магазине etc... В общем всё просто и надёжно. Перебои в глобальной сети ни на что не влияют, всё работает очень быстро...
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39636417
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Справочников не мало.. Кэшировать в память? Ну допустим, а что явится сигналом, что кэш устарел? Время?

-- если честно, никто не кэширует информацию, с которой работают. Например, при выписке счёта запрашиваются "живые" остатки, одновременно блокируются чтобы кто-то другой не продал Ваш товар. После окончания выписки - база данных обновляется. Я не думаю что при работе с таблицами у Вас другая архитектура.

-- да, кэш устаревает по времени. У нас как правило три градации в зависимости от того, как меняются данные. Справочники подгружаются по мере потребности. При запросе загрузка идёт в кэш и потом уже Вы работает с данными из памяти. Устарели данные - ничего не происходит, пока они Вам снова не потребовались...

Или все же событие, что ест изменения в таблицах?

-- такое есть в MS SQL Server (в MySQL скорее всего нет) называется "SQL Server Notification Services". Почитайте. Мы их использовали немного лет 8 назад, но когда у тебя более 20000 запросов в секунду, этот сервис просто "убивал" наш MS SQL Server и мы отказались в пользу распределённого кэша который устаревает по времени. А Вам может быть и подойдёт.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39650826
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сервер находиться где-то в интернете.
Выбор на MySql пал из-за простой возможности сделать на нем сразу инет магазин, чтобы не гонять данные из программы по учету на сайт. Так сказал тот кто пишет сайт.
Фокс выступит как-бы программой для работы продвинутых пользователей, руководства (потому что бизнеслогика вся описана и переход будет не такой болезненный), а через броузер пишем работу продавцов и клиентов..

Ок. Спасибо. Я понял, что решение комплексное. И придется чуть поменять логику работы.. с некоторыми модулями.

А держать соединение MySQL все время открытым - это насколько плохо и почему?

Полученный Запрос невозможно проиндексировать по нескольким полям.. для контекстного поиска.
Есть варианты, или надо его переносить в таблицу для этого?
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39650835
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEvСервер находиться где-то в интернете.

...

А держать соединение MySQL все время открытым - это насколько плохо и почему?
В таком случае вообще нельзя разрешать доступ к MySQL извне. Сломают.

Стандартный подход - сделать какое-нибудь WebAPI и работать через него.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39650842
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEvСервер находиться где-то в интернете.
Выбор на MySql пал из-за простой возможности сделать на нем сразу инет магазин, чтобы не гонять данные из программы по учету на сайт. Так сказал тот кто пишет сайт.
Фокс выступит как-бы программой для работы продвинутых пользователей, руководства (потому что бизнеслогика вся описана и переход будет не такой болезненный), а через броузер пишем работу продавцов и клиентов..
Ок. Спасибо. Я понял, что решение комплексное. И придется чуть поменять логику работы.. с некоторыми модулями.
[/quot]
Ну может чуть, а может и не чуть. Я бы советовал сесть, и нарисовать новую ПРАВИЛЬНУЮ схему БД, с учетом жестких требований безопасности.

MaestroEvА держать соединение MySQL все время открытым - это насколько плохо и почему?

Ничего плохого в этом нет.

MaestroEvПолученный Запрос невозможно проиндексировать по нескольким полям.. для контекстного поиска.
Есть варианты, или надо его переносить в таблицу для этого?
Вот тут, мне кажется за вопросом, стоит ошибка в работе.
Тащить клиенту, надо ОЧЕНЬ ограниченный набор данных. Индексировать, для упорядочивания самим клиентом - легко.
А поиск, по небольшому курсору, на фига тратить время на индекс, locate и даже время не заметите. И не надо никаких индексов для этого.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39651448
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно надо привыкать к Locate.
Справляется легко. Более того не нужно думать об индексах. :)
Спасибо.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39714271
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вопросик..
Я получил курсор запросом с MySql. Можно ли как-то в него делать Insert хотя бы одной записи?
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39714272
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В MSSQL можно, в MySQL не знаю, попробуй, скорее всего вставит.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39714281
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Вставляет. Спасибо.
...
Рейтинг: 0 / 0
25 сообщений из 97, страница 1 из 4
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Правильная работа с MySQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]