Форум » LetoDB, HbNetio. » LetoDb fork » Ответить

LetoDb fork

PSP: https://github.com/elchs/LetoDBf https://github.com/elchs/LetoDBf/blob/master/README.md Кто-нибудь пробовал или использует в продакшене?

Ответов - 125, стр: 1 2 3 4 5 6 7 All

Pasha: По сети разница ~ в 24 раза (dbfntx быстрее) Локально - в 8-9 раз (dbfntx быстрее)

Sergy: Значит dbfntx по сети в три раза быстрее, чем локально ??? Как такое вообще может быть ?

Pasha: Нет. И не вообще медленнее, а конкретно эта операция. Для dbfntx: по сети медленнее (грубо) в 3 раза чем локально Для letodb: по сети медленнее в 10 раз чем локально Локально letodb медленнее чем dbfntx локально в 8 раз Получаем (буржуазная лженаука арифметика): по сети letodb медленнее чем dbfntx в 8*10/3 ~ в 24 раза


Sergy: Выяснил - всё нормально у LetoDB(f) с производительностью в режиме GO INT(RAND() * RECCOUNT()). Мой косяк: вместо RECCOUNT() в коде использовался nSize: [pre2] aRecords := ARRAY(nSize) FOR i:=1 TO nSize aRecords[ i ] := INT(RAND()*nSize) NEXT i [/pre2] Соотв. вместо того, чтобы "прыгать" по всей таблице, выполнялись GO только по первым 10000 записям, которые легко помещаются в кэш винды. После исправления всё встало на свои места:[pre2] ... Testing 10000 jumps via DBFNTX: 59614 ms, 167.7 jumps/sec Testing 10000 jumps via LETO: 6508 ms, 1536.6 jumps/sec ... Testing 10000 jumps via DBFNTX: 36694 ms, 272.5 jumps/sec Testing 10000 jumps via LETO: 6717 ms, 1488.8 jumps/sec ... Testing 10000 jumps via DBFNTX: 22936 ms, 436.0 jumps/sec Testing 10000 jumps via LETO: 6655 ms, 1502.6 jumps/sec[/pre2] Причем с каждым запуском DBFNTX "разгоняется", но все равно, до Leto ему далеко. Посыпаю голову пеплом. Leto рулит.

SergKis: Начал смотреть LetoDBf + hmg 18.10 (все bcc сборка). Перенес родные примеры (test_....prg и demo4.prg из Tsb_Basic) Кому интересно, то тут сервер и пример https://my-files.ru/459f68

SergKis: Упс. удалили , разделил на 2е части 1. сервер, запуск letodb.exe, останов letodb.exe stop https://my-files.ru/eirnf2 2. hmg пример https://my-files.ru/vsdbm0

PSP: SergKis пишет: Упс. удалили , разделил на 2е части 1. сервер, запуск letodb.exe, останов letodb.exe stop https://my-files.ru/eirnf2 2. hmg пример https://my-files.ru/vsdbm0 Выложи, если не влом, на другой хостинг. Этот что-то барахлит.

SergKis: PSP пишет на другой хостинг Тут https://ru.files.fm/u/2q3wzejj#sign

Andrey: [pre2] - rddleto.lib: Harbour client library for access to LetoDBf server. Copyright 2017-2018 Rolf 'elch' Beckmann Source code is available at https://github.com/elchs/LetoDBf.[/pre2] Классно ребята на себя продукт перевели. Или они его заново с нуля написали ?

alkresin: Там вроде все правила приличия соблюдены, вот первый абзац readme проекта: "please note the trailing f, this is the elch fork of the famous LetoDB Database Server, for the origin see: https://sourceforge.net/p/letodb/code/ci/master/tree/ or visit the original inventor: http://kresin.ru/en/letodb.html"

Sergy: Работал, никого не трогал с LetoDBf, датированным 2018-01-21... Всё нормально работало, вот решил обновиться... Оказывается, где-то с лета 2018г Rolf Beckmann добавил в свой проект заголовочный файл leto_std.ch, который все стандартные команды вроде COPY, APPEND, SORT, DELETE и тп - жестко перенастраивает на использование функций leto_dbCopy, leto_dbApp, leto_dbSort и тп... В моем проекте такое не пройдет, тк он ведется еще со времен Clipper 5.01 )) Ну, думаю, чай не лыком шит, отключил в letodb.hbc использование данного заголовочного файла и пересобрал проект. Запустил letodb сервер как службу windows и... посыпались ошибки вроде такой: Error LETO/1001 Ошибка открытия: \data\messages Alias().............. "" oError:args.......... NIL --------------------- DBUSEAREA( 0 ) NETUSE( 2753 ) ADDMESSAGE( 65 ) USERCHANGE( 1652 ) MAIN( 220 ) То есть сервер Leto "вдруг" неожиданно стал искать таблицы в папке без указания диска... Хотя в letodb.ini ничего не менялось и путь как был, так и остался: DataPath = f:\work\data Откатил версию программы на предыдущую, которая была скомпилирована со "старой" версией от 2018 года и... все заработало, как ни в чем не бывало... Сервер - "новый", клиентские программы - "старые". Что я мог упустить ?

SergKis: Sergy пишет вот решил обновиться... И на какую версию обновились ? То есть сервер Leto "вдруг" неожиданно стал искать таблицы в папке без указания диска... Может тут зацепилось readmy.txt пункт "5.1.3 successful connected to server" This root path is equal a SET DEFAULT TO setting, so if your filenames contain *no path separator, all new files will be created directly in <DataPath>. The filenames can have optional OS dependent leading '\' or '/', example: /mydbf.dbf, that will force them into the <DatPath> directory, despite a given "SET DEFAULT" to a subdirectory. For blank, pure filename the "SET DEFAULT TO ... " setting, when set *before* Leto_Connect() will name an additive sub-directory to <DataPath>. Example: "SET DEFAULT TO data" will put all NEW files without path separator into: [drive:]\path\to\data_diretory\data !! Allowed for "DEFAULT" is only one single path, NOT ENDING WITH ';' OR ":" !! The example setting of "SET PATH TO system;tmp" will lead to search for files in: [drive:]\path\to\data_diretory\system and [drive:]\path\to\data_diretory\tmp If you use: DbUseArea( ,, cFile, .. ) and it is not in the DEFAULT directory, but in one directory given by SET PATH, it will be opened without further needed action from you. Both DEFAULT and PATH recognize the <DataPath>, what means a "SET DEFAULT TO to\data_diretory\data" will lead to a DEFAULT directory: '[drive:]\path\to\data_diretory\data' as given as "SET DEFAULT TO data". !! Again, both settings of "DEFAULT" and "PATH" apply to filenames without any path seperator '\' or '/'.

Sergy: SergKis пишет: И на какую версию обновились ? Да вот прямо на самую последнюю, что есть на GitHub - 2021-04-29 Может тут зацепилось readmy.txt пункт "5.1.3 successful connected to server" Спасибо за наводку, почитаю.

Sergy: Разобрался с причиной, но не понимаю, как вылечить: после каждого открытия таблицы значение RDDSETDEAFULT() возвращается на "LETO", хотя раньше по умолчанию был "DBFNTX" и он прекрасно сохранял свое значение после единственной его установки сразу после Leto_Connect() У меня часть таблиц загружается в локальную папку и там быстро обрабатывается, соотв. услуги LetoDBf сервера явно ни к чему. Поэтому и дефолтный драйвер такой. Почему с недавних пор стал "слетать" RDDSETDEFAULT() ? Принудительно конечно можно перед и после каждого USE наставить оберток, но не нравятся мне такие костыли... Откатился на предыдущую версию LetoDBf, от 2018-01-21, перекомпилировал и перезапустил letodbsvc, rddletoaddon - все тоже самое, перескакивает дефолтный драйвер с DBFNTX на LETO Психанул, восстановил папку с Харбором целиком - поведение RDDSETDEFAULT стало нормальным...

Dima: Sergy пишет: Принудительно конечно можно перед и после каждого USE наставить оберток, но не нравятся мне такие костыли... Давно пора сваять свою функцию по открытию баз , что то типа USEDB (не важно) В ней юзать dbusearea , открывать базы с нужным RDD , там же индексы открывать и тд и тп и тогда лечение не понадобится

Sergy: Dima пишет: Давно пора сваять свою функцию по открытию баз , что то типа USEDB (не важно) В ней юзать dbusearea , открывать базы с нужным RDD , там же индексы открывать и тд и тп и тогда лечение не понадобится Согласен. Поэтому мною давно написан свой NetUse(), единый для всех вариантов. C обработкой ошибок и тп... Но блин, что за фигня со "слетом" дефолтного драйвера... Пока нашел "затесавшуюся" библиотеку letodb.o в каталоге LIB. Поменял на старую - заработало все норм. Но почему компиляция более "старой" библиотеки не приводит к замене объектного кода... Ладно, буду потихоньку разбираться. Кто нибудь использует сейчас LetoDBf ? Какой версии ?

SergKis: Sergy пишет Какой версии ? Эту https://github.com/alcz/LetoDBf Default rdd "LETO", локальные "DBFCDX" ставлю в открытии, т.к. это может быть и mem: файл Сборка msvc 2019 (hb 3.2 и своя hmg также на msvc 2019), добавлена LV866, ф-ии hrb файла перенесены в тело сервера, используется на базу совместно с LetoDb 1.0 версии.

SergKis: Тут продолжу ответ из темы "Новая версия Расширенного релиза библиотеки MiniGui" для sashaBG (Пост N: 199) SergKis пишетПо мне надо сделать 1. ... 2. ... 3. ... 4. Для LetoDb 1.0 (2-а потока) у меня сделано, но можно и для LetoDb 2.0 (много поточного применить) ф-ю сервера для запуска работы приложения в фоновом потоке, оказалось удобно Тут [pre2] FUNCTION UDF_Run( nUserStru, cParam ) LOCAL nState, cPar, cDir, cFile, cTmp, nTmp LOCAL aParam, cRet := '', nRet, cChr := ';' LOCAL cDataPath := leto_GetAppOptions(1) + DEF_SEP LOCAL cLeto := DiskName(0) + ':\' + CurDir()+ '\' IF left(cParam, 1) == 'A' .and. val(subs(cParam, 2, 5)) > 0 aParam := leto_S2A(cParam) ELSEIF left(cParam, 1) == '{' .and. right(cParam, 1) == '}' aParam := &( cParam ) ELSEIF cChr $ cParam .or. '|' $ cParam IF '|' $ cParam ; cChr := '|' ENDIF aParam := hb_aTokens(cParam, cChr) ELSE IF ( nTmp := At(' ', cParam) ) > 1 cTmp := left(cParam, nTmp-1) cParam := subs(cParam, nTmp+1) aParam := { cTmp, cParam } ELSE aParam := { cParam } ENDIF ENDIF aParam := ASize(aParam, 4) cFile := aParam[1] cPar := aParam[2] cDir := aParam[3] nState := iif( empty(aParam[4]), 1, val(aParam[4]) ) nState := iif( empty(nState) , 1, nState ) IF ! empty(cFile) .and. Valtype(cFile) == 'C' cFile := cLeto + cFile cPar := iif( empty(cPar), '', cPar ) //+ '-dir='+cDataPath IF ! empty(cDir) .and. valtype(cDir) == 'C' IF left(cDir, 2) == '.'+DEF_SEP ; cDir := subs(cDir, 3) ELSEIF left(cDir, 2) == DEF_SEP ; cDir := subs(cDir, 2) ENDIF IF right(cDir,1) == DEF_SEP ; cDir := left(cDir, len(cDir)-1) ENDIF cDir := cLeto + cDir ELSE cDir := cLeto ENDIF nRet := -1 IF file(cFile) nRet := 0 nRet := ShellExecuteEx( 0, , cFile , cPar , cDir , nState ) ENDIF cRet := ltrim(str(nRet)) EndIf RETURN cRet В тело сервера вставив процедуру ShellExecuteEx(), т.к. она возвращает PID после норм. запуска [/pre2] Варианты использования: - есть клиент отслеживающий события для почты и sms, поймав его, делает запись в dbf на сервере о событии и запускает на эту запись RecNo и базу на сервере программу отправки писем и sms-ок (с одной записи до 9 адресов может отправить). Отчеты и прочая работа на LetoDbF - расчеты длительного времени - отборы и т.д.

sashaBG: Спасибо за идею! У меня неможко по другому все организовано. Есть программа Serv.exe. Она написана на MiniGUIext и работает MT режиме. Ее роль: 1.управлят LetoDB: запуск, остановка самое главное мониторить не упал ли он , если упал запускает 2.Выполнять критические по скорости операции с базами на серевер (всякие сложные расчеты, ну и перемен в структур таблиц и т.д) . Т.е. Я использую удаленные процедуры и функции через NETIO Клиент подключается одновременно к LetoDB для работы с таблицами (чтение , запись, справки и ...) через порт 2812 и к NETO (Serv.exe) порт 2941 для работы с удаленными процедурами. TsBrowse я использую для помощи при заполнении нек. полей на форме : Я просто удалил Стринговую часть функции dbsetfilter, так как на LetoDB передаятся только она и в ЛОГ файле ошибки исчезли. ( cAlias )->( dbSetFilter( {|| ob:FilterFTS_Line( cFind, lUpper, lAll, ob ) }, ; "" ) ) //"ob:FilterFTS_Line( cFind, lUpper, lAll, ob)" ) ) Фильтр работает на клиенте, но пока меня ето устраивает. Если придется, то тогда буду подключать фильтрацию со стороны LetoDB Спасибо еще раз за Ваши ответы Сергей! Желаю доброго здоровья!

SergKis: sashaBG пишет У меня неможко по другому все организовано. Есть программа Serv.exe. Она написана на MiniGUIext и работает MT режиме. Ее роль: Т.к. начало LetoDb у меня было 2010-2011 год, то ничего проще как AutoIt3 для управления сервером не нашел, к тому же доступа к серверу клиента, как Admin не было, то написал простенький текст AutoIt3. Т.е. LetoDb 1.0 порт 2812, LetoDbF порт 2816(,2817 если надо) и для LetoDbf на hmg ext Admin программа управления user-ами: 1. добавить\удалить\заменить (user\password) 2. списки работающих клиентов (table tsbrowse просмотр + клиенту сделать Kill принудительно 3. в эту программу добавляются режимы работ для запусков ф-ей UDF_Run(...). Дальше работа с сервером (базой) ТОЛЬКО с клиента Тут AutoIt3 для работы с LetoDbF https://TransFiles.ru/hqhdo Если архив развернуть в hmg Advanced\LetoDBf\Server и переименовать letodb.exe => letoDBf.exe и запустить letostart.exe, то в tray будет простое меню и LetoDBf.exe будет запущен и отслеживаться наличия в памяти Для LetoDb 1.0 letostart1.exe почти такой же добавлен режим замены версии LetoDb.exe (кладем рядом letodb.new и AutoIt останавливает работу LetoDb.exe, переименовывает его и заменяет letodb.new => LetoDb.exe и запускает). Так было сделано из за отсутствия доступа на сервер клиента.



полная версия страницы