On-line: Dr. Oldwarez, гостей 0. Всего: 1 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 2517
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.12.12 14:01. Заголовок: Как сделать многопотоковую проверку Базы ?


Есть ряд задач (переодически возникающих) на которые тратиться много времени.
Может быть я и не прав.

Вот например:
база 20 тыс.записей, каждую запись нужно пройти и проверить заполнение полей, если не заполнено - ошибку в тхт-файл.

Все (наверно) делают последовательную обработку, т.е. проверяем базу с 1 по N-запись..
А можно же через потоки сделать ?

Подскажите как примерно это можно сделать для хХарбора ?
Заранее спасибо..




Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 78 , стр: 1 2 3 4 All [только новые]


постоянный участник




Пост N: 118
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.02.13 13:38. Заголовок: An example of measu..


An example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Genuine Intel(R) CPU T2130@ 1.86GHz [~1867 MHz]
Free RAM: 1 387 068
OS: Windows Windows Vista Home Edition 6.01.7601 Service Pack 1
Development: xHarbour build 1.0.0 Intl. (SimpLex) - Borland C++ 5.5.1
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 19 seconds ( Recno: 30000 )
First test base - 00 hour 00 minute 16 seconds
Second test base - 00 hour 02 minute 30 seconds
Third test base - 00 hour 00 minute 10 seconds
Fourth test base - 00 hour 03 minute 55 seconds

The total test time ---> 00 hour 07 minute 12 seconds

Andrey пишет:
 цитата:
Но тогда я сам могу создать функцию записи в журнал. Один раз его открыть в начале, потом писать в него (2 операции, указатель в конец файла и запись строки) и в конце проверки - закрыть файл.


В моем примере (на классах так и сделано). Тексты выдернул из реальной проги MiniGUI, адаптировать к xHb - не должно составить труда. Вывод поколоночно с разделителем chr(9) в файлы log и err. Если что то не понятно - спрашивай. Сам работаю так: log файлы локально (имена рабочее место или имя (код) usera). Просмотр редактором. Если надо объединять, то через copy на сервер или иначе. Если просмотр через Browse - тогда конечно dbf.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2618
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.02.13 16:36. Заголовок: У меня вот такой рез..


У меня вот такой результат. Просто жесть (Исходник не смотрел)

An example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Intel(R) Pentium(R) 4 CPU 3.00GHz [~3011 MHz]
Free RAM: 932 676
OS: Windows XP Professional 5.01.2600 Service Pack 2
Development: xHarbour build 1.0.0 Intl. (SimpLex) - Borland C++ 5.5.1
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 09 seconds ( Recno: 30000 )
First test base - 00 hour 09 minute 37 seconds
Second test base - Оборвал через 1 час на 30 %


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2619
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.02.13 17:18. Заголовок: Тот же тест на Clipp..


Тот же тест на Clipper (First test base) 5 секунд
-//- Harbour -//- порядка 9 минут

Тормоз в STRFILE (Harbour)

Намного быстрее если результат писать в базу. Можно сразу или писать в начале в массив а потом в базу [Проверил]
А можно еще проще используя Alternate файлик вместо STRFILE , работает быстро.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 164
Зарегистрирован: 16.12.08
ссылка на сообщение  Отправлено: 11.02.13 17:39. Заголовок: An example of measu..


An example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Pentium(R) Dual-CoreCPUE5700@ 3.00GHz [~3000 MHz]
Free RAM: 2 097 151
OS: Windows XP Professional 5.01.2600 Service Pack 3
Development: xHarbour 1.2.3 Intl. (SimpLex) (Build 20121213) - Open Watcom C 12.90 (32 bit)
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 05 seconds ( Recno: 30000 )
First test base - 00 hour 00 minute 01 seconds
Second test base - 00 hour 00 minute 04 seconds
Third test base - 00 hour 00 minute 01 seconds
Fourth test base - 00 hour 00 minute 05 seconds

The total test time ---> 00 hour 00 minute 17 seconds

***********************************
An example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Pentium(R) Dual-CoreCPUE5700@ 3.00GHz [~3000 MHz]
Free RAM: 2 097 151
OS: Windows XP 5.1.2600 Service Pack 3
Development: Harbour 3.2.0dev (Rev. 18748) - Open Watcom C 12.90 (32-bit)
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 05 seconds ( Recno: 30000 )
First test base - 00 hour 00 minute 01 seconds
Second test base - 00 hour 00 minute 04 seconds
Third test base - 00 hour 00 minute 00 seconds
Fourth test base - 00 hour 00 minute 05 seconds

The total test time ---> 00 hour 00 minute 17 seconds

********************************
An example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Pentium(R) Dual-CoreCPUE5700@ 3.00GHz [~3000 MHz]
Free RAM: 2 009 484
OS: Windows XP Professional 5.01.2600 Service Pack 3
Development: xHarbour 1.2.3 Intl. (SimpLex) (Build 20121213) - Borland C++ 5.8.2 (32 bit)
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 05 seconds ( Recno: 30000 )
First test base - 00 hour 00 minute 01 seconds
Second test base - 00 hour 00 minute 05 seconds
Third test base - 00 hour 00 minute 01 seconds
Fourth test base - 00 hour 00 minute 07 seconds

The total test time ---> 00 hour 00 minute 20 seconds

*************************

An example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Pentium(R) Dual-CoreCPUE5700@ 3.00GHz [~3000 MHz]
Free RAM: 2 029 332
OS: Windows XP 5.1.2600 Service Pack 3
Development: Harbour 3.2.0dev (Rev. 18748) - Borland C++ 5.8.2 (32-bit)
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 04 seconds ( Recno: 30000 )
First test base - 00 hour 00 minute 01 seconds
Second test base - 00 hour 00 minute 05 seconds
Third test base - 00 hour 00 minute 00 seconds
Fourth test base - 00 hour 00 minute 07 seconds

The total test time ---> 00 hour 00 minute 19 seconds


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2620
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.02.13 17:45. Заголовок: Dima пишет: First t..


Dima пишет:

 цитата:
First test base - 00 hour 09 minute 37 seconds



santy пишет:

 цитата:
First test base - 00 hour 00 minute 01 seconds



Фига себе разница.........

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 119
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.02.13 18:06. Заголовок: Андрей, глянул prg:..


Андрей, глянул prg: FUNCTION Third_Test_DBF(cFileError,cPOLE) добавьте:
 
LOCAL nPOLE, ; // позиция поля cPOLE в файле
nNNN, ; // позиция поля ABONENT->NNN в файле
nNN, ; // позиция поля ABONENT->NN в файле
nKCity, ; // позиция поля ABONENT->KCity в файле
nKStreet // позиция поля ABONENT->KStreet в файле
...
SELECT ABONENT
DbSetOrder(1)
nKolRecords := ORDKEYCOUNT()
nPOLE := FieldPos(cPOLE)
nNNN := FieldPos("NNN")
nNN := FieldPos("NN")
nKCity := FieldPos("KCity")
nKStreet := FieldPos("KStreet")
...
cNNN := FieldGet(nPOLE) // cNNN := ABONENT->&cPOLE
aYes := {}
DO WHILE cNNN == FieldGet(nPOLE) // ABONENT->&cPOLE
...
// заменить ABONENT->NNN на FieldGet(nNNN)
// заменить ABONENT->NN на FieldGet(nNN)
// и так далее
AADD( aYes, cStr ) // этот массив лишний, надо сразу вывод в cFileError
SKIP
ENDDO
IF LEN(aYes) > 1
...
AADD(aDimNNN, cStr ) // этот массив лишний, надо сразу вывод в cFileError
ENDIF
...

дальше по тексту, наверное, также поступить.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2649
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.02.13 21:11. Заголовок: Dima пишет: Тот же ..


Dima пишет:

 цитата:
Тот же тест на Clipper (First test base) 5 секунд
-//- Harbour -//- порядка 9 минут

Тормоз в STRFILE (Harbour)


Вот вот и я о том же... Клипер на многих вещах работает быстрее Харбора...
Взять бы тот же SET FILTER TO - там оптимизация есть, а в Харборе нет...
Переделал прогу на Харбор и успокоился... Ан нет нужно перепроверять !!!

Я понял, что нужно писать свой STRFILE() !

Dima пишет:

 цитата:
CPU: Intel(R) Pentium(R) 4 CPU 3.00GHz [~3011 MHz]
Free RAM: 932 676


Самая классная машина для тестирования !
А то наставили всякого нового железа (включая меня самого) и все, алгоритмы побоку... Типа и так сойдет...
А юзера страдают...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2650
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.02.13 21:20. Заголовок: SergKis пишет: DO W..


SergKis пишет:

 цитата:
DO WHILE cNNN == FieldGet(nPOLE) // ABONENT->&cPOLE
...
// заменить ABONENT->NNN на FieldGet(nNNN)
// заменить ABONENT->NN на FieldGet(nNN)


Понял, спасибо ! Это для ускорения.
SergKis пишет:

 цитата:
AADD( aYes, cStr ) // этот массив лишний, надо сразу вывод в cFileError
SKIP


Тогда получиться лишний вывод равный количеству повтора...
А операция создания массива aYes := {} и заполнения его - разве медленная ?
SergKis пишет:

 цитата:
IF LEN(aYes) > 1
...
AADD(aDimNNN, cStr ) // этот массив лишний, надо сразу вывод в cFileError
ENDIF


Я специально сделал вывод ОДНОГО значения повтора + перескок по базе на нужную запись минуя одинаковые:
nI := nI + LEN(aYes) - 1


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2621
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.02.13 21:20. Заголовок: Andrey пишет: Я пон..


Andrey пишет:

 цитата:
Я понял, что нужно писать свой STRFILE()


Ты выше то читал ?
Для этой задачи вполне покатит
Set cons off
Set alter on
Set Alter to твой файлик
,,,,,,,,,,,,,,,, твой код
? "что то пишем в твой файл"

close alter
set alter off


Ни когда не юзал что ли ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2651
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.02.13 21:21. Заголовок: santy пишет: Develo..


santy пишет:

 цитата:

Development: xHarbour 1.2.3 Intl. (SimpLex) (Build 20121213) - Open Watcom C 12.90 (32 bit)
The total test time ---> 00 hour 00 minute 17 seconds

Development: Harbour 3.2.0dev (Rev. 18748) - Open Watcom C 12.90 (32-bit)
The total test time ---> 00 hour 00 minute 17 seconds

Development: xHarbour 1.2.3 Intl. (SimpLex) (Build 20121213) - Borland C++ 5.8.2 (32 bit)
The total test time ---> 00 hour 00 minute 20 seconds

Development: Harbour 3.2.0dev (Rev. 18748) - Borland C++ 5.8.2 (32-bit)
The total test time ---> 00 hour 00 minute 19 seconds


Разница между: Harbour 3.2.0dev и xHarbour 1.2.3 вообще ни какая...

А мой тест ( xHarbour build 1.0.0 Intl. (SimpLex) - Borland C++ 5.5.1 ) сколько показывает ?

santy пишет:

 цитата:
Development: Harbour 3.2.0dev (Rev. 18748) - Open Watcom C 12.90 (32-bit)



А тест на 70000 записей попробуй сделать ?


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2652
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.02.13 21:44. Заголовок: Dima пишет: Ни когд..


Dima пишет:

 цитата:
Ни когда не юзал что ли ?


Неа ... не юзал ...

А эти операторы быстрее будут:
hFile:=Fopen(cFileError,FO_WRITE)
.....
do while ...
......
FSEEK(hFile,0,FS_END)
Fwrite(hFile, cStream, LEN(cStream))
.....
enddo
......
FClose( hFile )



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2622
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.02.13 22:07. Заголовок: Andrey пишет: Неа ...


Andrey пишет:

 цитата:
Неа ... не юзал ...


Юзани ;)

Andrey пишет:

 цитата:
А эти операторы быстрее будут:
hFile:=Fopen(cFileError,FO_WRITE)
.....
do while ...
......
FSEEK(hFile,0,FS_END)
Fwrite(hFile, cStream, LEN(cStream))
.....
enddo
......
FClose( hFile )



Вот так будет быстрее на много порядков
Set alter on
Set alter to test.txt

.....
do while ...
......
? cStream
.....
enddo
......
close alter
set alter off


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2653
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.02.13 22:26. Заголовок: Dima пишет: Вот так..


Dima пишет:

 цитата:
Вот так будет быстрее на много порядков
Set alter on
Set alter to test.txt


Блин, а бегунок (проценты показа) тоже же будут в файл писаться (ударение на "а" ) !
Как там переключать то на экран/файл ?
Я уже забыл....

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2623
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.02.13 22:41. Заголовок: Andrey пишет: Блин,..


Andrey пишет:

 цитата:
Блин, а бегунок (проценты показа) тоже же будут в файл писаться (ударение на "а" ) !


НЕА ;)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2654
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.02.13 23:12. Заголовок: Вот блин поправил.....


Вот блин поправил.... И МНОГОПОТОЧНУЮ проверку в этом случае делать не надо ....
The second example of measuring the speed of processing database for [x]Harbour
---------------------------------------------------------------------------
CPU: Intel(R) Core(TM) i5-3570K CPU @ 3.40GHz [~3504 MHz]
Free RAM: 2 097 151
OS: Windows Windows Vista Professional 6.02.9200
Development: xHarbour build 1.0.0 Intl. (SimpLex) - Borland C++ 5.5.1
---------------------------------------------------------------------------

Create/Open Test.dbf - 00 hour 00 minute 02 seconds ( Recno: 70000 )
First test base - 00 hour 00 minute 04 seconds
Second test base - 00 hour 00 minute 01 seconds
Third test base - 00 hour 00 minute 04 seconds
Fourth test base - 00 hour 00 minute 01 seconds
The total test time ---> 00 hour 00 minute 14 seconds

Предыдущая программа dBase2test.exe на этом же компе и с этой же базой:
The total test time ---> 00 hour 00 minute 32 seconds

Исходник и ехе-ник здесь - http://files.mail.ru/8842CDB5260248C8BB975F82D70C666E
Народ, проверьте у себя пожалуйста !



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2624
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.02.13 23:30. Заголовок: Andrey The second ..


Andrey

The second example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Intel(R) Pentium(R) 4 CPU 3.00GHz [~3011 MHz]
Free RAM: 837 448
OS: Windows XP Professional 5.01.2600 Service Pack 2
Development: xHarbour build 1.0.0 Intl. (SimpLex) - Borland C++ 5.5.1
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 00 seconds ( Recno: 30000 )
First test base - 00 hour 00 minute 06 seconds
Second test base - 00 hour 00 minute 03 seconds
Third test base - 00 hour 00 minute 06 seconds
Fourth test base - 00 hour 00 minute 04 seconds

The total test time ---> 00 hour 00 minute 20 seconds


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2625
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.02.13 23:39. Заголовок: Andrey пишет: И МНО..


Andrey пишет:

 цитата:
И МНОГОПОТОЧНУЮ проверку в этом случае делать не надо


Ихгде ты ее делал ? Ни в одном твоем примере ее нет.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2655
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.02.13 02:16. Заголовок: Dima пишет: Ихгде т..


Dima пишет:

 цитата:
Ихгде ты ее делал ? Ни в одном твоем примере ее нет.


Так я только собирался... Следующую проверку (тест) буду делать !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 120
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.02.13 10:09. Заголовок: The second example o..


The second example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Genuine Intel(R) CPU T2130@ 1.86GHz [~1867 MHz]
Free RAM: 1 362 460
OS: Windows Windows Vista Home Edition 6.01.7601 Service Pack 1
Development: xHarbour build 1.0.0 Intl. (SimpLex) - Borland C++ 5.5.1
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 41 seconds ( Recno: 70000 )
First test base - 00 hour 00 minute 19 seconds
Second test base - 00 hour 00 minute 04 seconds
Third test base - 00 hour 00 minute 21 seconds
Fourth test base - 00 hour 00 minute 06 seconds

The total test time ---> 00 hour 01 minute 34 seconds

Andrey пишет:
 цитата:
А операция создания массива aYes := {} и заполнения его - разве медленная ?


Если бы массив создавался один раз, а в данном случае происходит запрос,выделение памяти, освобождение и в какой то момент будет работать сборщик мусора, приостанавливающий работу программы - это конечно мелочь в сравнении с STRFILE, но иногда помнить об этом надо.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 165
Зарегистрирован: 16.12.08
ссылка на сообщение  Отправлено: 12.02.13 11:12. Заголовок: The second example o..


The second example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Pentium(R) Dual-CoreCPUE5700@ 3.00GHz [~3000 MHz]
Free RAM: 2 097 151
OS: Windows XP Professional 5.01.2600 Service Pack 3
Development: xHarbour 1.2.3 Intl. (SimpLex) (Build 20121213) - Open Watcom C 12.90 (32 bit)
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 10 seconds ( Recno: 70000 )
First test base - 00 hour 00 minute 02 seconds
Second test base - 00 hour 00 minute 01 seconds
Third test base - 00 hour 00 minute 01 seconds
Fourth test base - 00 hour 00 minute 01 seconds

The total test time ---> 00 hour 00 minute 18 seconds


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 78 , стр: 1 2 3 4 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 69
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет