Форум » 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: Переделал scope, отправил на CVS Одну свою большую программу с letodb так и не смог запустить, не открывается 5-й по порядку открытия файл. Непонятно почему, имя задано правильно. 4 файла БД с индексом открылись успешно Ошибка в лог: 02/04/08 19:14:46: Open error (12-1001): e:/db/test/com/people_ Если вместо people_.dbf путаюсь открыть другой файл, выдается ошибка с таким же кодом Непонятно. Пока отставил, запустил другую программу. БД открылась успешно ! Большинство режимов работают, но не все Иногда программа зависает, иногда выдает ошибку на различных операциях Пока не локализовал, разбираюсь. Результат считаю хорошим, я на это так быстро и не расчитывал Пока тестовые примеры c ошибками не даю, попытаюсь разобраться сам

alkresin: 02/04/08 19:14:46: Open error (12-1001): e:/db/test/com/people_ А точно 12-1001 ? Может, 21-1001 ? Ведь 12 == EG_NOFUNC, вроде ни при чем ? А вообще странно. У меня никаких проблем нет, все программы, что скомпилил - работают, файлов по 10 открывают ( у меня больше не бывает обычно ).

Pasha: Я скопировл из лога. Покопаюсь сам, странная ситуация У меня тоже другая программа всю БД без проблем открыла Одну ошибку локализовал dbSeek(space(n)) попадает в server.prg на IF Empty( xKey := GetCmdItem( cCommand,nPos+1,@nPos ) ) Return "-002" ENDIF Надо вычислять длину ключа и передавать ее вместе с ключем. И учитывать, что сам ключ может содержать нулевой байт. Т.е в leto_SendRecv надо передавать размер пакета напрямую, а не вычислять по strlen()


Pasha: Как правильно создавать индекс в OrdCreate, если его надо создать в том же каталоге, что и dbf ? Передавать имя файла индекса без //ip-adr:port/... ? Должна ли учитываться настройка DataPath в letodb.ini ? Наверное, надо добавить oApp:DataPath в hs_createindex ordCreate( oApp:DataPath+cBagName,cTagName,cKey,&("{||"+cKey+"}"),lUnique )

alkresin: Надо вычислять длину ключа и передавать ее вместе с ключем. И учитывать, что сам ключ может содержать нулевой байт. Т.е в leto_SendRecv надо передавать размер пакета напрямую, а не вычислять по strlen() Сделаю. Насчет OrdCreate: //ip-adr:port/ и так на сервер не передается. Если имя индекса передано с путем, то надо добавлять oApp:DataPath, если без, то нужна дополнительная проверка: если имя индекса совпадает с именем dbf, то не добавляем oApp:DataPath ( он автоматически размещается там же, где и dbf ), если другое имя - то добавляем.

Pasha: Ясно Александр, а как насчет создания вычисляемых readonly полей ? CalcFields дали бы существенное сокращение траффика для случая, когда в основной таблице содержится код (например) справочника, и надо выбрать его наименование Такое есть в sql-запросах, но до них еще далеко. Такие выборки эффективнее, чем relations, так как будет использоваться данные одной, а не 2-х РО, без лишних seek и выборки данных записи Это были бы ф-ии вида: AddCalcField(cFieldName, cFieldType, nLen, nDec, cAlias, cKeyExpr, cRelField) динамически добавляет поле DelCalcField(cFieldName) удаляет

alkresin: Хм... Виртуальное поле, вычисляемое на сервере из логически связанных таблиц ? Очень интересная идея. Мне нравится.

Pasha: Ну да Примерно такое есть в Delphi-TDataset, правда там оно не вычисляется на сервере

Pasha: Я смогу заниматься letodb до конца этой недели. Думаую повылавливать мелкие несовместимости. Затем примерно 2 недели меня не будет, и потом подключусь опять, где-то с конца февраля

alkresin: http://www.letodb.org/ - Спасибо Патрику ( Patrick Mast )

alkresin: Предполагаемые направления работы: 1) Тестирование, тестирование, тестирование ... 2) Проверить, что еще осталось не сделанным из базовых функций - и сделать. Первые претенденты - ordListAdd, ordListClear, ordListDelete - после них можно будет сделать поддержку ntx. Ну и relations, конечно. 3) Насколько это возможно и целесообразно, код сервера должен быть переписан на C, особенно вот это : IF cItem == "skip" ... ELSEIF cItem == "seek" ... 4) Процессы и, возможно, потоки. Я подумал, что можно было бы реализовать потоки на уровне С - это должно быть не сложным, и тогда можно будет разгрузить основной поток, передав туда, например, посылку ответов. 5) С использованием процессов и потоков - реализация транзакций, stored procedures, ... 6) Ну и расширения разные, типа вот этих виртуальных полей

Петр: Судя по всему авторизация, и все с ней связанное, в LetoDB не предполагается ?

alkresin: Предполагается. В ini файл на сервере будет включена опция, в зависимости от значения которой сервер будет требовать авторизации или нет. Я упустил это в своем списке, а, может, и не только это, потому что сейчас этим не озабочен - штука-то довольно простая в реализации

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

alkresin: Честно говоря, я не думал о конкретной реализации, просто была в голове мысль, что надо такое сделать.

Pasha: alkresin пишет: 4) Процессы и, возможно, потоки. Я подумал, что можно было бы реализовать потоки на уровне С - это должно быть не сложным, и тогда можно будет разгрузить основной поток, передав туда, например, посылку ответов. А какими средствами, если не использовать mt xHb ? Тем более, надо расчитывать и на unix, и на windows - сервер

alkresin: Pasha, я скинул на CVS изменения, чтоб работало со свежим xHarbour, не мог бы проверить ?

Pasha: alkresin пишет: после них можно будет сделать поддержку ntx. Отдельные rdd выделять не будем ? Сделать что-то вроде LetoConnection(...), и в качестве параметра - используемый rdd ? Еще необходимы Request на используемые кодовые страницы, но это еще на этапе сборки сервера

alkresin: А какими средствами, если не использовать mt xHb ? Тем более, надо расчитывать и на unix, и на windows - сервер Написать. В xHarbour эти средства большие и сложные, потому что надо было обеспечить корректную работу vm, стека и пр. в условиях mt. Здесь же можно сделать запуск потока только на С уровне, чтобы функция, работающая в этом потоке, не трогала Харборовский стек. Мне кажется, что это не особенно трудоемкое дело.

Pasha: alkresin пишет: Pasha, я скинул на CVS изменения, чтоб работало со свежим xHarbour, не мог бы проверить ? Я с работы на CVS не достучусь. Разве что через browse cvs скачивать Вечером получу только. Это для текущих сырцов, как я понимаю ?



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