Автор | Сообщение |
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 на Харборе, ... и вообще все в наших руках :). Кто хочет участвовать в разработке, тестировании - пишите.
|
|
|
Ответов - 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() и т.п. Да и такие ресурсозатратные операции, как индексация, упаковка происходят не во время транзакций.
|
|
|
alx_on
|
| постоянный участник
|
Пост N: 84
Зарегистрирован: 07.07.09
|
|
Отправлено: 17.06.10 21:09. Заголовок: alkresin пишет: Так..
alkresin пишет: Бывает в случае множества клиентских подключений
|
|
|
alx_on
|
| постоянный участник
|
Пост N: 85
Зарегистрирован: 07.07.09
|
|
Отправлено: 18.06.10 17:11. Заголовок: В новом варианте наш..
В новом варианте нашел две особенности 1. Перестал работать под Мак 2. В случае падения клиента информация о таблицах удаляется, но файлы при этом не закрываются. Т.е. попытка сервера открыть их повторно заканчивается ошибкой Пока сам с этим не разбирался.
|
|
|
alkresin
|
| moderator
|
Пост N: 348
Зарегистрирован: 06.07.06
|
|
Отправлено: 19.06.10 16:34. Заголовок: 1. Перестал работать..
цитата: | 1. Перестал работать под Мак |
| Возможно, это связано с особенностями реализации под gcc - я его с Линуксом еще не проверял. цитата: | 2. В случае падения клиента информация о таблицах удаляется, но файлы при этом не закрываются. |
| Тут причина ясна. При падении клиента его удалением и закрытием таблиц занимается первый поток, в то время как открывает таблицы - второй ( я уже писал, что это может вызвать проблемы и в текущей реализации и это надо поправить ). В Harbour mt первый поток ничего не знает о таблицах, открытых во втором - вот и результат.
|
|
|
Pasha
|
| Администратор
|
Пост N: 1519
Зарегистрирован: 23.05.05
|
|
Отправлено: 20.06.10 09:45. Заголовок: Функции hs_sum(), hs..
Функции hs_sum(), hs_checkexpr(), IndexInfo(), hs_setfilter() сделал на C. Осталось еще сделать открытие/создание и dborderinfo
|
|
|
Pasha
|
| Администратор
|
Пост N: 1520
Зарегистрирован: 23.05.05
|
|
Отправлено: 21.06.10 08:35. Заголовок: letofunc.c строка 44..
letofunc.c строка 4446 Надо вставить: leto_SelectArea( ulAreaID, 0, NULL ); я пропустил :(
|
|
|
alkresin
|
| moderator
|
Пост N: 349
Зарегистрирован: 06.07.06
|
|
Отправлено: 21.06.10 11:04. Заголовок: Вставил...
Вставил.
|
|
|
Pasha
|
| Администратор
|
Пост N: 1521
Зарегистрирован: 23.05.05
|
|
Отправлено: 22.06.10 10:02. Заголовок: На сервере в несколь..
На сервере в нескольких местах вызывается hb_itemRelease( pAStru->itmFltExpr ); Надо ли перед этим вызывать hb_itemClear( pAStru->itmFltExpr ); нет ли утечки памяти ?
|
|
|
alkresin
|
| moderator
|
Пост N: 350
Зарегистрирован: 06.07.06
|
|
Отправлено: 22.06.10 13:15. Заголовок: В предыдущих версиях..
В предыдущих версиях Harbour hb_itemClear() вызывался из hb_itemRelease(). Не думаю, что это изменилось, хотя проверить теперь труднее - там в коде куча каких-то макросов, лень разгребать. Во всяком случае, если б были утечки, то по завершении работы letodb вываливались бы соответствующие сообщения.
|
|
|
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 нет. В фильтре ? Так там стоит проверка
|
|
|
alkresin
|
| moderator
|
Пост N: 351
Зарегистрирован: 06.07.06
|
|
Отправлено: 23.06.10 08:05. Заголовок: От какого числа верс..
От какого числа версия сервера ? letodb_crash.log есть ?
|
|
|
|
Pasha
|
| Администратор
|
Пост N: 1523
Зарегистрирован: 23.05.05
|
|
Отправлено: 23.06.10 08:23. Заголовок: Да самая последняя в..
Да самая последняя версия. letodb_crash.log нет Может, ошибка возникает в Str, она восстанавливается по Recover, за ней следующая ошибка в LTrim, которая уже не восстанавливается ? Или ошибка возникает прямо в errorsys ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 1524
Зарегистрирован: 23.05.05
|
|
Отправлено: 23.06.10 08:44. Заголовок: Кто нибудь может соб..
Кто нибудь может собрать letodb с помощью mingw ? На sf пишут, что при сборке возникает ошибка, а какая - из лога не видно
|
|
|
alkresin
|
| moderator
|
Пост N: 352
Зарегистрирован: 06.07.06
|
|
Отправлено: 23.06.10 09:34. Заголовок: Да самая последняя в..
цитата: | Да самая последняя версия. letodb_crash.log нет |
| Не связано ли это с переводом функций фильтрации на С ?
|
|
|
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 Настраивал запуск со станций, где-то неправильно указывал каталоги, исправлял, и в какой-то момент сервер упал
|
|
|
alkresin
|
| moderator
|
Пост N: 353
Зарегистрирован: 06.07.06
|
|
Отправлено: 23.06.10 10:05. Заголовок: Кто нибудь может соб..
цитата: | Кто нибудь может собрать letodb с помощью mingw ? |
| Да, я только что собрал. Пришлось, правда, поправить makefile.gcc - каталог, где хранятся библиотеки, теперь другой. Но из log'а с SF видно, что он каталоги правил под свое окружение...
|
|
|
AlexMyr
|
| |
Пост N: 4
Зарегистрирован: 11.06.10
|
|
Отправлено: 23.06.10 10:32. Заголовок: Тоже собрал, ничего ..
Тоже собрал, ничего не правил.
|
|
|
Pasha
|
| Администратор
|
Пост N: 1526
Зарегистрирован: 23.05.05
|
|
Отправлено: 23.06.10 10:40. Заголовок: AlexMyr пишет: Тоже..
AlexMyr пишет: цитата: | Тоже собрал, ничего не правил. |
| Я ему сообщение отправил. Может, ошибка при сборке letodb.exe. По логу видно, что до этого этапа сборка доходит
|
|
|
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 не выдавать ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 1528
Зарегистрирован: 23.05.05
|
|
Отправлено: 23.06.10 11:17. Заголовок: Pasha пишет: Оптими..
Pasha пишет: цитата: | Оптимизация вызова leto_PutRec. |
| т.е., в команды flush, seek, goto и пр. добавить еще прицепной вагон с записью, и, если он есть, на сервере отрабатывать его
|
|
|
Ответов - 316
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
All
[только новые]
|
|