Форум » 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 на Харборе, ... и вообще все в наших руках :). Кто хочет участвовать в разработке, тестировании - пишите.

Ответов - 325, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 All

alkresin: Выложил на Sourceforge build2 - поправлены все несовместимости с разными версиями Harbour/xHarbour, поисправлены некоторые ошибки, добавлены некоторые базовые функции.

Петр: Andrey пишет: и сборка сама для HARBOUR'a Здесь можно поспорить По крайней мере названия библиотек не согласуются с Harbour SVN. Но это же не проблема - поменять название библиотеки, добавить или удалить что-то..

Andrey: Andrey пишет: Сам ехе-ник letodb.exe собрался, а из папки "manager" не собирается, требует библиотеку 'HBCT.LIB' и сборка сама для HARBOUR'a ... Так где ж ее взять ???


alkresin: В xHarbour она называется ct.lib - надо исправить в bld.bat

Andrey: Понял, спасибо ! Только я в Harbour'e не нашел HBCT. Хотя он у меня свежий.

Петр: Andrey, я так думаю, что тестировать нужно сервер, не manager. Тем более у тебя такие планы были..

Петр: Harbour библиотека HBCT находится в contrib.

Andrey: alkresin пишет: Log = letodb.ini - путь и имя журнала Поправочка ! Строка должна иметь вид: Log = letodb.log

alkresin: Понял, спасибо ! Только я в Harbour'e не нашел HBCT. Хотя он у меня свежий. Свежий - это откуда ? C SVN ? Строил из исходников ? Тогда чтоб построить hbct.lib, надо зайти в contrib/hbct и там запустить make_32.bat

gfilatov: Andrey пишет: Так где ж ее взять ? Выложил готовую к использованию сборку LetoDB по адресу: http://minigui.mylivepage.ru/file/?fileid=4563 Тестировал в локальном варианте на простом консольном примере: //----------------------------------------------------------------------------// Function Main() REQUEST LETO RDDSETDEFAULT( "LETO" ) USE "//192.168.0.63:2812/data/test" Browse() USE Return nil //----------------------------------------------------------------------------// Программа работает, хотя и тормозит в Browse на Win98 Консольный manager также нормально работает при нажатии 1-2-3

Andrey: Скачал билд2. Собрал хХарбором letodb.exe и библиотеку. Сделал тестовый пример на Ххарборе, тот что Филатов выше выложил. только пути другие: USE "//127.0.0.1:2812/@/data/test" Запускаю сервер, далее тест получаю: Error LETO/1021 Data type error: -003:21-1001 | Останавливаю все. Беру сборку Филатова, запускаю свой пример на хХарборе, база открывается, броуз показывает. Что делать ??? И по ходу, а где хранится история открытия баз, когда и кем (с какой машины) она была открыта ? И еще у Филатова, сервер нигде не отображается, ни в трее, ни в окне, ни где. Это не есть ХОРОШО !

Pasha: Еще бы сделать, чтобы для seek передавался произвольный ключ. А сейчас, к примеру, ключ, содержащий символ ';', будет обрезан что-то вроде в letoSeek: if( ( bType = leto_ItemType( pKey ) ) != pArea->pTagCurrent->KeyType ) { sprintf( szData,"goto;%d;-3;%s;\r\n", pArea->hTable, (pArea->pTagCurrent)? pArea->pTagCurrent->TagName:"" ); if ( !leto_SendRecv( pArea, szData, 0, 1021 ) ) return FAILURE; } else { USHORT uiTemp; uiKeyLen = letoKeyToStr( pArea, szKey, bType, pKey ); sprintf( szData,"seek;%d;%s;%c%c;", pArea->hTable, (pArea->pTagCurrent)? pArea->pTagCurrent->TagName:"", (bSoftSeek)? 'T':'F', (bFindLast)? 'T':'F' ); uiTemp = strlen(szData); *(USHORT *) (szData + uiTemp) = uiKeyLen; memcpy(szData + uiTemp + 2, szKey, uiKeyLen); memcpy(szData + uiTemp + 2 + uiKeyLen, "\r\n", 2); szData[uiTemp + 4 + uiKeyLen] = '\0'; if ( !leto_SendRecv( pArea, szData, uiTemp + 4 + uiKeyLen, 1021 ) ) return FAILURE; } и в hs_seek IF Empty( nId := Val( GetCmdItem( cCommand,1,@nPos ) ) ) Return "-002" ENDIF IF Empty( cOrder := GetCmdItem( cCommand,nPos+1,@nPos ) ) Return "-002" ENDIF IF Empty( cFlags := GetCmdItem( cCommand,nPos+1,@nPos ) ) Return "-002" ENDIF nKeyLen := Bin2I(Substr( cCommand, nPos+1, 2)) xKey := Substr( cCommand, nPos+3, nKeyLen ) только в этом коде вываливается gpf на *(USHORT *) (szData + uiTemp) = uiKeyLen; не пойму почему

alkresin: Andrey пишет: только пути другие: USE "//127.0.0.1:2812/@/data/test" А что такое /@ ?

alkresin: Pasha пишет: Еще бы сделать, чтобы для seek передавался произвольный ключ. А сейчас, к примеру, ключ, содержащий символ ';', будет обрезан Надо. Ключ ведь теоретически и несимвольный может быть, и с 0 - как ты сам писал раньше. Поэтому тут для передачи надо использовать ту же схему, которая используется для передачи записи. Ты, наверное, уже заметил, что посылка ( в обоих направлениях ) сделана в двух форматах: 1) Простая символьная , признак конца - \r\n 2) Та, что может содержать несимвольную информацию - это когда запись передается с сервера или поля для записи в базу на сервер ( в char полях ведь что угодно может быть ) - в этом случае каждое символьное поле предваряется байтами с его длиной и в начале всей посылки стоит информация о ее длине ( \r\n могут ведь и char поле случайно встретиться ) в таком формате: 1 байт - N количество байтов с информацией о длине посылки (до 10) N байт - длина посылки в специальном формате - функция leto_n2b() ( и leto_b2n() - для обратного преобразования ). Я не использую здесь стандартные функции, потому что формат хранения числа на клиенте и на сервере может быть разным, в зависимости от железа/ОС.

Pasha: Понятно Может, сделать для seek двоичную структуру пакета, когда на сервере процедура обработки seek будет переписана на C ?

alkresin: Да нет, я сегодня сделаю, наверное.

Pasha: Немного поправил использование каталогов при открытии и создании файлов

Pasha: У меня есть такая функция - реструктуризация таблицы (выполняется, естественно, монопольно) Для ее работы необходимы файловые операции rename/delete Добавляем ? И как быть с безопасность данных ?

Петр: Pasha пишет: Добавляем ? И как быть с безопасность данных ? Мое мнение, так же как и в случае со stored proc, сначала нужно разобраться с управлением пользователей. Т.е. перед выполнением любого запроса/действия нужно убедиться, уполномочен ли обьект установивший подключение на выполнение таких действий.

Pasha: Петр пишет: Мое мнение, так же как и в случае со stored proc, сначала нужно разобраться с управлением пользователей. Есть предложения, как это реализовать ?



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