Форум » 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: alx_on пишет: Т.е. переставить местами SELF_SYNCCHILDREN и SELF_SKIPFILTER, то все работает Вопрос к alkresin: я правильно понял проблему или это просто так повезло в моем случае? Думаю, что просто повезло. Чтобы решить проблему, надо во всех операциях перемещения вставить строку pArea->lpdbPendingRel = NULL; Дело в том, что когда в родительской области происходит перемещение этот элемент структуры child area устанавливается ( см. letoChildSync ) и когда мы читаем запись из child area, то при установленном pArea->lpdbPendingRel происходит перемещение в child области.

alx_on: alkresin Примерно так? static ERRCODE letoGoTop( LETOAREAP pArea ) { char sData[32], * ptr; HB_TRACE(HB_TR_DEBUG, ("letoGoTop(%p)", pArea)); if( pArea->uiUpdated ) leto_PutRec( pArea ); sprintf( sData,"goto;%lu;-1;%s;%c;\r\n", pArea->hTable, (pArea->pTagCurrent)? pArea->pTagCurrent->TagName:"", (char)( (hb_setGetDeleted())? 0x41 : 0x40 ) ); if ( !leto_SendRecv( pArea, sData, 0, 1021 ) ) return FAILURE; ptr = leto_firstchar(); leto_ParseRec( pArea, ptr ); pArea->ptrBuf = NULL; SELF_SKIPFILTER( ( AREAP ) pArea, 1 ); if( pArea->area.lpdbRelations ) { if( SELF_SYNCCHILDREN( ( AREAP ) pArea ) != SUCCESS ) return FAILURE; } pArea->lpdbPendingRel = NULL; return SUCCESS; } PS Вставлять вообще ВЕЗДЕ или только после SELF_SYNCCHILDREN? PPS Сама функция letoChildSync() не сбрасывает lpdbPendingRel. Ее тоже необходимо поправить? PPPS Для текущей версии harbour вместо HB_LONG используется HB_MAXINT. У себя я поправил (иначе падало. Например в UpdateRec обработка числовых полей HB_FT_LONG и HB_FT_FLOAT)

alkresin: Примерно так? Лучше поставить в начале функции. PS Вставлять вообще ВЕЗДЕ или только после SELF_SYNCCHILDREN? Во всех функциях перемещения. SELF_SYNCCHILDREN тут ни при чем, так как она вызывается для синхронизации детей текущей area. PPS Сама функция letoChildSync() не сбрасывает lpdbPendingRel. Ее тоже необходимо поправить? Нет, letoChildSync() устанавливает lpdbRelations для себя, ее трогать не надо. Эта штука (lpdbRelations) обнуляется для того, чтобы area, где она установлена родителем, не перемещала текущую запись в соответствии с положением родителя.


alkresin: alkresin пишет: Чтобы решить проблему, надо во всех операциях перемещения вставить строку pArea->lpdbPendingRel = NULL; Выложил сегодня эти изменения на CVS

alx_on: alkresin Выложил свои изменения (в продолжение темы relations). 1. DBSKIP(0) ничего не делал (в принципе, нормально для родителя, но дитя должно перемещаться). 2. DbAppend() не синхронизировал записи 3. RECNO() возвращал значение до синхронизации с родителем (также блокировка) Поправлена установка фильтра с национальными символами Изменил HB_LONG на HB_MAXINT (вопрос: на xHarbour это компиляется?)

alkresin: alx_on пишет: Изменил HB_LONG на HB_MAXINT (вопрос: на xHarbour это компиляется?) Не знаю, как на xHarbour, а на той версии Harbour, которой я пользуюсь, HB_MAXINT не определен ...

alkresin: Проверил xHarbour - там тоже HB_MAXINT не определен.

alx_on: alkresin пишет: Не знаю, как на xHarbour, а на той версии Harbour, которой я пользуюсь, HB_MAXINT не определен ... я пользуюсь с SVN 2 варианта либо нет HB_MAXINT под определенную платформу (так уже было) либо придется проверять версию (начиная с какой?) под xHarbour могу поправить (только проверить не смогу) PS кстати, я запускаю letodb под MacOSX (10.6) - все работает

alkresin: alx_on пишет: я пользуюсь с SVN А я пользуюсь "Changelog 2008-09-17 18:04" :) и в ближайшее время переходить на более новую не планирую. Давайте вернем это дело назад. Думаю, я не один такой, кто еще не перешел на Harbour-2.

alx_on: alkresin пишет: Давайте вернем это дело назад Может, конечно, это совпадение, но у меня с HB_LONG падает Обрамим проверками на Harbour-2 По типу: #if defined (__XHARBOUR__) || !defined(__HARBOUR__) || ( (__HARBOUR__ - 0) < 0x020000 ) HB_LONG lVal #else HB_MAXINT lVal #endif или так (в самом начале): #if !defined (HB_MAXINT) #define HB_MAXINT HB_LONG #endif В течение часа выложу

alkresin: alx_on пишет: #if !defined (HB_MAXINT) #define HB_MAXINT HB_LONG #endif Так не получится, потому что HB_MAXINT определен через typedef и defined (HB_MAXINT) всегда будет false.

alx_on: alkresin пишет: Так не получится, потому да, я уже заметил :) значит первый вариант

alx_on: alkresin выложил

Andrey: alx_on пишет: PS кстати, я запускаю letodb под MacOSX (10.6) - все работает Круто ! Это просто фантастика ! Харбор на маке... А программа тоже под MacOSX работает ?

alx_on: Andrey пишет: А программа тоже под MacOSX работает ? Да

alx_on: alkresin выложил новые изменения... PS вопрос: в связи с чем индексы каждый раз переоткрываются для уже открытой базы (hs_openindex)? Можно ли это оптимизировать?

alkresin: alx_on пишет: PS вопрос: в связи с чем индексы каждый раз переоткрываются для уже открытой базы (hs_openindex)? Хм... Я этого не замечал, наверное потому что дополнительные ( не compound ) индексы использую только как временные, для одного сеанса работы и не разделяю их с другими экземплярами программы. Надо как-то исправить, конечно.

Pasha: Перевел документацию на русский язык См. readme_rus.txt

Andrey: Pasha пишет: Перевел документацию на русский язык Спасибо Паша !

leo: Использует ли кто-то в реальных проектах Leto DB Server? Насколько надежно он ведет себя в работе? Стоит ли на него переходить?



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