On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
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 
Профиль
Ответов - 193 , стр: 1 2 3 4 5 6 7 8 9 10 All [только новые]


PSP
постоянный участник


Пост N: 257
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 19.01.10 12:11. Заголовок: Скажите, пожалуйста,..


Скажите, пожалуйста, как это работает в LetoDB?
1. DBAppend( .F. ) и DBAppend()
2. DBRLock( xRec ) и DBRLock()
Имеется в виду, работает ли сохранение существующих блокирововк при вызовах
DBAppend( .F. ) и DBRLock( xRec )?


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


Пост N: 258
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 19.01.10 12:22. Заголовок: И еще. Когда Share_T..


И еще.
Когда Share_Tables = 1, Leto_CommitTransaction() иногда (пока не понял закономерности),
вываливатеся по ошибке: "Ошибка LETO/19727357 Ошибка типа данных: -101"
Тот же самый код при Share_Tables = 0 работает нормально.


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


Пост N: 26
Зарегистрирован: 07.07.09
ссылка на сообщение  Отправлено: 19.01.10 13:04. Заголовок: PSP пишет: Имеется ..


PSP пишет:

 цитата:
Имеется в виду, работает ли сохранение существующих блокирововк при вызовах
DBAppend( .F. ) и DBRLock( xRec )?


Должно! (по крайней мере, работало в ноябре 2009)

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


Пост N: 259
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 19.01.10 13:13. Заголовок: Т.е. в этом плане &#..


Т.е. в этом плане "все соответствует стандартам"? :)
Значит показалось... :) Проверю еще раз. Спасибо.

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





Пост N: 56
Зарегистрирован: 31.05.07
ссылка на сообщение  Отправлено: 21.01.10 10:43. Заголовок: подскажите пожалуйст..


подскажите пожалуйста...
я пытаюсь собрать сервер на Линхе (Ubuntu 8.04 LTS, xHaroubr 1.20 из DEB пакет взят с сервера xharbour.org) и у меня возникли проблемки.
естественно пришлось переписать make_linux.sh под себя, поскольку описание путей для запуска харбора несколько отличается (спасибо сборщикам пакета).
не это беда. вот что пишется в лог a2.log

Скрытый текст

лезть в исходники я не спец в СИ.
посоветуйте, что делать?

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


Пост N: 253
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 21.01.10 14:21. Заголовок: spair2k пишет: я пы..


spair2k пишет:

 цитата:
я пытаюсь собрать сервер на Линхе (Ubuntu 8.04 LTS, xHaroubr 1.20 из DEB пакет взят с сервера xharbour.org) и у меня возникли проблемки.


Это связано с вашей версией xHarbour. Для Harbour сейчас есть средства автоопределения версии и я стараюсь их использовать, есть ли что-то аналогичное для xHarbour - не знаю.
Поэтому просто откройте include/funcleto.h и раскомментируйте строку 85:
#define __OLDRDD__

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





Пост N: 57
Зарегистрирован: 31.05.07
ссылка на сообщение  Отправлено: 22.01.10 11:30. Заголовок: alkresin пишет: #de..


alkresin пишет:

 цитата:
#define __OLDRDD__


Сделал, попытался собрать, выдало следующее:
Скрытый текст



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


Пост N: 254
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 22.01.10 12:34. Заголовок: source/server/server..



 цитата:
source/server/server.prg(105) Error E0025 Error in #if expression


А на строке 105 у вас "#if ( (HB_VER_SVNID - 0) > 11796 )" ?
Если так, похоже что эта версия xHarbour не понимает такие выражения. Тогда просто закомментируйте эту и последующие 2 строчки, вплоть до #endif - все равно они не для xHarbour.

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


Пост N: 263
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 23.01.10 16:24. Заголовок: А можно попросить сд..


А можно попросить сделать функцию, которая бы возвращала клиенту системную дату и время компьютера (можно типа DateTime), на котором запущен сервер?

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


Пост N: 264
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 23.01.10 19:10. Заголовок: Как должна работать ..


Как должна работать функция LETO_MILLISEC() ?
Понятно, что подсчет миллисекунд... И, судя по исходникам, подсчет с начала года.
Но у меня возвращает отрицательное число (сейчас что-то типа "-1652863174").
Причем, если вызывать в цикле, число увеличивается (т.е. стремится к нулю).
Такое впечатление, что есть ошибка с типом числовой переменной и происходит отрицательное переполнение.

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




Пост N: 1296
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.01.10 23:17. Заголовок: Эта функция возвраща..


Эта функция возвращает колличество миллисекунд "от царя панька", т.е. от условной даты, от которой считаются юлианские дни, до текущего момента.
Получается: в сутках 86400000 миллисекунд, сейчас примерно 2500000-й юлианский день, вот результат и вылазит за пределы 32-битного целого
Можно использовать, конечно, 64-битное целое, только я не возьму в толк, зачем такая функция нужна ?


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


Пост N: 266
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 24.01.10 10:59. Заголовок: Pasha пишет: Эта фу..


Pasha пишет:

 цитата:
Эта функция возвращает колличество миллисекунд "от царя панька", т.е. от условной даты, от которой считаются юлианские дни, до текущего момента.


Да, да, да... точно. Там же в исходниках, в коде под Линукс, явно это видно.


 цитата:
зачем такая функция нужна ?


Мне нужна не имеено эта функция. Мне нужно брать дату и время (точнее, уникальный временной отпечаток, TimeStamp) для всех клиентов из одного источника (чтобы соблюдалась четкая временная последовательность операций). Мне не приходит в голову ничего лучшего, чем компьютер, где запущен сервер LetoDB. Как оттуда взять время? Вот я и стал рыться, искать. Нашел LETO_MILLISEC().
Паш, а можно ее подправить или сделать другую, которая возвратит переменную типа DateTime (yyyymmddhhmmssccc), а?
Заранее спасибо.

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




Пост N: 1301
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.01.10 11:14. Заголовок: Понятно Но LETO_MILL..


Понятно
Но LETO_MILLISEC() выпоняется локально, так что нужное время она не вернет
Функция leto_MgGetInfo() возвращает информацию с сервера, и 5-й элемент массива-результата - как раз время, прошедшее с момента запуска сервера.
Это подойдет ?

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


Пост N: 267
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 24.01.10 11:23. Заголовок: Pasha пишет: Это по..


Pasha пишет:

 цитата:
Это подойдет ?


Если сервер перезагрузить, отсчет пойдет сначала? Если да, то не подходит.
Вполне подошло бы системное время... :)
Может можно в Leto_MgGetInfo() еще один эдемент добавить?
Извините за навязчивость... Спасибо.

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




Пост N: 1302
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.01.10 14:08. Заголовок: Может быть есть друг..


Может быть есть другой вариант, получать время сервера по протоколу NTP, подскажите, кто знает, как это сделать
Если это делать средствами letodb (c точностю до миллисекунд), то это делается так:

source\server\letofunc.c, строка 3736:

sprintf( s,"+%d;%d;%d;%d;%lu;%lu;%lu;%lu;%u;%u;%s;%7.3f;%7.3f;%lu;%lu;%lu;%9.3f;",
uiUsersCurr,uiUsersMax,uiTablesCurr,uiTablesMax,
(leto_Date()-lStartDate)*86400+(long)(dCurrent-dStartsec),
ulOperations,ulBytesSent,ulBytesRead,uiIndexCurr,uiIndexMax,
(pDataPath ? pDataPath : ""),dMaxDayWait,(ulWait)? dWait/ulWait : 0,
ulTransAll,ulTransOK, leto_Date(), dCurrent );


source\client\letomgmn.c, со строки 289:
aInfo = hb_itemArrayNew( 17 );
for( i=1; i<=17; i++ )

16-й и 17-й элемент массива будут соответственно дата (Long) и время: целая часть - секунды, дробная часть - миллисекунды после полуночи
Если Александр не против, можно это сбросить на CVS


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


Пост N: 268
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 24.01.10 14:31. Заголовок: Паш, огромное спасиб..


Паш, огромное спасибо! :) Выручил.


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


Пост N: 269
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 24.01.10 16:22. Заголовок: Pasha пишет: Если А..


Pasha пишет:

 цитата:
Если Александр не против, можно это сбросить на CVS


Александр, Вы же не против?
Имхо, пригодится.

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


Пост N: 270
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 24.01.10 16:34. Заголовок: Народ, я еще вас пом..


Народ, я еще вас помучаю слегка, ок?

Речь о блокировках при работе с транзакциями.
Если при активной транзакции снять блокировку(ки),
то она(и) успешно снимаются, не дожидаясь выполнения
Leto_CommitTransaction(). Соответственно, когда наступает
очередь Leto_CommitTransaction(), прога вываливается по
ошибке из-за попытки писать в незаблокированную запись.
Это фича или баг? По идее-то все действия, производимые
с базой после Leto_BeginTransaction(), должны делаться в
Leto_CommitTransaction() или я не прав?


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


Пост N: 271
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 26.01.10 11:02. Заголовок: PSP пишет: Речь о б..


PSP пишет:

 цитата:
Речь о блокировках при работе с транзакциями.
Если при активной транзакции снять блокировку(ки),
то она(и) успешно снимаются, не дожидаясь выполнения
Leto_CommitTransaction(). Соответственно, когда наступает
очередь Leto_CommitTransaction(), прога вываливается по
ошибке из-за попытки писать в незаблокированную запись.
Это фича или баг? По идее-то все действия, производимые
с базой после Leto_BeginTransaction(), должны делаться в
Leto_CommitTransaction() или я не прав?


Неужто никто не расскажет?

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




Пост N: 1308
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.01.10 12:04. Заголовок: Транзакции делал Але..


Транзакции делал Александр. Попробуйте написать ему напрямую

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