|
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 42
|
|
Оптимизация скорости работы с БД (ADO, DataEnvironment)31.03.2011, 17:59. Показов 5092. Ответов 27
Метки нет (Все метки)
Привет!
Заканчиваю работу над приложением - интерфейсом БД. Использую MySQL через ADODB, DataEnvironment (один connection), данные в классе присобачиваются к формам, а на формах по несколько стандартных DataGrid'ов и по мелочи еще всего... При отладке у меня в таблицах БД было по 1-50 записей, все работало довольно быстро... Сейчас загнал в базу объем данных ближе к реальному (10 - 50 тыс.) Тормозит. Секунд по 5-10... На что в первую очередь обратить внимание при оптимизации? (гриды, свойства command'ов и connection (запросы), объектная часть или может еще чего?) БД будет расти, прога должна работать на компах слабее чем мой, вероятен многопользовательский режим => скорость критична...
0
|
|
| 31.03.2011, 17:59 | |
|
Ответы с готовыми решениями:
27
Оптимизация или увеличение скорости работы программы Телефонный справочник или оптимизация скорости работы с данными Нужен совет: оптимизация кода, увеличение скорости работы скрипта |
|
2 / 2 / 1
Регистрация: 19.07.2007
Сообщений: 737
|
|
| 05.04.2011, 12:13 | |
|
с SHAPE полюбому все грузится на клиента при любом провайдере.
надо было сразу задуматься над OLAP-сервером теперь или все переписывать или сразу все данные грузить на клиента, а потом с ними работать
0
|
|
|
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 42
|
|
| 05.04.2011, 12:22 [ТС] | |
|
Спасибо!
Пару минут назад сам это обнаружил, (для таких же чайников как я), дословно... 'The fact that the Connection property returns a Connection object that uses the Microsoft Data Shaping Service for OLE DB does have certain consequences: = Recordset objects always use the client-side cursor engine (CursorLocation=adUseClient). Even if you set the CursorLocation property of a Recordset object to adUseServer prior to creating a Recordset object by using the Execute method of a Connection object, the Execute method of a Command object, or the Open method of a Recordset object, you will always get a client-side cursor. = Recordset objects always use a Static cursor (CursorType=adOpenStatic), regardless of what you set the CursorType property to when opening the Recordset object. = You can set the LockType property of a Recordset object to the adLockOptimistic, adLockBatchOptimistic, or adLockReadOnly constants. If you set the LockType to adLockPessimistic, it gets converted silently to adLockOptimistic. As with Recordset objects created with other connections, if you don't specify the LockType property, it will be set to adLockReadOnly by default. = A Connection object established by using the Microsoft Data Shaping Service for OLE DB doesn't support all ADOX operations that a Connection object established by using a direct connection through the Microsoft OLE DB Provider for SQL Server would provide. In particular, operations on the Properties collection of the Column object are not supported. = The Properties collection of a Connection object doesn't support the same properties as a direct connection. For example, the DBMS Version property is not supported. = If the CommandType property of a Command object isn't specified, the connection will not try again to open the Command object as a table if the CommandText property doesn't refer to a stored procedure.'
0
|
|
|
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 42
|
|
| 05.04.2011, 12:37 [ТС] | |
|
Да, блин, облажался я... Вот вам у удобство юзания SHAPE'ов!!!
Переделывать теперь уже нет времени. Буду так с ними и работать. Правда, надо теперь продумать как бы юзвери друг другу данные не попортили. Мысли такие: перед изменениями/добавлениями/удалениями записей слать на сервер запросы (через другое соединение) на проверку существования такой записи. Т. е. вручную синхронизировать локальную базу и сетевую... Как думаете?
0
|
|
|
0 / 0 / 0
Регистрация: 31.03.2011
Сообщений: 7
|
|
| 05.04.2011, 12:52 | |
|
Синхронизировать не надо. Надо просто предусмотреть ситуацию типа 'save conflict exception' - это когда один юзер запись редактировал/удалил, а другой пытается сохранить поверх. Как способ реализации могу предложить завести в базе в таблицах документов поле int version, которое будет инкрементироваться каждый раз, когда документ апдейтится. (И сеттиться в -1 когда документ удаляется - для софт делита). Если пользовательский документ имеет version отличный от серверного, то это save conflict. Просто нарисовать мессагу и все.
Так например Лотус делает и это считается нормальным.
0
|
|
|
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 42
|
|
| 05.04.2011, 14:11 [ТС] | |
|
2 om600: OK, подумаю на вариантом а-ля Lotus...
Контроль версий (прямо CVS какой-то :-)) поможет при одновременном изменении одной записи несколькими пользователями. Чем плох мой вариант (при условии что ситуаций одновременного изменения /правки/ записи почти не будет - прога для ЗАПОЛНЕНИЯ БД)? Одновременное добавление/удаление можно проверять простым наличием/отсутствием самой записи... Короче, надо прикинуть, что дороже... и, кстати, посмотреть поведение recordset при update/delete - обновляется только локальная копия и при requery сетевая, или сразу обе. Во втором случае пренебрегая 'одновременным изменением' можно просто отлавливать ошибку. Правда там еще всякая бяка будет с полями autoincreament З.Ы. Топик разросся сильно - вот что происходит когда не знаешь как правильно вопрос задать... Насчет пренебрежения 'одновременным изменением' - понимаю, что это не профессиональный подход, но результаты требуют уже вчера, надо хоть что-то показать... :-(
0
|
|
|
2 / 2 / 1
Регистрация: 19.07.2007
Сообщений: 737
|
|
| 05.04.2011, 15:09 | |
|
попробуй заюзать AdFilterConflictingRecords в фильтре после попытки пакетного апдейта записей
0
|
|
|
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 42
|
|
| 05.04.2011, 15:50 [ТС] | |
|
2 Konst_one: все пытаюсь добраться до этого этапа :-)
борюсь с SHAPE'ом - он даже на локальной копии БД не очень хочет обновлять записи: 1 SHAPE'ом забираются данные при первой загрузке с сервера 2 Работаем с отсоединенной базой (или, скорее, с отсоединенной SHAPE-структурой) 3 При обновлении/удалении ADO посылает соответтствующие запросы на сервак (сам) - на этом этапе и надо будет отслеживать конфликты. ПРОБЛЕМА: есть двa command'a, у каждого подчиненный recordset делает выборку из одной и той же таблицы БД. Например, есть таблицы поставщиков и клиентов, есть таблица соответствия между ними. Поставщики, клиенты - родительские recordset'ы в DataEnvironment, к каждому из них подсоединена таблица их связи как дочерний рекордсет. При добавлении связи через подчиненный recordset Поставщиков, подчиненный recordset связей у Клиентов не меняется. (поэтому я и говорил, что похоже работа идет не с локальной копией БД, а с SHAPE-'снимками')А запрос к сетевой БД делать долго. Как это обойти? Может работал кто тесно с SHAPE'ами? Может надо в DataEnvironment добавить все оригинальные таблицы базы, и все многоэтажные command'ы уже к ним крепить?
0
|
|
|
2 / 2 / 1
Регистрация: 19.07.2007
Сообщений: 737
|
|
| 05.04.2011, 16:00 | |
|
Я вообще никогда не пользуюсь Dataenvironment
делаю все сам или в модуле или в классах в твоем случае даже не знаю, что посоветовать
0
|
|
| 05.04.2011, 16:00 | |
|
Помогаю со студенческими работами здесь
28
Оптимизация скорости работы жесткого диска. Не знаю ни чего по этой теме,нужно выступить с докладом
Оптимизация скорости загрузки
Оптимизация скорости выполнения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|