powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / А БД это действительно лучше/быстрее? Возникли сомнения.
6 сообщений из 6, страница 1 из 1
А БД это действительно лучше/быстрее? Возникли сомнения.
    #37070499
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче заменил
процедуру загрузки из 2-х текстовух по 600-700 строк
на
процедуру загрузки из 2-х таблиц по 600-700 строк
(данные те же)

Усе как Shocker.Pro научил:
>ForwardOnly, ReadOnly (это самый быстрый тип)),
грузим данные в рекордсет, потом в ListView
возникло ощущение что база "подтормаживает"
Не поленился добавить /verbose в обе "версии":
Результат:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
P2Duo-XP (Baza)
 21 . 01 . 2011   6 : 29 : 49 	 0 	Re/Loading Inbox table into ListView (start)
 21 . 01 . 2011   6 : 29 : 49 	 375 	Re/Loading Inbox table into ListView (end)
 21 . 01 . 2011   6 : 29 : 49 	 0 	Re/Loading Outbox table into ListView (start)
 21 . 01 . 2011   6 : 29 : 50 	 469 	Re/Loading Outbox table into ListView (end)
 21 . 01 . 2011   6 : 29 : 53 	 0 	Re/Loading Outbox table into ListView (start)
 21 . 01 . 2011   6 : 29 : 53 	 469 	Re/Loading Outbox table into ListView (end)
 21 . 01 . 2011   6 : 29 : 55 	 0 	Re/Loading Inbox table into ListView (start)
 21 . 01 . 2011   6 : 29 : 56 	 391 	Re/Loading Inbox table into ListView (end)

P2Duo-XP (Text)
 21 . 01 . 2011   6 : 30 : 38 	 0 	Re/Loading Inbox textfile into ListView (start)
 21 . 01 . 2011   6 : 30 : 38 	 171 	Re/Loading Inbox table into ListView (end)
 21 . 01 . 2011   6 : 30 : 38 	 0 	Re/Loading Outbox textfile into ListView (start)
 21 . 01 . 2011   6 : 30 : 38 	 219 	Re/Loading Outbox textfile into ListView (end)
 21 . 01 . 2011   6 : 30 : 43 	 0 	Re/Loading Outbox textfile into ListView (start)
 21 . 01 . 2011   6 : 30 : 43 	 218 	Re/Loading Outbox textfile into ListView (end)
 21 . 01 . 2011   6 : 30 : 45 	 0 	Re/Loading Inbox textfile into ListView (start)
 21 . 01 . 2011   6 : 30 : 45 	 187 	Re/Loading Inbox table into ListView (end)

P-III-win2003 (Baza)
 21 . 01 . 2011   6 : 27 : 00 	 0 	Re/Loading Inbox table into ListView (start)
 21 . 01 . 2011   6 : 27 : 03 	 3505 	Re/Loading Inbox table into ListView (end)
 21 . 01 . 2011   6 : 27 : 03 	 0 	Re/Loading Outbox table into ListView (start)
 21 . 01 . 2011   6 : 27 : 08 	 4406 	Re/Loading Outbox table into ListView (end)
 21 . 01 . 2011   6 : 27 : 14 	 0 	Re/Loading Outbox table into ListView (start)
 21 . 01 . 2011   6 : 27 : 18 	 4346 	Re/Loading Outbox table into ListView (end)
 21 . 01 . 2011   6 : 27 : 23 	 0 	Re/Loading Inbox table into ListView (start)
 21 . 01 . 2011   6 : 27 : 26 	 3424 	Re/Loading Inbox table into ListView (end)

P-III-win2003 (Text)
 21 . 01 . 2011   6 : 29 : 03 	 0 	Re/Loading Inbox textfile into ListView (start)
 21 . 01 . 2011   6 : 29 : 05 	 1532 	Re/Loading Inbox table into ListView (end)
 21 . 01 . 2011   6 : 29 : 05 	 0 	Re/Loading Outbox textfile into ListView (start)
 21 . 01 . 2011   6 : 29 : 07 	 1642 	Re/Loading Outbox textfile into ListView (end)
 21 . 01 . 2011   6 : 29 : 10 	 0 	Re/Loading Outbox textfile into ListView (start)
 21 . 01 . 2011   6 : 29 : 12 	 1672 	Re/Loading Outbox textfile into ListView (end)
 21 . 01 . 2011   6 : 29 : 15 	 0 	Re/Loading Inbox textfile into ListView (start)
 21 . 01 . 2011   6 : 29 : 17 	 1332 	Re/Loading Inbox table into ListView (end)

Вкратце: из текстовухи в более чем 2 раза быстрее. На пень-3 8 сек ждать вместо 3-х.
Круто, БД блин.

То ли я где-то лоханулся.
Напр. злоупотребляю проверкой наличия поля в таблице:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Private Function FieldExistsInRS(ByRef rs As ADODB.Recordset, ByVal fieldName As String)
   Dim fld As ADODB.Field
    
   fieldName = UCase(fieldName)
    
   For Each fld In rs.Fields
      If UCase(fld.name) = fieldName Then
         FieldExistsInRS = True
         Exit Function
      End If
   Next
    
   FieldExistsInRS = False
End Function
....
    If FieldExistsInRS(m_rs, "start_datetime") Then
        If IsDate(m_rs!start_datetime) Then
            StartTime = m_rs!start_datetime

Т.е. я эту FieldExistsInRS выполняю (число полей)х(число строк)~700x10=7000 раз для каждой таблицы
Перебор вообще-то, 10раз по идее наверно достаточно для каждого поля по разу.
=====================================

То ли я сильно лоханусь если с БД свяжусь в принципе.
Чего не сделал изначально именно на основании этого подозрения.
Мнения будут?
...
Рейтинг: 0 / 0
А БД это действительно лучше/быстрее? Возникли сомнения.
    #37070543
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Убрал ляп с мульти-опросом полей, стало вот так вот
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
==============================================
P2Duo-XP (Baza)
 21 . 01 . 2011   8 : 19 : 53 	 0 	Re/Loading Inbox table into ListView (start)
 21 . 01 . 2011   8 : 19 : 53 	 140 	Re/Loading Inbox table into ListView (end)
 21 . 01 . 2011   8 : 19 : 53 	 0 	Re/Loading Outbox table into ListView (start)
 21 . 01 . 2011   8 : 19 : 53 	 172 	Re/Loading Outbox table into ListView (end)
 21 . 01 . 2011   8 : 19 : 59 	 0 	Re/Loading Outbox table into ListView (start)
 21 . 01 . 2011   8 : 19 : 59 	 172 	Re/Loading Outbox table into ListView (end)
 21 . 01 . 2011   8 : 20 : 01 	 0 	Re/Loading Inbox table into ListView (start)
 21 . 01 . 2011   8 : 20 : 01 	 141 	Re/Loading Inbox table into ListView (end)

P-III-win2003 (Baza)
 21 . 01 . 2011   8 : 24 : 27 	 0 	Re/Loading Inbox table into ListView (start)
 21 . 01 . 2011   8 : 24 : 28 	 1231 	Re/Loading Inbox table into ListView (end)
 21 . 01 . 2011   8 : 24 : 28 	 0 	Re/Loading Outbox table into ListView (start)
 21 . 01 . 2011   8 : 24 : 30 	 1922 	Re/Loading Outbox table into ListView (end)
 21 . 01 . 2011   8 : 24 : 33 	 0 	Re/Loading Outbox table into ListView (start)
 21 . 01 . 2011   8 : 24 : 35 	 1682 	Re/Loading Outbox table into ListView (end)
 21 . 01 . 2011   8 : 24 : 38 	 0 	Re/Loading Inbox table into ListView (start)
 21 . 01 . 2011   8 : 24 : 39 	 1251 	Re/Loading Inbox table into ListView (end)

Ну т.е. на операции открытия таблицы и чтения в лоб сверху вниз выигрыш 18-20% по скорости по сравнению с текстовухой.
Не фонтан!
Или все-таки остались ляпы... или преимущества на других операциях надо смотреть?
Не, ну 300миллисек. на перетарабанить в ListView 1400 записей это нормально, бороться думаю особо смысла нет.
Если еще базу считывать не в FormLoad, а после вывода формы на экран, то вообще ничего не заметим, но эт. детали не по делу.
То ись где преимущества?
300мс вместо 400мс после стольких мудоханий это не преимущество.
Надо правда смотреть как оно в динамике будет...
...
Рейтинг: 0 / 0
А БД это действительно лучше/быстрее? Возникли сомнения.
    #37070638
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

На сотню тысяч с каким нибудь фильтром померяй и сравни.
Для мелких данных БД обычно не нужна, достаточно любой сериализации.
...
Рейтинг: 0 / 0
А БД это действительно лучше/быстрее? Возникли сомнения.
    #37070706
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77
Код: plaintext
1.
2.
    If FieldExistsInRS(m_rs, "start_datetime") Then
        If IsDate(m_rs!start_datetime) Then
            StartTime = m_rs!start_datetime

По первой строке:
есть подозрение в не очень корректном подходе к работе с БД. К примеру, у меня в текушем проекте количество возвращаемых рекордсетов измеряются тысячами и только буквально в паре мест я заведомо не знаю, какой точно набор полей мне вернется. Ну без задачи все же трудно судить.

По второй строке:
если в базе поле start_datetime заведомо Date, то и нечего его проверять - вернется безусловно Date.

Если же есть подозрение, что структура БД может быть испорчена чьими-то кривыми ручонками, то лучше проверять структуру базы при старте проекта и отказываться работать с битой базой, чем проверять каждый раз при выборке.

Ну и, естественно, во внутренних циклах лучше не делать ничего лишнего - это общее правило.

Время по большей части расходуется на загрузку данных в тормозной ListView, так что для более корректного сравнения производительности лучше просто перебрать данные, никуда их не выводя.
...
Рейтинг: 0 / 0
А БД это действительно лучше/быстрее? Возникли сомнения.
    #37070790
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProДмитрий77
Код: plaintext
1.
2.
    If FieldExistsInRS(m_rs, "start_datetime") Then
        If IsDate(m_rs!start_datetime) Then
            StartTime = m_rs!start_datetime

По первой строке:
есть подозрение в не очень корректном подходе к работе с БД.
Дык сразу про подозрение написал, 20 циклов достаточно вместо 20000 , да еще в каждом перебор всех столбцов, как только понял и исправил, отыграл все лишнее время.


Shocker.ProПо второй строке:
если в базе поле start_datetime заведомо Date, то и нечего его проверять - вернется безусловно Date.
Э нет. start_datetime заведомо Date -это да. start_datetime у меня и вправду всегда должно быть корректно, а вот есть еще end_datetime, так вот оно может быть вообще пустое , и тогда EndTime кот. Date ругнется, при наличии EndTime я вычисляю Duration=EndTime-StartTime, т.е. здесь без аккуратности никак.

Shocker.ProВремя по большей части расходуется на загрузку данных в тормозной ListView, так что для более корректного сравнения производительности лучше просто перебрать данные, никуда их не выводя.
Вынужден подозревать что это так. Как я упомянул 20-25% скорости (100мс) я честно уже отыграл. (отбив при этом свои 350мс, которые у меня отобрал неграмотный пункт 1). Думаю что преимущества надо смотреть на динамике(замена чтения/удаления файла на чтение оч.короткой "таблицы обмена"),где в Listview меняется 1 строчка, а не 700, а не пытаться выиграть 10миллисекунд на статике. Про пень-3 я не говорю, тест был сделан только чтоб точно понять "дело дрянь", счас уже таких особо не у кого нет. Чтоб не чувствовать этих 3-х секунд на пнях надо я уже сказал что сделать, грузиться из базы при уже загруженной форме, это как раз бантики но не суть.
...
Рейтинг: 0 / 0
А БД это действительно лучше/быстрее? Возникли сомнения.
    #37070863
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима, я-бы выбрал файлик только для ... даже не знаю для чего, потому что телефонный справочник у меня был в БД. Правда
это был справочник на несколько десятков тысяч абонентов и редкоизменяемый, а в основном нужный как справочник, где
поиск происходил по фамилии, должности, адресу. И чесно говоря файлик для меня это какие-то настройки, импорт-экспорт и
какие-то учебные задачки. Функционал embeded-sql-серверов практически не отличается от "взрослой" редакции, места
занимает не много, а выигрыш во многом - можно использовать развитый функционал SQL-серверов, - переход от
однопользовательской редакции к многопользовательской - это простая смена embeded-SQL-сервера на "взрослую" редакцию(при
правильном проектировании БД естественно :) ).

Как-то так. :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / А БД это действительно лучше/быстрее? Возникли сомнения.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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