Форум » LetoDB, HbNetio. » Leto DB Server (продолжение) » Ответить

Leto DB Server (продолжение)

alkresin: Только что открыл на Sourceforge новый проект - Leto DB Server - https://sourceforge.net/projects/letodb Это мультиплатформенный ( Windows, Unix/Linux ) сервер баз данных, предоставляющий клиентским программам доступ к dbf/cdx файлам, находящимся на удаленном сервере ( можно и на локальном компьютере запускать - в отладочных целях ). В общем, как ADS :). Проект - на стадии разработки, не все даже базовые функции еще реализованы, до оптимизации дело еще не дошло. Но работает :). Крутится у меня на сервере несколько дней, подключал до 15 клиентов, пока не падает. Мои программы работают с ним нормально. Преимущества по сравнению с обычным файл-сервером: 1) Безопасность - базы могут быть в каталоге, недоступном для клиентских компьютеров - никто их случайно не удалит и не повредит. 2) Поскольку базы открываются серверной программой, а не клиентской, ее целостности ничего не грозит при случайном отключении клиентского компьютера. 3) значительное уменьшение сетевого траффика. 4) Должен быть, по идее, выигрыш в скорости. 5) Возможность контроля за пользователями с помощью утилиты manage ( можно придумать и другие формы контроля ). 6) Можно будет сделать транзакции, stored procedures на Харборе, ... и вообще все в наших руках :). Кто хочет участвовать в разработке, тестировании - пишите.

Ответов - 55, стр: 1 2 3 All

Oskar_A: Вопрос Pasha : Версия xHarbour Compiler build 0.99.60 (SimpLex) и LetoDb 1. совместимы 2. при компиляции вылетают ошибки: Error: Unresolved external '_hb_vmProcessSymbolsEx' referenced from C:\XHARBOUR\LIB\RDDLETO.LIB|rddsys Error: Unresolved external '_hb_errFuncName' referenced from C:\XHARBOUR\LIB\RDDLETO.LIB|hbip Error: Unresolved external '_hb_dateTimeStampStr' referenced from C:\XHARBOUR\LIB\RDDLETO.LIB|leto1 Error: Unresolved external '_hb_numDecConv' referenced from C:\XHARBOUR\LIB\RDDLETO.LIB|leto1 Error: Unresolved external '_hb_dateTimeStampStrGet' referenced from C:\XHARBOUR\LIB\RDDLETO.LIB|leto1 RddLeto.Lib укзана в файле сборки Локальная прграмма - консольная версия (куча PRG собирается в один Exe модуль) Версия LETODB :Letidb-0-7-bin-w32-bcc-5-5.zip (скачал Сегодня с сайта Григоря Филатова) Спасибо

Петр: Oskar_A пишет: Версия xHarbour Compiler build 0.99.60 (SimpLex) какие причины заставляют вас использовать устаревшую сборку?

Pasha: Oskar_A пишет: Версия xHarbour Compiler build 0.99.60 (SimpLex) и LetoDb 1. совместимы 2. при компиляции вылетают ошибки: rddleto.lib можно использовать только с той версией Harbour/xHarbour, с которой собрана сама rddleto. Если ипользуется другая сборка, то rddleto.lib надо пересобрать именно ей. Отсюда ошибка: Unresolved external '_hb_vmProcessSymbolsEx' Прочие ошибки связаны с изменением Hb api Я считаю разумной политику поддержки последних релизов Hb/xHb, и текущих версий с SVN/CVS Поддерживать остальные старые релизы сложно, их много, да и зачем ? К примеру, я уже и не помню, в каком году выходил 0.99.60


Pasha: Snake пишет: Еще: Устанавливаем scope. затем Browse(), жмем Ctrl+PgDn (к концу таблицы) жмем PgUp... и ничего. Так и остаемся в конце таблицы. Поправил

Oskar_A: Pasha & Петр, спасибо за отзывы. Версия xHarbour Compiler build 0.99.60 (SimpLex) крутится и довольно успешно. Сегодня постараюсь скачать последнюю версию xHarbor. Можно ли выложить на почту или указать адрес откуда с минимальными проблемами можно получить одинаковую сборку LetoDB и хHarbour? E-Mai:l abdyvasiev_a@kcredit.kg - просьба порциями до 2МБ в виде RAR-архива...... Заранее спасибо....

Snake: // letodb.ini: DataPath = d:\Leo\ok cPath := "//192.168.0.1:2812/test/" LETO_FRENAME(cPath+'pronto.cdx','pronto.old') - pronto.old появляется не в d:\Leo\ok\test, а в d:\Leo\ok (DataPath из letodb.ini) Еще: Если сразу после открытия базы, когда никакой scope еще не задан, выполняем ORDSCOPE(0,NIL) ORDSCOPE(1,NIL) - вылетает с ошибкой

Oskar_A: Скачал версию xHarbour Compiler build 1.0.0 (SimpLex) ... 1. компиляция исходных Prg файлов - ошибок нет 2. сборка модулей в EXE файл - ошибки: Error: Unresolved external '_main' referenced from C:\BORLAND\BCC55\LIB\C0X32.OBJ Error: Unresolved external '_HB_FUN_HB_SETCODEPAGE' Error: Unresolved external '_HB_FUN_DISKNAME' Error: Unresolved external '_hb_fsDelete' referenced from C:\XHARBOUR\LIB\CT.LIB|disk Error: Unresolved external '_hb_fsMkDir' referenced from C:\XHARBOUR\LIB\CT.LIB|disk Error: Unresolved external '_hb_fsError' referenced from C:\XHARBOUR\LIB\CT.LIB|disk Error: Unresolved external '_hb_fsCurDrv' referenced from C:\XHARBOUR\LIB\CT.LIB|disk Error: Unresolved external '_hb_fsCurDirBuff' referenced from C:\XHARBOUR\LIB\CT.LIB|disk список большой..... Вопрос(ы): 1. Список библиотек необходимых для сборки консольного приложения (выполняемый Exe модуль). 2.Особенности перехода с версии 0.99.60 (Simplex) на версию xHarbour Compiler build 1.0.0 (SimpLex). 3. LetoDb для версии xHarbour Compiler build 1.0.0 (SimpLex). С уважением,

Snake: При этом слетает сервер, причем если под Win его можно перезапустить, то под Linux при попытке запуска выдает "Server already running", хотя на самом деле ничего он не running, и ps -ax его не показывает. Snake пишет: Если сразу после открытия базы, когда никакой scope еще не задан, выполняем ORDSCOPE(0,NIL) ORDSCOPE(1,NIL) - вылетает с ошибкой

Pasha: Snake пишет: Если сразу после открытия базы, когда никакой scope еще не задан, выполняем ORDSCOPE(0,NIL) ORDSCOPE(1,NIL) - вылетает с ошибкой поправил

Pasha: Oskar_A пишет: 2. сборка модулей в EXE файл - ошибки: Судя по ошибкам, неправильный скрипт для линкера, не подключаются основные библиотеки

Oskar_A: Pasha, получилось собрать LetoDb & xHarbour 1.0, спасибо за подсказку.... Начну тестировать итд... База из 55 DBF объем 2.6 Гб. Количество записей в одном из DBF 103 млн. количество пользователей до 15 User'ов О результатах сообщу. Спасибо

Snake: Snake пишет: // letodb.ini: DataPath = d:\Leo\ok cPath := "//192.168.0.1:2812/test/" LETO_FRENAME(cPath+'pronto.cdx','pronto.old') - pronto.old появляется не в d:\Leo\ok\test, а в d:\Leo\ok (DataPath из letodb.ini) Сейчас проверил: если делать так - LETO_FRENAME(cPath+'pronto.cdx','test/pronto.old') - то все ок, pronto.old появляется в d:\Leo\ok\test. Мб так и было задумано?

Snake: ...но под линуксовым сервером это не работает - LETO_FRENAME(cPath+'pronto.cdx','test/pronto.old') - не переименовывает LETO_FRENAME(cPath+'pronto.cdx','pronto.old') - pronto.old появляется в DataPath из letodb.ini, а не в cPath LETO_FRENAME(cPath+'pronto.cdx','.pronto.old') - pronto.old появляется в корневом каталоге

Pasha: Snake пишет: Сейчас проверил: если делать так - LETO_FRENAME(cPath+'pronto.cdx','test/pronto.old') - то все ок, pronto.old появляется в d:\Leo\ok\test. Мб так и было задумано? Да. Так все логично. Для 2-го параметра cPath указывать необязательно Насчет линукса - сейчас проверить не могу Меня не будет в эфире 2 недели. В последнем коммите Александр по-видимому пропустил server.prg, и пока он его не обновит, рекомендую не брать leto1.c, так как не будет работать dbCreate()

gfilatov: Выложил готовую к использованию полную сборку LetoDB CVS build 0.7 по адресу: http://minigui.mylivepage.ru/file/?fileid=5676 Эта сборка включает в себя следующие последние изменения: 2008-07-15 12:35 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c ! Fixed memory size, allocated for leto_rec() function - there were GPF's in some cases. 2008-07-14 11:30 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg * re-committed 2008-07-11 13:00 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * source/server/server.prg * The forth parameter od dbCreate ( lKeepOPen ) works now. * COPY TO command works now. 2008-07-10 22:25 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru) * source/server/letofunc.c ! fixed DBOI_SCOPETOPCLEAR and DBOI_SCOPEBOTTOMCLEAR evaluation with empty key item 2008-07-09 22:15 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru) * source/client/leto1.c * added bAppend parameter to letoSetBlankRecord() function, and ulRecNo is cleared only for dbAppend() * source/server/letofunc.c ! fixed scope operations in leto_Skip() 2008-07-09 19:45 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru) * source/server/letofunc.c ! fixed compilation for Harbour 2008-07-09 09:40 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c ! Minor fix 2008-07-08 22:15 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru) * source/client/leto1.c ! fixed gpf in letoOrderListFocus() if incorrect order number is passed * added check for already opened index bagname in letoOrderListAdd() 2008-07-08 16:25 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c ! Fix in letoPutMemoValue() function * source/server/letofunc.c * source/common/hbip.c ! Fixes for hpux, provided by Luiz Rafael Culik Guimaraes

Snake: Pasha пишет: Насчет линукса - сейчас проверить не могу Я так понимаю, дело заглохло и надолго. Тогда подскажите плз, как из программы можно получить DataPath? Очень нужно - сервер уже крутится у клиентов, а переименование файлов, хоть и не часто, но иногда приходится выполнять.

Pasha: Snake пишет: Тогда подскажите плз, как из программы можно получить DataPath? Сейчас такой команды нет Можно добавить в LETO_MGGETINFO еще один параметр - DataPath: letofunc.c, leto_Mgmt: sprintf( s,"+%d;%d;%d;%d;%lu;%lu;%lu;%lu;%lu;%lu;%s;", uiUsersCurr,uiUsersMax,uiTablesCurr,uiTablesMax, (leto_Date()-lStartDate)*86400+(long)(hb_dateSeconds()-dStartsec), ulOperations,ulBytesSent,ulBytesRead,uiIndexCurr,uiIndexMax, pDataPath ); и letomgmn.c, HB_FUNC( LETO_MGGETINFO ): for( i=1; i<=11; i++ )

Pasha: Медленное обновление данных. Тест см. ниже, выполняется по сети: REQUEST HB_GT_WIN REQUEST HB_GT_WIN_DEFAULT Field Mes func main Local cPath := '//Server:2812/' Local nSec, aRecs := {}, i, j REQUEST LETO RDDSETDEFAULT( "LETO" ) cls set autopen on if ! Leto_File(cPath+"leto2.dbf") dbCreate(cPath + 'leto2', {{'Mes','N',2,0},{'F1','C', 6, 0},{'F2','C', 6, 0},{'SUMMA','N', 12, 0}}) endif dbUseArea(.t.,, cPath + "leto2") if ! Leto_File(cPath+"leto2.cdx") index on mes to (cPath+"leto2") endif //OrdListClear() //OrdListAdd('leto2') dbSetOrder(1) for i := 1 to 12 for j := 1 to 1000 dbAppend() Field->Mes := i Field->Summa := j next next dbCommit() nSec := Seconds() dbSeek(10) while Mes == 10 AADD(aRecs, RecNo()) skip enddo // цикл выше выполняется быстро ? Seconds() - nSec nSec := Seconds() AEval(aRecs, {|n| dbGoto(n), RLock(),; dbDelete(),; Field->Mes := 0,; Field->Summa := 0,; dbUnlock(), dbCommit() }) // цикл выше выполняется мееееедленно, из-за dbCommit() ? Seconds() - nSec return Почему медленно ? По dbCommit() на сервер выдаются команды "upd" и "flush". Если dbCommit() вынести за цикл, то в цикле на сервер все равно передается команда "upd", а в конце цикла - "flush", и цикл выполняется быстро. Команду "flush" сервер отрабатывает, вызывая hb_rddFlushAll(). Если на сервере вызов hb_rddFlushAll() заменить на SELF_FLUSH( ( AREAP ) pArea ), то есть, flush только в текущей р.о., цикл все равно выполняется медленно, медленнее, чем при таких же условиях через DBFCDX по сети. Почему так ? Ведь должно быть наоборот. Отрабатывая flush, DBFCDX обновляет по сети и файл данных, и индексы, загружая при этом сетевой траффик. Сервер LETODB выполняет обновление файла данных и индекса локально. Причем файлы открыты монопольно, сервер работает в тепличных условиях. Почему наблюдается такой странный эффект ?

Pasha: Вопрос снят Я забыл "хакнуть" source\rtl\filesys.c, функцию fsCommit() Теперь все очень быстро :)

Pasha: 2008-08-07 19:45 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru) * source/client/leto1.c * source/client/letomgmn.c * source/server/letofunc.c * include/rddleto.h * pCurrentConn moved from letofunc.c to leto1.c. The default connection now can be set by LETO_CONNECT() function for USE and CREATE command * If server name and port is skipped in file name in Leto_File() function, the default connection is used * LETO_MGGETINFO() function now return DataPath + added leto_InTransaction() function * skip buffer is used for dbSkip(-1) also * hb_rddFlushAll() replaced witn SELF_FLUSH( ( AREAP ) pArea ) in the flush command on server Теперь для соединения с сервером можно не задавать адрес //server:port/ в имени таблицы или в командах SET PATH/DEFAULT. Если имени сервера нет, то используется уже установленное соединение по умолчанию, заданное в LETO_CONNECT(). Алгоритм поиска сервера следующий: 1. Если задан параметр nConnection - он используется 2. Заданное имя сервера в командах use/create или set path/default 3. Соединение по умолчанию в LETO_CONNECT(). Путь к таблице на сервере может быть задан функцией LETO_PATH(). Также добавлена буферизация команды skip -1, что дает увеличение производительности для TBrowse и других гридов И еще небольшие изменения, см. выше



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