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

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

alkresin: А если все идет через транзации? Так не бывает :). Какой смысл только добавлять информацию, если никто ее не читает, не анализирует, не печатает отчеты ? А получение данных - это как раз то узкое место, где может наступить ступор. Именно здесь имеет место фильтрация, операции типа leto_sum() и т.п. Да и такие ресурсозатратные операции, как индексация, упаковка происходят не во время транзакций.

alx_on: alkresin пишет: Так не бывает Бывает в случае множества клиентских подключений

alx_on: В новом варианте нашел две особенности 1. Перестал работать под Мак 2. В случае падения клиента информация о таблицах удаляется, но файлы при этом не закрываются. Т.е. попытка сервера открыть их повторно заканчивается ошибкой Пока сам с этим не разбирался.


alkresin: 1. Перестал работать под Мак Возможно, это связано с особенностями реализации под gcc - я его с Линуксом еще не проверял. 2. В случае падения клиента информация о таблицах удаляется, но файлы при этом не закрываются. Тут причина ясна. При падении клиента его удалением и закрытием таблиц занимается первый поток, в то время как открывает таблицы - второй ( я уже писал, что это может вызвать проблемы и в текущей реализации и это надо поправить ). В Harbour mt первый поток ничего не знает о таблицах, открытых во втором - вот и результат.

Pasha: Функции hs_sum(), hs_checkexpr(), IndexInfo(), hs_setfilter() сделал на C. Осталось еще сделать открытие/создание и dborderinfo

Pasha: letofunc.c строка 4446 Надо вставить: leto_SelectArea( ulAreaID, 0, NULL ); я пропустил :(

alkresin: Вставил.

Pasha: На сервере в нескольких местах вызывается hb_itemRelease( pAStru->itmFltExpr ); Надо ли перед этим вызывать hb_itemClear( pAStru->itmFltExpr ); нет ли утечки памяти ?

alkresin: В предыдущих версиях Harbour hb_itemClear() вызывался из hb_itemRelease(). Не думаю, что это изменилось, хотя проверить теперь труднее - там в коде куча каких-то макросов, лень разгребать. Во всяком случае, если б были утечки, то по завершении работы letodb вываливались бы соответствующие сообщения.

Pasha: Вижу в letodb.log такие записи: 22.06.10 12:34:49: Error BASE/1101 Argument error: LTRIM Arguments: ( [ 1] = Type: N Val: 0) 06/22/10 12:34:53: Leto DB Server has been started. и пребываю в недоумении. Видно, что сервер споткнулся на LTRIM и упал, затем стартовал снова. Непонято, на чем он споткнулся. В server.prg, errorsys.prg есть только конструкции вида LTrim( Str( ... ) ), т.е. LTrim получить числовой параметр никак не может, и тем не менее... Скорее всего ошибка возникла на OpenTable, но где ? В индексных выражениях у меня LTrim нет. В фильтре ? Так там стоит проверка

alkresin: От какого числа версия сервера ? letodb_crash.log есть ?

Pasha: Да самая последняя версия. letodb_crash.log нет Может, ошибка возникает в Str, она восстанавливается по Recover, за ней следующая ошибка в LTrim, которая уже не восстанавливается ? Или ошибка возникает прямо в errorsys ?

Pasha: Кто нибудь может собрать letodb с помощью mingw ? На sf пишут, что при сборке возникает ошибка, а какая - из лога не видно

alkresin: Да самая последняя версия. letodb_crash.log нет Не связано ли это с переводом функций фильтрации на С ?

Pasha: alkresin пишет: Не связано ли это с переводом функций фильтрации на С ? Я сейчас для эксперимента установил неправильный фильтр с LTrim по числовому полю В letodb.log появилась запись: 23.06.10 09:57:03: Error BASE/1101 Argument error: LTRIM Arguments: ( [ 1] = Type: N Val: 0) и сервер не упал. Все штатно, как и положено Да и вчера я только запускал программы, и больше ничего не делал. Поэтому и грешу на use Настраивал запуск со станций, где-то неправильно указывал каталоги, исправлял, и в какой-то момент сервер упал

alkresin: Кто нибудь может собрать letodb с помощью mingw ? Да, я только что собрал. Пришлось, правда, поправить makefile.gcc - каталог, где хранятся библиотеки, теперь другой. Но из log'а с SF видно, что он каталоги правил под свое окружение...

AlexMyr: Тоже собрал, ничего не правил.

Pasha: AlexMyr пишет: Тоже собрал, ничего не правил. Я ему сообщение отправил. Может, ошибка при сборке letodb.exe. По логу видно, что до этого этапа сборка доходит

Pasha: Есть 2 предложения. 1) Оптимизация вызова leto_PutRec. При вызове, скажем, dbCommit() - letoFlush выдавать серверу не 2 пакета - add/upd и flush, а все данные в одном пакете. Тоже самое делать при skip/seek/goto и где еще возможно. Конечно, это не касается транзакции. 2) Оптимизация вызовов dbCommit() dbUnlock() тоже заменой 2-х пакетов одним. Здесь хорошего решения не видно. Может быть ввести флажок: при commit делать сразу и unlock, и в этом случае unlock не выдавать ?

Pasha: Pasha пишет: Оптимизация вызова leto_PutRec. т.е., в команды flush, seek, goto и пр. добавить еще прицепной вагон с записью, и, если он есть, на сервере отрабатывать его



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