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

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

SergejKis: Дело не в 3G, мой товарищ по работе из дома получает тоже самое, в четверг в офисе в лосалке тоже. NETIO с 3G, из дома и в локалке копировал файлы нормально. Ваш testu08.dbf содержит 2118 записей. К Вам на сервер мой файл ушел отлично.

Pasha: Да, я вижу, пришло 1801 записей А теперь я запустил leto2011.exe, Вашу сборку Запустите еще свой тест, прийдет ли файл Хотя я уже увидел, что у меня клиент сразу падает на gpf при попытке коннекта с leto2011.exe, и сервер тоже падает, причем это локальный коннект Значит, какая-то проблема со сборкой Я соберу с текущим харбором letodb, и посмотрю, что получится. Хотя и раньше собирал многократно..

SergejKis: У меня локальный коннект на этой сборке не падал никогда (кроме реальных моих ошибок), вот letodb от 20.05.2010 падал от засыпания/просыпания компа и так ... от работы ..., но по постам я понял, что много было исправлено. Но к сожалению другой сборки letodb у меня нет и я взял текущую вместе с hb. В реальной работе сейчас hb 2.0. К Вам на сервер мой файл повторно ушел ok!.


SergejKis: Паша, для функций доступа на стороне сервера в тригерах nUserStru вроде как не нужен (мы имеем реальную область) или я не в курсе ? Пример: FUNCTION hs_opentable( nUserStru, cCommand ) BEGIN SEQUENCE leto_SetUserEnv( nUserStru ) *** Sx_SetTrigger( TRIGGER_PENDING, "hs_letoTrigger" ) *** dbUseArea( .F. , iif( nDriver == 1,"DBFNTX",Nil ), ; cFileName, cRealAlias, ; ( lShareTables .AND. lShared ), ; ( lShareTables .AND. lReadOnly ), ; Iif( !Empty(cdp ),cdp,Nil ) ) RECOVER USING oError lres := .F. END SEQUENCE ... FUNCTION hs_letoTrigger( nEvent, nArea, nPos, xTrigVal ) LOCAL n Sx_SetTrigger( TRIGGER_DISABLE, ProcName() ) DO CASE CASE nEvent == EVENT_UPDATE // 3 IF ( n := (nArea)->( FieldPos("DATEUPDATE") ) ) > 0; (nArea)->( FieldPut(n, hb_TtoS(hb_DateTime())) ) ENDIF CASE nEvent == EVENT_APPEND // 4 ... CASE nEvent == EVENT_DELETE // 5 ... CASE nEvent == EVENT_RECALL // 6 ... ENDCASE Sx_SetTrigger( TRIGGER_ENABLE, ProcName()) RETURN .T.

Pasha: nUserStru необходим при создании переменной. Я его добавил во все функции для того, чтобы соблюдать единые правила для всех серверных функций

SergejKis: Совершенно с этим согласен ! Надо, чтобы функция обрабатывала nUserStru := NIL Еще вопрос: LETO_VARGETLIST( nUserStru, [cGroupName] ) возвращает массив только имен переменных? Если это так, то хотелось бы иметь LETO_VARGETLIST( nUserStru, [cGroupName][,lValueGet := .F.] ) - имена и значения (снимок)

Pasha: nUserStru обязателен для создания переменных. Это связано с правами на доступ к ним. Но в конце концов, каждое действие на сервере выполняется по запросу пользователя, так что он всегда определен. В том числе его надо передавать и триггеру. А сами триггеры лучше конечно устанавливать отдельным запросом с клиента. По поводу LETO_VARGETLIST: возвращать в этом случае двумерный массив ? И тогда надо сделать для клиентского вызова этой функции аналогичное поведение Только прийдется проверять права на доступ к переменным.

Pasha: По поводу падения сервера. Прогнать тест у меня сейчас совершенно нет времени Но у меня же leto2011 не упал. Может быть, что-то блокирует firewall ? Или попробуйте работать с другим портом, хотя бы стандартным 2812.

SergejKis: Говоря о LETO_VARGETLIST я имел ввиду клиента, т.к. ценность в одном обращении к серверу (чтобы не сильно ломать, то что есть можно возвращать строкой: VAR_1=N101 первый байт тип). По поводу прав доступа к переменным ... мы же их только читаем, поэтому использование этого режима на совести разработчика. Полностью согласен с тем, что Вы написали, но ... Триггеры с клиента ... это большой вопрос - надо ли переносить алгоритмы расчетов на сторону сервера ? Харбур, на мой взгляд, это толстый клиент и все расчеты только на нем. Но если такой инструмент (триггеров) будет ... кому-то он пригодится. Говоря о nUserStru := NIL, я имел ввиду только сторону сервера - получить/установить переменную по группе без учета nUserStru, а создавать переменные только с клиента. Если обработка nUserStru := NIL трудозатратна - вопрос однозначно снимается. Еще о переменных, какая MAX длина имени переменной.

SergejKis: Firewall, Norton antivirus, leto2011.exe, порты - все прописано и разрешено. NETIO сервер собраный по поведению аналогично letodb на hb 2.0 на тот же порт (другой не можем у провайдера Lattelecom платный сеанс связи и не факт что откроют то о чем просишь), полученный exe переименован в leto2011.exe - передачу файлов на сервер отрабатывает, но об этом я уже писал ... Вопрос такой, теущая сборка letodb на 2.0 пойдет ? Если нет, то где взять стабильную сборку ?

Pasha: Прогнал leto2011.exe в своей локалке. Копирует хоть несколько тысяч, хоть сотни тысяч записей Покажите, что у Вас letodb.ini Попробуйте прогнать у себя letodb, собранный под xHarbour: http://files.mail.ru/4P6Q5N

SergejKis: letodb.ini [MAIN] ; Port = 2812 Port = 2120 DataPath = . EnableFileFunc = 1 Пропустил оба теста с транзакцией и без на u08.dbf все прошло отлично, причем где то в два раза быстрее счетчик индикатор колбасит. Запустил u08.dbf на 15000 записей - надо ждать ... Все в 3G, но по поведению клиента чувствую, что будет все ok!

Pasha: Кстати, letodb поддерживает команду COPY TO / функцию __dbCopy То есть, подобную операцию лучше предоставить выполнять серверу

SergejKis: Все 15000 переписались отлично. Клиент собран на 2.1.0rc1 для BCC 5.5.1 (от gfilatov2002 ).

SergejKis: Я попробовал, когда она появилась, но получил DosError 53 разбираться нет времени, а в задачу встроен такой алгоритм загрузки данных на сервер.

SergejKis: Собрал сервер и клиента на hb 2.0.0. Ситуация, по сравнению с hb 2.1.0rc1, улучшилась, то только для теста без транзакций. С танзакцией файл u08.dbf (1801 rec) ни разу не переписался на сервер. Без транзакций через раз пересылался.

AlexMyr: Паша, только что попробовал собрать последний letodb и получил Harbour 2.1.0rc2 (Rev. 16566) Compiler: Borland C++ 5.5.1 (32-bit) Platform: Windows XP 5.1.2600 Service Pack 3 Error E2451 source\server\letovars.c 833: Undefined symbol 'HB_ITEM' in function HB_FUN_LETO_VARGETLIST Error E2379 source\server\letovars.c 833: Statement missing ; in function HB_FUN_LETO_VARGETLIST Error E2140 source\server\letovars.c 834: Declaration is not allowed here in function HB_FUN_LETO_VARGETLIST Error E2451 source\server\letovars.c 837: Undefined symbol 'Temp' in function HB_FUN_LETO_VARGETLIST Хотел в maillist но получилось к Вам, тут продублирую.

Pasha: Хмм, xHb собрал даже без варнингов Вечером если успею, поправлю (к нам тут Барселона приезжает)

AlexMyr: Pasha пишет: (к нам тут Барселона приезжает) Удачи

Pasha: Поправил, хоть мне и не совсем ясно, с каких это пор в Harbour использование HB_ITEM стало нелегитимым PHB_ITEM (ссылка на HB_ITEM) ведь можно, а определены они в одном hbapi.h Заодно добавил проверку прав доступа. Для этого и нужен nUserStru. Но если для переменной флаг LETO_VOWN не установлен, то права не проверяются, и соответственно nUserStru можно опустить



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