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

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

31.03.2011, 17:59. Показов 5149. Ответов 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
Ответ Создать тему
Новые блоги и статьи
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru