Автор | Сообщение |
Andrey
|
| постоянный участник
|
Пост N: 4156
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.05.15 22:44. Заголовок: Вопросы новичка...
Взял последнюю версию с "Новая страница с бинарниками", установил на Win2008 Server, чуток помучился с портом... Собрал на МиниГуи+BCC 551 - \MiniGui\batch\hbmk2.bat rddleto.hbp Получил rddleto.lib - 131072 байт - правильный ли размер ? И еще Warning-и лезут: lib\.hbmk\win\bcc\rddsys.c: source\client\letocl.c: source\client\leto1.c: source\client\letomgmn.c: source\common\blowfish.c: source\common\common_c.c: source\common\hbip.c: TLIB 4.5 Copyright (c) 1987, 1999 Inprise Corporation /P32 lib\rddleto.lib -+ lib\.hbmk\win\bcc\rddsys.obj -+ lib\.hbmk\win\bcc\letocl.obj -+ lib\.hbmk\win\bcc\leto1.obj -+ lib\.hbmk\win\bcc\letomgmn.obj -+ lib\.hbmk\win\bcc\blowfish.obj -+ lib\.hbmk\win\bcc\common_c.obj -+ lib\.hbmk\win\bcc\hbip.objWarning: 'rddsys' not found in library Warning: 'letocl' not found in library Warning: 'leto1' not found in library Warning: 'letomgmn' not found in library Warning: 'blowfish' not found in library Warning: 'common_c' not found in library Warning: 'hbip' not found in library Так должно быть или нет ? Вопрос сразу напрашивается с путями - как писать правильно "\" или "/" : Local cPathServer := "//127.0.0.1:2812/" cPathServer := cPathServer +"DATE_TEST_PATH\test.dbf" Помню что где то обсуждали, а результат не запомнил...
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
Andrey
|
| постоянный участник
|
Пост N: 4258
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.06.15 20:24. Заголовок: alkresin пишет: An..
alkresin пишет: цитата: | Andrey пишет: цитата: А какой максимальный размер можно передать через cBuf ? Насколько я помню, ограничений нет, но все в пределах разумного... |
| У меня получается передавать 3-5 Мб через cBuf по интенету. В локалке наверно можно и больше. Какой размер нужно передавать чтобы на всех машинах (включая и слабые компы) не вылетала программа ? Если файл размером 29Мб - программа не вылетает, только не копирует файл и всё. Может кто еще попробует... cBuff := HB_MemoRead(cFile) - сколько может считать эта функция ? Какое ограничение по размеру нужно ставить при копировании файла ?
|
|
|
alkresin
|
| moderator
|
Пост N: 949
Зарегистрирован: 06.07.06
|
|
Отправлено: 17.06.15 12:02. Заголовок: Попробуйте определят..
Попробуйте определять размер файлов с помощью leto_FileSize() и потом, если надо, передавать его по частям c помощью leto_Fileread()
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4266
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.06.15 16:42. Заголовок: alkresin пишет: Поп..
alkresin пишет: цитата: | Попробуйте определять размер файлов с помощью leto_FileSize() и потом, если надо, передавать его по частям c помощью leto_Fileread() |
| А какой размер МАХ для передачи нужно делать ? И еще вопрос: как определить по базе - кем она открыта: DBFCXD или LETO ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 3286
Зарегистрирован: 23.05.05
|
|
Отправлено: 18.06.15 07:59. Заголовок: И еще вопрос: как оп..
цитата: | И еще вопрос: как определить по базе - кем она открыта: DBFCXD или LETO ? |
| Надо выдать leto_mgGetTables(), и затем искать в полученном массиве, открыта ли таблицы на сервере letodb.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4271
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.06.15 11:34. Заголовок: Pasha пишет: Надо в..
Pasha пишет: цитата: | Надо выдать leto_mgGetTables(), и затем искать в полученном массиве, открыта ли таблицы на сервере letodb. |
| Спасибо !
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4272
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.06.15 11:46. Заголовок: Выходит ошибка при с..
Выходит ошибка при старте локального сервера (Win8.1) Leto DB Server v.2.15b3 : 06/18/15 11:44:18: Server has been closed. 06/18/15 11:44:29: LetoDB service has had some problems: 1063 Что за ошибка ? Через службы сервер запускается.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4273
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.06.15 12:18. Заголовок: Не работает мой код ..
Не работает мой код для Leto на нескольких серверах, работает только на одном. Что делать, куда "копать" ? Имею сервер Leto DB Server v.2.15b3 - letodb.exe 998912 04.06.15 установлен на всех компах. 1) Windows Server 2008 - код работает ТОЛЬКО на этом сервере. 2) Windows Server 2012 R2 - код не работает. 3) Windows 8.1 Prof - сервер локальный - код не работает. Код примерно такой: Скрытый текст SELECT WZAIV nSelZaiv := SELECT() DBSETORDER(1) SELECT WMASTER nSelMast := SELECT() DO WHILE ! (nSelMast)->( EOF() ) aCalc := { 0, 0, 0, 0, 0, 0, 0 } nMaster := WMASTER->KMASTER SELECT WZAIV DBSETORDER(1) // это на всякий случай GOTO TOP // убирал для пробы - всё без разницы SEEK(nMaster) lRet := FOUND() //MsgDebug(lRet,nMaster,ALIAS(), OrdKey(), OrdName(), OrdFor() ) DO WHILE WZAIV->KMASTER == nMaster IF WZAIV->KDATE == 1 aCalc[1]++ .......... SKIP ENDDO SELECT WMASTER WMASTER->ZPR := aCalc[1] ............ SELECT(nSelMast) dbSkip(1) ProcessMessages() // ОБЯЗАТЕЛЬНО ! ENDDO
| Не работает SEEK(nMaster) lRet := FOUND() lRet для компа 2) и 3) возвращает .F. Ладно бы на всех не работало, это я бы на косячил, но на ОДНОМ 1) же работает ....
|
|
|
Pasha
|
| Администратор
|
Пост N: 3287
Зарегистрирован: 23.05.05
|
|
Отправлено: 18.06.15 15:35. Заголовок: dbSeek() не найдет к..
dbSeek() не найдет ключ в следующих случаях: 1. Открыт не тот индекс 2. Такого ключа в индексе нет 3. Ключ в индексе есть, но он не попадает в установленный фильтр/scope вроде все. Еще, конечно, может быть битый индекс.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4274
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.06.15 16:15. Заголовок: Pasha пишет: Еще, к..
Pasha пишет: цитата: | Еще, конечно, может быть битый индекс. |
| Я же его делаю каждый раз, после открытия базы. Значит битым не может быть. Буду делать отдельный тест тогда...
|
|
|
Pasha
|
| Администратор
|
Пост N: 3288
Зарегистрирован: 23.05.05
|
|
Отправлено: 20.06.15 20:06. Заголовок: alkresin пишет: Поп..
alkresin пишет: цитата: | Попробуйте определять размер файлов с помощью leto_FileSize() и потом, если надо, передавать его по частям c помощью leto_Fileread() |
| Я смотрю, в hbip.c есть такой фрагмент: /* Set internal socket send buffer to 64k, * this should fix the speed problems some users have reported */ hb_ipSetBufSize( hSocket, 0xFFFFFF, 0xFFFFFF ); где задается размер буфера для передачи. Надо полагать, что данные все равно передаются фрагментами по 64k ? Кстати, в чем там задается размер ? 0xFFFFFF это вроде не 64k
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4326
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.06.15 15:31. Заголовок: Pasha пишет: где за..
Pasha пишет: цитата: | где задается размер буфера для передачи. Надо полагать, что данные все равно передаются фрагментами по 64k ? Кстати, в чем там задается размер ? 0xFFFFFF это вроде не 64k |
| Видно сложный вопрос, раз нет ответа... Очень жалко...
|
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4327
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.06.15 15:33. Заголовок: Сделал тестовый прим..
Сделал тестовый пример. Алгоритм простой - выборка из базы по SEEK и SKIP - суммирование по 7 полям и запись этих 7 полей в локальную базу на компе пользователя. Итого 13 раз нужно просчитать по базе. Убрал лишний вывод на экран. Наверно тормоза МиниГуи были из-за него. Теперь скорость просто чумовая: База 100 000 записей с мемо-полями: ~120 Мб Расчет по простому индексу 13 позиций: 1) локальная DBFCDX - 00:00:00 2) локальная LETO - 00:00:01 3) интернет LETO - 00:01:49 База 1 000 000 записей с мемо-полями: ~1,2 Гб Расчет по простому индексу 13 позиций: 1) локальная DBFCDX - 00:00:06 2) локальная LETO - 00:00:09 3) интернет LETO - 00:18:15 Открыть в TBROWSE миллион записей из базы, которая находиться неизвестно где (на просторах интернета) - это просто пипец (как говорит Аллочка из Универа) Вывод: связка Harbour + LetoDB + MiniGui - отличная вещь в работе. Это при том, что используется простой старый алгоритм, без переделки под Leto ! 2 вопроса к форумчанам: 1) Протестируйте кто нибудь по сетке это пример. Ну нет у меня сетки под рукой. Там путь просто набить и будет работать. 2) Как улучшить алгоритм для Leto ? Пример тут - https://cloud.mail.ru/public/DkoH/nSzvMbeCh
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4333
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.07.15 01:35. Заголовок: Как проверить на сер..
Как проверить на сервере LetoDB - подключена ли функция LTON ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 3292
Зарегистрирован: 23.05.05
|
|
Отправлено: 01.07.15 08:14. Заголовок: Например, задать фил..
Например, задать фильтр: set filter to LTON(<lExpr>)==1 и затем вызвать: leto_IsFiltOptim() Если вернет .t. - значит, функция выполняется на сервере
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4334
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.07.15 09:14. Заголовок: Pasha пишет: set fi..
Pasha пишет: цитата: | set filter to LTON(<lExpr>)==1 и затем вызвать: leto_IsFiltOptim() Если вернет .t. - значит, функция выполняется на сервере |
| Что-то сложноватая проверка.... А нет ли более простой ? По типу hb_IsFunction( cFunc ) Программу ставишь и помнить надо - есть на сервере та или иная функция. Затратно как то. А так у себя в коде поставил проверку - нет такой функции на сервере и уже понятней станет. Это сейчас, когда ставишь сервер, помнишь, а потом забудется и будешь потом
|
|
|
Pasha
|
| Администратор
|
Пост N: 3293
Зарегистрирован: 23.05.05
|
|
Отправлено: 01.07.15 12:36. Заголовок: Должна сработать фун..
Должна сработать функция (хотя она немного не для этих целей): leto_UdfExist("LTON") или (для соединения, которое не является текущим): leto_UdfExist("//localhost:2812/LTON")
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4339
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.07.15 14:21. Заголовок: Pasha пишет: leto_U..
Pasha пишет: Сработало ! Спасибо ! Pasha пишет: цитата: | Можно еще добавить перед внешним циклом: leto_SetSkipBuffer(<побольше>) Тогда и он будет выполняться быстрее, так как запросов к серверу будет меньше. |
| А сколько <побольше> ? Диапазон подскажи...
|
|
|
Pasha
|
| Администратор
|
Пост N: 3294
Зарегистрирован: 23.05.05
|
|
Отправлено: 01.07.15 15:25. Заголовок: Прикидывайте сами. Р..
Прикидывайте сами. Размер буфера зависит только от размера и содержимого записей. Запись передается подпакованная, без лишних пробелов. Пусть размер записи 100 байт. Передаваемый с сервера размер (он непостоянный) - пусть будет 40 байт. Тогда, если установлен leto_SetSkipBuffer(1000), размер буфера с содержимым 1000 записей будет примерно 40000 байт. Из этих соображений и надо исходить. Соображение примерно те же, что и при передаче больших файлов. leto_SetSkipBuffer устанавливается для каждой рабочей области отдельно. Перед большим циклом его можно установить большим, а после выполнения цикла - вернуть стандартное значение: leto_SetSkipBuffer(10) Для циклов, внутри которых выполняется обновление данных с блокировкой каждой записи, skip-буфер сбрасывается, поэтому его увеличивать нет смысла.
|
|
|
PSP
|
| постоянный участник
|
Пост N: 1077
Зарегистрирован: 27.01.07
|
|
Отправлено: 01.07.15 16:10. Заголовок: Паша, а сколько врем..
Паша, а сколько времени "живет" этот буфер? 1 сек? С какого момента отсчет начинается? Что произойдет, если это время закончится раньше, чем закончится выборка в цикле? Что произойдет, если это время закончится в момент передачи уже выбранных данных с сервера клиенту?
|
|
|
Pasha
|
| Администратор
|
Пост N: 3295
Зарегистрирован: 23.05.05
|
|
Отправлено: 01.07.15 16:19. Заголовок: Да, 1 секунда. По ок..
Да, 1 секунда. По окончании которой данные с сервера будут запрашиваться повторно. Отсчет времени идет после получения данных с сервера, так что время отклика сервера для проверки актуальности буфера роли не играет.
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|