|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
Не пинайте сильно. :) Как правильно работать с соединением MySql? 1. Открывать соединение - брать данные - закрывать? 2. Открывать, работать с открытым и поднимать если упало? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2018, 10:10 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
MaestroEv, Зависит от вкуса) Я работаю по 2. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2018, 11:44 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
Просто нет работы с таймингами и прочими вещами соединений. Мне проще так, но терзают смутные сомнения.. :) -Начать соединение, взять данные, закрыть, вывести данные на экран. -Отредактировать , открыть соединение, записать в базу, закрыть соединение. То есть всегда на короткий миг открывать соединение только для обращения к базе, потому что самое медленное - это интерфейс. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2018, 02:29 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
asdorMaestroEv, Зависит от вкуса) Я работаю по 2. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2018, 02:31 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
MaestroEv, Описанный вами вариант, "открыть -действия- закрыть" Мне кажется более предпочтительным. Я держу 1 соединение, из-за некоторых особенностей архитектуры. (Просто к БД коннектятся, как 1 пользователь, а в бд, есть своя система юзеров, прав, монитора...) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2018, 07:47 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
MaestroEvКак правильно работать с соединением MySql? 1. Открывать соединение - брать данные - закрывать? 2. Открывать, работать с открытым и поднимать если упало? Это зависит от многих причин. Не вдаваясь в подробности - если много клиентов у сервера, то однозначно вариант 1 (со стороны разработчика). Если нагрузка небольшая то можно использовать и вариант 2. В реальной же жизни - всё зависит от драйвера который Вы используете для connection. И как правило это "смесь" открытых connections in the pool. Дело в том, что предоставление новых connection на стороне сервера довольно затратная операция. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2018, 09:19 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
Продолжим. Часто пользуюсь подобными конструкциями: ** DEFINE BAR 4 OF sprav PROMPT "\<Справочник" SKIP FOR !DOSTUP("Доступ к справочнику") ну или IF DOSTUP("СОЗДАНИЕ_НОВОГО_КЛИЕНТА") =CREANEWKLI() ENDIF *** Ранее в таблицах VFP это работало на ура. Модуль DOSTUP Обращается к таблицам и проверяет доступ. В условиях MySQL , полагаю это слишком расточительно и скорость упала до неприемлимой, потому что модуль DOSTUP теперь всякий раз стучится к MySQL , а это похоже не шустрое мероприятие.. Тем более пунктов меню предостаточно, да и доступов разных в программе масса подобного типа: Вопросы. - Правильно ли я полагаю, что надо как-то закэшировать (перенести их во временную директорию фокса) все служебные таблицы (справочники) при первом обращении и уже работать с ними как раньше? Или есть варианты? Ну и как продолжение .. как тогда проверить дату изменения на сервере таблицы, чтобы это было быстро, без коннекта к MySql, чтобы в случае изменения таблицы на MySql - обновлять ее и на фоксе? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2018, 03:22 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
В общем случае всё зависит от многих причин - скорости Вашего доступа к 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! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2018, 11:08 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
Про кэширование конечно хорошо написано. Но я бы в этом случае, слез с фокса, и писал бы на чем то более адекватном. Потому, надо бы разобраться откуда тормоз. Может переделать что то в консерватории. При переходе с файл-сервера, клиент -сервер, иногда и логику надо подтачивать) MaestroEv... Ранее в таблицах VFP это работало на ура. Модуль DOSTUP Обращается к таблицам и проверяет доступ. В условиях MySQL , полагаю это слишком расточительно и скорость упала до неприемлимой, потому что модуль DOSTUP теперь всякий раз стучится к MySQL , а это похоже не шустрое мероприятие.. Тем более пунктов меню предостаточно, да и доступов разных в программе масса подобного типа: Если общие условия использования ПО не изменились, то работа (правильная) с MySQL по меньшей мере, будет не медленнее чем с табл. фокса. Ищите где тормоз. Что касается меню, может при его заполнении, сразу и заполнить 1 раз, что этому юзеру можно что нет, и больше не лазить? У меня просто иначе реализовано, когда создается объект, из БД получаю, что ему доступно в этом объекте. И в общем то использую роли, а не персональные настройки Но это лирика все. Ищите где тормоз. Не может же там быть ОГРОМНЫЙ запрос. Такие запросы как правило -миллисекнда, и ни на что не влияют ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2018, 12:31 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
asdor, Да, все так и у меня. Dostup("добавлениеклиента") или Dostup("редактированиесчета") - это ничто иное как обращение к таблице и считывание есть у пользователя этот доступ или хотите роль. У Вас обращение к MySQL - это миллисекунды? Вот тут и проблема!!!!!!!!!!!! В моем случае нет разницы сколько запрашиваю и из какой таблицы.. всегда это 0,8 и более. Открыть соединение, взять данные, закрыть соединение. Соответственно, если меню содержит 500 строк кода, и к каждому пункт есть DOSTUP из базы по ролям, то это уже 6 минут на запуск и торможение во время движения по секунде на каждой строке ! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2018, 02:44 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
Sergey Ch- (перенести их во временную директорию фокса) все служебные таблицы (справочники) при первом обращении и уже работать с ними как раньше? * в общем не правильно. Данные должны быть уже в памяти приложения. Создайте свой класс кэша в FoxPro - у него должно быть ограничено время, когда кэш устаревает и при новом обращении к массиву данных - происходит обновление с сервера. В MS SQL Server есть встроенная функция оповещения подписчиков если данные за которыми Вы следите - изменились. Good luck! Справочников не мало.. Кэшировать в память? Ну допустим, а что явится сигналом, что кэш устарел? Время? Или все же событие, что ест изменения в таблицах? Кто-нить знает, как в MySql узнать, что таблица изменилась, не обращаясь к ней? Иначе скорость не вырастет и на проверку буду тратить те же 0.8 секунды. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2018, 03:03 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
MaestroEv, Тогда вернитесь к 1му вопросу. Создайте коннект, и пользуйтесь им всегда. Т.е. 1й вариант. Если скорость вырастет - вот вам и ответ на 1й вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2018, 07:36 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
asdor, Пардон - 2й вариант 1го вопроса) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2018, 07:37 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
MaestroEvВ моем случае нет разницы сколько запрашиваю и из какой таблицы.. всегда это 0,8 и более. Открыть соединение , взять данные, закрыть соединение. Подозреваю что тормоза из-за постоянного открыть-закрыть. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2018, 07:48 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
Dima TПодозреваю что тормоза из-за постоянного открыть-закрыть. Когда работал с MySql та же хрень была. Первый толчок был перейти на постоянное соединение. Правда мускул тогда 3й был. Думал что то изменилось... Да и тогда, полагаю, что то в настройках не то было. MS SQL мгновенно коннектится. ТС - а почему на мускул переходите? Есть бесплатные почти у всех. Пока в процессе, подумайте...) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2018, 07:58 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
MaestroEvСправочников не мало.. Кэшировать в память? Ну допустим, а что явится сигналом, что кэш устарел? Время? Или все же событие, что ест изменения в таблицах? Кто-нить знает, как в MySql узнать, что таблица изменилась, не обращаясь к ней? Иначе скорость не вырастет и на проверку буду тратить те же 0.8 секунды. Эти вопросы лучше в форуме по MySql задать. Возможно есть какие-то штатные средства для решения твоей задачи. Можно собственный велосипед изобрести: если изменения относительно редки, то завести в базе отдельную таблицу с одной записью и там хранить дату-время последнего изменения. Менять дату при каждом внесении изменений. Прочитать одну строку займет немного времени, намного меньше 0.8 сек. Ответ можно кэшировать на несколько сек, тогда при работе с меню будет не 500 обращений к БД, а одно в несколько секунд. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2018, 07:59 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
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... В общем всё просто и надёжно. Перебои в глобальной сети ни на что не влияют, всё работает очень быстро... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2018, 22:26 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
Справочников не мало.. Кэшировать в память? Ну допустим, а что явится сигналом, что кэш устарел? Время? -- если честно, никто не кэширует информацию, с которой работают. Например, при выписке счёта запрашиваются "живые" остатки, одновременно блокируются чтобы кто-то другой не продал Ваш товар. После окончания выписки - база данных обновляется. Я не думаю что при работе с таблицами у Вас другая архитектура. -- да, кэш устаревает по времени. У нас как правило три градации в зависимости от того, как меняются данные. Справочники подгружаются по мере потребности. При запросе загрузка идёт в кэш и потом уже Вы работает с данными из памяти. Устарели данные - ничего не происходит, пока они Вам снова не потребовались... Или все же событие, что ест изменения в таблицах? -- такое есть в MS SQL Server (в MySQL скорее всего нет) называется "SQL Server Notification Services". Почитайте. Мы их использовали немного лет 8 назад, но когда у тебя более 20000 запросов в секунду, этот сервис просто "убивал" наш MS SQL Server и мы отказались в пользу распределённого кэша который устаревает по времени. А Вам может быть и подойдёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2018, 22:38 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
Сервер находиться где-то в интернете. Выбор на MySql пал из-за простой возможности сделать на нем сразу инет магазин, чтобы не гонять данные из программы по учету на сайт. Так сказал тот кто пишет сайт. Фокс выступит как-бы программой для работы продвинутых пользователей, руководства (потому что бизнеслогика вся описана и переход будет не такой болезненный), а через броузер пишем работу продавцов и клиентов.. Ок. Спасибо. Я понял, что решение комплексное. И придется чуть поменять логику работы.. с некоторыми модулями. А держать соединение MySQL все время открытым - это насколько плохо и почему? Полученный Запрос невозможно проиндексировать по нескольким полям.. для контекстного поиска. Есть варианты, или надо его переносить в таблицу для этого? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2018, 06:09 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
MaestroEvСервер находиться где-то в интернете. ... А держать соединение MySQL все время открытым - это насколько плохо и почему? В таком случае вообще нельзя разрешать доступ к MySQL извне. Сломают. Стандартный подход - сделать какое-нибудь WebAPI и работать через него. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2018, 07:22 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
MaestroEvСервер находиться где-то в интернете. Выбор на MySql пал из-за простой возможности сделать на нем сразу инет магазин, чтобы не гонять данные из программы по учету на сайт. Так сказал тот кто пишет сайт. Фокс выступит как-бы программой для работы продвинутых пользователей, руководства (потому что бизнеслогика вся описана и переход будет не такой болезненный), а через броузер пишем работу продавцов и клиентов.. Ок. Спасибо. Я понял, что решение комплексное. И придется чуть поменять логику работы.. с некоторыми модулями. [/quot] Ну может чуть, а может и не чуть. Я бы советовал сесть, и нарисовать новую ПРАВИЛЬНУЮ схему БД, с учетом жестких требований безопасности. MaestroEvА держать соединение MySQL все время открытым - это насколько плохо и почему? Ничего плохого в этом нет. MaestroEvПолученный Запрос невозможно проиндексировать по нескольким полям.. для контекстного поиска. Есть варианты, или надо его переносить в таблицу для этого? Вот тут, мне кажется за вопросом, стоит ошибка в работе. Тащить клиенту, надо ОЧЕНЬ ограниченный набор данных. Индексировать, для упорядочивания самим клиентом - легко. А поиск, по небольшому курсору, на фига тратить время на индекс, locate и даже время не заметите. И не надо никаких индексов для этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2018, 07:59 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
Действительно надо привыкать к Locate. Справляется легко. Более того не нужно думать об индексах. :) Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 06:34 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
Еще вопросик.. Я получил курсор запросом с MySql. Можно ли как-то в него делать Insert хотя бы одной записи? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2018, 10:46 |
|
Правильная работа с MySQL
|
|||
---|---|---|---|
#18+
В MSSQL можно, в MySQL не знаю, попробуй, скорее всего вставит. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2018, 10:49 |
|
|
start [/forum/topic.php?fid=41&msg=39626684&tid=1581664]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 290ms |
total: | 443ms |
0 / 0 |