Форум » 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

Pasha: По поводу memo-полей возникла такая мысль Значание memo-поля передается на сервер во время PutValue, а остальных полей - во время выполнения Commit, что не очень хорошо Может быть передавать значения memo-полей отдельными пакетами вместе с командой update ? А по putvaluе сохранять где-нибудь это значение на клиенте, без передачи на сервер ?

Andrey: Портирую свою легкую задачу на LetoDB и столкнулся с такой проблемой: Шаблоны печати храню на сервере в папке FORM, это могут быть просто мои текстовые файлы *.ini *.frm, вордовские файлы *.doc и *.xls и отчеты FastReporta. Вопрос такой - нужна функция копирования выбранного файла с сервера на клиентское место (и обратно, если юзер поменял или изменил шаблон !!!). Хотелось бы иметь средства запрета изменения шаблонов, если пользователю нет доступа к такой операции.

alkresin: Может быть передавать значения memo-полей отдельными пакетами вместе с командой update ? А по putvaluе сохранять где-нибудь это значение на клиенте, без передачи на сервер ? Пожалуй, да. Можно добавить в LETOAREA массив BYTE * для хранения memo-полей. Количество элементов массива - по количеству полей, признак update - ненулевое значение элемента.


alkresin: Шаблоны печати храню на сервере в папке FORM, это могут быть просто мои текстовые файлы *.ini *.frm, вордовские файлы *.doc и *.xls и отчеты FastReporta. Вообще говоря, манипуляция текстовыми, а тем более must_die файлами :) не входит в компетенцию dbfcdx сервера. Файлы эти можно, как и сейчас, хранить в расшаренной папке и копировать их средствами ОС. "Средства запрета изменения шаблонов" - просто установка прав на эти файлы. Кстати, добавил функцию leto_Connect( cPath ), возвращает -1 в случае неудачи.

Andrey: alkresin пишет: Файлы эти можно, как и сейчас, хранить в расшаренной папке и копировать их средствами ОС. Неэффективно тогда получается. Разговор шел о сервере который возьмет на себя защиту данных и чтоб для разработчика это было удобно. Попробуйте распространять сетевую программу по многим городам и чтоб была простая установка и обновление. Очень несовместимые вещи. Посмотрите на БЭСТ4+, БЭСТ5 - там тоже до ума не доведено. А 1С обновлять - целая религия, в БЭСТ5 даже лучше. Так как распространяю свою сетевую программу по многим городам, набрался опыта и столкнулся с трудностями: по установке сети, а затем обновления этих программ. Админы в городах как хотят так и ставят мою программу. Заставит их "расшарить" папки - это просто ..... уму не постижимо, нет слов. Юзера продвинутые (руки им поотрывать) додумываются ставить с дистрибутивов предназначенных для других городов. Базы за 2-3 года стирают за момент и еще удивленно говорят: я же думала там программа новее и решила обновить. И руководителю фиг объяснишь что таких людей нельзя допускать к компьютеру, он к тебе с претензией - а что разве нельзя было предусмотреть защиту. ЗНАЧИТ ЗАЩИТУ от ДУРАКА (админа, пользователя) нужно ставить СРАЗУ !!! И даже бэкап не поможет. Ваш сервер очень прост в сетевой настройке !!! Это большой плюс ! Если бы еще он поддерживал эти 2 функции, то для программиста было бы проще работать с формами. Это же просто считать файл на сервере в память и передать клиенту. Туда и обрато ..... Не будем же эти формы запихивать в МЕМО-поля ? alkresin пишет: Кстати, добавил функцию leto_Connect( cPath ), возвращает -1 в случае неудачи. Спасибо !

VivaVO: Andrey пишет: Неэффективно тогда получается. Разговор шел о сервере который возьмет на себя защиту данных и чтоб для разработчика это было удобно. Попробуйте распространять сетевую программу по многим городам и чтоб была простая установка и обновление. Очень несовместимые вещи. Посмотрите на БЭСТ4+, БЭСТ5 - там тоже до ума не доведено. А 1С обновлять - целая религия, в БЭСТ5 даже лучше. Так как распространяю свою сетевую программу по многим городам, набрался опыта и столкнулся с трудностями: по установке сети, а затем обновления этих программ. Админы в городах как хотят так и ставят мою программу. Заставит их "расшарить" папки - это просто ..... уму не постижимо, нет слов. Юзера продвинутые (руки им поотрывать) додумываются ставить с дистрибутивов предназначенных для других городов. Базы за 2-3 года стирают за момент и еще удивленно говорят: я же думала там программа новее и решила обновить. И руководителю фиг объяснишь что таких людей нельзя допускать к компьютеру, он к тебе с претензией - а что разве нельзя было предусмотреть защиту. Что-то типа «Золотая рыбка». А конец знаешь?

alkresin: Это же просто считать файл на сервере в память и передать клиенту. Туда и обрато ..... Не будем же эти формы запихивать в МЕМО-поля ? А почему бы и нет ? С точки зрения безопасности и независимости от окружения очень даже неплохо. Но две такие файловые функции, чтоб считывала файл целиком и целиком записывала я планирую добавить.

Pasha: Взял на заметку, поскольку сейчас занимаюсь relations. Лучше всего пусть это будет массив PHB_ITEM, поскольку там могут быть не только null-terminated strings, да и этим я решу оставшуюся проблемку с VarField. Еще одно рацпредложение. А что, если pArea->pTagCurrent->TagName передавать не с каждой командой навигации по таблице, а по OrdSetFocus, хранить cOrder на сервере в oArea и использовать при необходимости ?

alkresin: А что, если pArea->pTagCurrent->TagName передавать не с каждой командой навигации по таблице, а по OrdSetFocus, хранить cOrder на сервере в oArea и использовать при необходимости ? Черт его знает ... Не уверен, что это даст выигрыш в производительности. С одной стороны, уменьшение длины пакета на несколько байт, с другой - лишний пакет время от времени. Надо тестировать.

alkresin: Добавил поддержку MT. Теперь на сервере крутятся 2 потока. Один принимает соединения, опрашивает сокеты и читает с них данные, а также отвечает на те запросы, которые не требуют обращения к RDD, он работает только на С уровне, не трогает Харборовский стек и VM. Второй обрабатывает запросы, требующие обращения к RDD, т.е. основную массу запросов. Это позволяет серверу, вне зависимости от загруженности работой с dbf, своевременно подключать и отключать пользователей, отвечать на management запросы ( надо будет этому первому потоку еще и файловые функции отдать ).

Andrey: Классно !!! А когда можно будет попробывать ?

alkresin: А когда можно будет попробывать ? Пора CVS осваивать :). Это очень просто - скачать клиент, настроить - и у вас всегда, когда надо, свежайшие исходники.

alkresin: Вот такой батник для консольного CVS: @echo off SET CVSROOT=:pserver:anonymous@letodb.cvs.sourceforge.net:/cvsroot/letodb SET HOME=c:\cvs c:\cvs\cvs login c:\cvs\cvs checkout -P letodb

alkresin: Паша, я сделал relations - в самом простом варианте: движение по дочерней базе инициируется при чтении поля из нее, если было движение в родительской - чтобы работало. Будут желание и возможности оптимизировать это дело - делайте.

Pasha: Замечательно А я еще неделю назад код написал, да все отладить не мог :(

alkresin: Паша, я тут подумал - стоит, наверное, передавать на сервер не имя тэга, а порядковый номер, ведь в структурах на клиенте и в LETOTAG на сервере порядок следования тот же. Дело в том, что делать так, как в leto_Scope() - определять номер тэга и по нему брать элемент в LETOTAG - неправильно. В общем случае ( особенно это будет часто для ntx ) количество и порядок следования тэгов для общей таблицы ( определяемые по orderinfo ) и для конкретной workarea могут отличаться. Я, наверное, это сделаю ближе к вечеру, если нет возражений.

Pasha: Лучше конечно делать все для общего случая, расчитывая сразу и на ntx Может в LETOTAG добавить имя тэга и по нему выполнять поиск ?

alkresin: Сначала я так и хотел сделать, но потом подумал: сколько дублирования будет - по числу пользователей одного индекса, ну и затраты на сравнение строк/поиск. А тут сразу номер готовый придет.

Pasha: Хорошо, пусть будет номер

alkresin: Не все так просто :) ... Сервер-то получит от клиента номер ордера в текущей workarea, который может не совпадать с реальным, так что все-равно нужно или имена тэгов в LETOTAG хранить, или что-то другое



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