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

Ответов - 193, стр: 1 2 3 4 5 6 7 8 9 10 All

PSP: alx_on пишет: В настоящий момент LetoDB развивается или уже заброшен? В настоящий момент LetoDB стабильно работает! :)

alx_on: PSP пишет: В настоящий момент LetoDB стабильно работает! :) Если использовать минимум функционала и для небольшого проекта, то да Я за два дня УЖЕ исправил несколько ошибок 1. SEEK, GO TOP (как и GO BOTTOM) не учитывает SCOPE (нижнюю или верхнюю) 2. DbAppend, DbRLock() не учитывают FLOCK 3. DbRLock() не снимает предыдущие блокировки В итоге все блокировки остаются и плюс все операции начинают тормозить (список блокированных записей становится огромным) еще что то...

alx_on: PSP Кстати, как впечатления от работы?


PSP: Серьезных багов я не встретил. Меня устраивает. :) То, что Вы написали выше, я не использую. Может быть Александр или Паша прокомментируют.

alx_on: PSP Сколько у Вас одновременных подключений? Как справляется с нагрузкой?

alx_on: Вот мой список исправлений: LetoDB (доработки и исправления) 1. DbAppend() сразу исполняется на сервере (плюс проверка на FLock) 2. DbRecordInfo(DBRI_LOCKED,nRecNo) - обрабатывается номер записи (ранее игнорировалось) 3. DbOrderInfo() - падало в отсутствии индекса 4. OrdCount() - теперь работает 5. Блокировки (dbrlock, flock) теперь учитывают FLock() другого пользователя 6. SEEK, DbGOTOP, DbGoBottom учитывают установленные scope

Pasha: alx_on пишет: Вот мой список исправлений: LetoDB (доработки и исправления) 1. DbAppend() сразу исполняется на сервере (плюс проверка на FLock) 2. DbRecordInfo(DBRI_LOCKED,nRecNo) - обрабатывается номер записи (ранее игнорировалось) 3. DbOrderInfo() - падало в отсутствии индекса 4. OrdCount() - теперь работает 5. Блокировки (dbrlock, flock) теперь учитывают FLock() другого пользователя 6. SEEK, DbGOTOP, DbGoBottom учитывают установленные scope Если можно, пришлите мне (на tpe2 (гав) mail . ru ) ваши исправления, я их сброшу на CVS И напишите, как вас назвать в Changelog

PSP: alx_on пишет: Сколько у Вас одновременных подключений? Как справляется с нагрузкой? Проект пока маленький. Максимум 10 пользователей. Задержек не наблюдается.

alx_on: Pasha пишет: Если можно, пришлите мне (на tpe2 (гав) mail . ru ) ваши исправления, я их сброшу на CVS В каком виде отдать? (или включите в разработчики для самостоятельного выкладывания, раз никто проектом больше не занимается) PSP пишет: Максимум 10 пользователе У нас 50 (доходит до 100 одновременно) :)

Pasha: alx_on пишет: В каком виде отдать? (или включите в разработчики для самостоятельного выкладывания, раз никто проектом больше не занимается) Администратор проекта - Александр, если есть желание поучавствовать - надо связяться с ним. Только он может добавить в список разработчиков и дать права на запись. Это только приветствуется. А так я просто обновлю исходники на CVS, и напишу, что это ваши правки

alx_on: Pasha отправил письмо

alx_on: Меня сейчас смущают несколько моментов 1. Realtions - в подчиненной базе не обновляется RECNO() (при этом OrdKeyNo правильный и запись позиционируется тоже вроде бы верно) 2. Долгие операции (на сервере), например, оптимизированный фильтр на большой базе, блокируют остальные операции (для пользователя складывается ощущение, что все зависло). Я даже думаю - не сделать ли опцию в letodb.ini для выключения оптимизации фильтров 3. DbRLockList - не работает (в принципе, не сильно важно) 4. DbRLock() - не снимает предыдущие блокировки (может поправлю сам) 5. Если индексы открываются автоматически (SET_AUTOPEN==.T.) - то установка SCOPE игнорируется (клиентская часть не информируется об открытии индексов?) PS Александр Кресин забросил проект?

alx_on: Pasha Добавил обработку OrdKeyGoto() Файлы выслал

Pasha: alx_on пишет: Добавил обработку OrdKeyGoto() Файлы выслал Спасибо. Отправил все на CVS

alkresin: alx_on пишет: 2. Долгие операции (на сервере), например, оптимизированный фильтр на большой базе, блокируют остальные операции (для пользователя складывается ощущение, что все зависло). Я даже думаю - не сделать ли опцию в letodb.ini для выключения оптимизации фильтров А что такое оптимизированный фильтр и как он реализован в letodb ? PS Александр Кресин забросил проект? Нет, не забросил. Просто иногда резко ограничиваю Интернет-активность, последнее время, к сожалению, все чаще и чаще. По поводу ваших изменений. Я категорически не согласен с тем, что dbAppend() стал сразу выполняться на сервере. Задержка его исполнения была сделана специально, чтобы ускорить добавление записи. В вашем варианте при обычной процедуре добавления: append blank replace ... commit ( , или unlock, или следующий append blank ) требуется отправить 2 команды, в то время как при старом варианте - одну.

Pasha: alkresin пишет: Я категорически не согласен с тем, что dbAppend() стал сразу выполняться на сервере. Я верну этот изменение назад. Думаю, проверку FilLock надо делать при вызове neterr()

alkresin: Думаю, проверку FilLock надо делать при вызове neterr() Не могу ничего пока сказать по этому поводу. Я не использую Flock() и поэтому не знаю нюансы, связанные с его использованием. До недавнего времени я полагал, что это то же, что открыть файл в exlusive mode, и был очень удивлен, когда узнал, что это не так :).

Pasha: Смотрим NG. NetErr() возвращает .t. в таких ситуациях: USE USE EXCLUSIVE by another process USE...EXCLUSIVE USE EXCLUSIVE or USE by another process APPEND BLANK FLOCK() or RLOCK() of LASTREC() + 1 by another user т.е., для letodb neterr() должен посылать запрос на сервер на предмет блокировок. В этом случае все равно получится 2 запроса при dbAppend: на neterr и commit. Но, если пользователь уверен, что FLock() не используется, он может не выдавать NetErr()

alx_on: alkresin пишет: А что такое оптимизированный фильтр и как он реализован в letodb ? Интересный вопрос :) Есть несложная проверка фильтра, по результату letoDB может сама на сервере отфильтровывать записи (по типу ADS), например: Простой фильтр - клиент сам проверяет выражение фильтра на каждой записи Оптимизированный - фильтр ставится на сервере требуется отправить 2 команды, в то время как при старом варианте - одну Возьмем самый простой пример: 1. (1) клиент вызвал FLock() 2. (2) клиент сделал dbappend() (успешно, ему ничего не помешало, на сервер ничего не ушло, запись НЕ заблокировалась, ошибки не произошло) теперь оба клиента уверены, что у них все хорошо чем это кончится в итоге я предсказать не берусь (в сложных вариантах непредсказуемые глюки в данных) Pasha пишет: Думаю, проверку FilLock надо делать при вызове neterr() Поменяем пример выше: первым было сделан dbappend(). Та же проблема в профиль Я считаю, что если необходимы быстрые dbappend (не используется FLock) - можно сделать некую настройку (при компиляции или в рантайме) Или блокировать FLock'ом (в этом случае, например, можно сделать быстрые dbappend)

alx_on: Pasha пишет: Но, если пользователь уверен, что FLock() не используется, он может не выдавать NetErr() Существуют и другие ошибки при добавлении записи (например, место на диске кончилось, сеть тоже кончилась:) и т.д.)



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