On-line: гостей 2. Всего: 2 [подробнее..]
АвторСообщение
alkresin
moderator


Пост N: 31
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 31.01.08 11:36. Заголовок: Leto DB Server (продолжение)


Только что открыл на 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 на Харборе, ... и вообще все в наших руках :).

Кто хочет участвовать в разработке, тестировании - пишите.



Спасибо: 0 
Профиль
Ответов - 316 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All [только новые]


alkresin
moderator


Пост N: 347
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 17.06.10 19:54. Заголовок: А если все идет чере..



 цитата:
А если все идет через транзации?


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

Спасибо: 0 
Профиль
alx_on
постоянный участник


Пост N: 84
Зарегистрирован: 07.07.09
ссылка на сообщение  Отправлено: 17.06.10 21:09. Заголовок: alkresin пишет: Так..


alkresin пишет:

 цитата:
Так не бывает


Бывает в случае множества клиентских подключений

Спасибо: 0 
Профиль
alx_on
постоянный участник


Пост N: 85
Зарегистрирован: 07.07.09
ссылка на сообщение  Отправлено: 18.06.10 17:11. Заголовок: В новом варианте наш..


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

Пока сам с этим не разбирался.

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 348
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 19.06.10 16:34. Заголовок: 1. Перестал работать..



 цитата:
1. Перестал работать под Мак


Возможно, это связано с особенностями реализации под gcc - я его с Линуксом еще не проверял.

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


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

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1519
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 20.06.10 09:45. Заголовок: Функции hs_sum(), hs..


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

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1520
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.06.10 08:35. Заголовок: letofunc.c строка 44..


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



Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 349
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 21.06.10 11:04. Заголовок: Вставил...


Вставил.

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1521
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 22.06.10 10:02. Заголовок: На сервере в несколь..


На сервере в нескольких местах вызывается
hb_itemRelease( pAStru->itmFltExpr );

Надо ли перед этим вызывать

hb_itemClear( pAStru->itmFltExpr );

нет ли утечки памяти ?

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 350
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 22.06.10 13:15. Заголовок: В предыдущих версиях..


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

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1522
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 22.06.10 16:30. Заголовок: Вижу в letodb.log та..


Вижу в 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 нет. В фильтре ? Так там стоит проверка

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 351
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 23.06.10 08:05. Заголовок: От какого числа верс..


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

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1523
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.06.10 08:23. Заголовок: Да самая последняя в..


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


Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1524
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.06.10 08:44. Заголовок: Кто нибудь может соб..


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

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 352
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 23.06.10 09:34. Заголовок: Да самая последняя в..



 цитата:
Да самая последняя версия. letodb_crash.log нет


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

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1525
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.06.10 10:03. Заголовок: alkresin пишет: Не ..


alkresin пишет:

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



Я сейчас для эксперимента установил неправильный фильтр с LTrim по числовому полю

В letodb.log появилась запись:
23.06.10 09:57:03: Error BASE/1101 Argument error: LTRIM
Arguments: ( [ 1] = Type: N Val: 0)

и сервер не упал. Все штатно, как и положено

Да и вчера я только запускал программы, и больше ничего не делал. Поэтому и грешу на use
Настраивал запуск со станций, где-то неправильно указывал каталоги, исправлял, и в какой-то момент сервер упал


Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 353
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 23.06.10 10:05. Заголовок: Кто нибудь может соб..



 цитата:
Кто нибудь может собрать letodb с помощью mingw ?


Да, я только что собрал. Пришлось, правда, поправить makefile.gcc - каталог, где хранятся библиотеки, теперь другой. Но из log'а с SF видно, что он каталоги правил под свое окружение...

Спасибо: 0 
Профиль
AlexMyr



Пост N: 4
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 23.06.10 10:32. Заголовок: Тоже собрал, ничего ..


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

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1526
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.06.10 10:40. Заголовок: AlexMyr пишет: Тоже..


AlexMyr пишет:

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



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

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1527
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.06.10 11:12. Заголовок: Есть 2 предложения. ..


Есть 2 предложения.

1) Оптимизация вызова leto_PutRec. При вызове, скажем, dbCommit() - letoFlush выдавать серверу не 2 пакета - add/upd и flush, а все данные в одном пакете. Тоже самое делать при skip/seek/goto и где еще возможно. Конечно, это не касается транзакции.

2) Оптимизация вызовов

dbCommit()
dbUnlock()

тоже заменой 2-х пакетов одним. Здесь хорошего решения не видно. Может быть ввести флажок: при commit делать сразу и unlock, и в этом случае unlock не выдавать ?


Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1528
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.06.10 11:17. Заголовок: Pasha пишет: Оптими..


Pasha пишет:

 цитата:
Оптимизация вызова leto_PutRec.



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

Спасибо: 0 
Профиль
Ответов - 316 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 37
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет