Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/23: Рейтинг темы: голосов - 23, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 42

Оптимизация скорости работы с БД (ADO, DataEnvironment)

31.03.2011, 17:59. Показов 5024. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!

Заканчиваю работу над приложением - интерфейсом БД.
Использую MySQL через ADODB, DataEnvironment (один connection), данные в классе присобачиваются к формам, а на формах по несколько стандартных DataGrid'ов и по мелочи еще всего...
При отладке у меня в таблицах БД было по 1-50 записей, все работало довольно быстро... Сейчас загнал в базу объем данных ближе к реальному (10 - 50 тыс.) Тормозит. Секунд по 5-10...
На что в первую очередь обратить внимание при оптимизации? (гриды, свойства command'ов и connection (запросы), объектная часть или может еще чего?)
БД будет расти, прога должна работать на компах слабее чем мой, вероятен многопользовательский режим => скорость критична...

0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2011, 16:00
Помогаю со студенческими работами здесь

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

Оптимизация скорости
Есть массив порядка 300000 элементов из структур типа struct Data { short value1; bool value2; short value3; } ...

Оптимизация скорости загрузки
Скачать компонент сейчас можно на этой странице Итак, мой компонент FetchScript - неплохой инструмент для толкового...

Оптимизация цикла по скорости
Помогите пожалуйста оптимизировать данный цикл (изменить его, чтобы он выполнялся быстрее): int a = new int; int b = new int; ...

Оптимизация скорости выполнения
Нахожусь в процессе написания проги для определения СЕО-параметров сайта. Программа разбита на функции, каждая из которых определяет свой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru