On-line: Andrey, гостей 0. Всего: 1 [подробнее..]
АвторСообщение
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: 340
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 14.06.10 16:35. Заголовок: Да есть. Предположим..



 цитата:
Да есть. Предположим, я решил оформить расчет зарплаты 1-го работника как транзакцию.


Вот именно тут я с вами несогласен. По моему глубокому убеждению, транзакция предназначена исключительно для записи данных, все остальное - до и после нее. Я понимаю, что удобно просто выделить кусок кода, ничего в нем не меняя, поставить в начале и в конце begintransaction/endtransaction - и все. Но это, вообще говоря, порочный подход.
Впрочем, в самой по себе корректировке из буфера, которую вы предлагаете, ничего плохого нет. Другое дело, что я не рекомендовал бы использовать транзакции так, чтобы она могла понадобиться :).

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


Пост N: 341
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 14.06.10 16:43. Заголовок: может стоит переписа..



 цитата:
может стоит переписать оставшиеся функции на C ?


Стоит. И надо избавиться от класса HApp и, соответственно, PUBLIC oApp. Я тут переписал mt на Harbour модель и у меня теперь при вызове этих функций сервер падает, т.к. второй поток не знает переменной oApp.
Т.е. надо или при создании нового потока создавать новую oApp и читать ini файл, или, что явно лучше, хранить все данные oApp на С уровне.

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




Пост N: 1509
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 14.06.10 20:18. Заголовок: Поскольку с сервисом..


Поскольку с сервисом быстро сделать не получится, добавил в качестве примера утилиту letotray для запуска/останова сервера

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




Пост N: 1510
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.06.10 11:10. Заголовок: Что-то в сервере не ..


Что-то в сервере не нахожу функции HS_RECORDINFO
А она вызывается. Потерялась ?

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


Пост N: 342
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 15.06.10 11:48. Заголовок: Потерялась ? Без ма..



 цитата:
Потерялась ?


Без малейшего понятия.

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




Пост N: 65
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 15.06.10 12:29. Заголовок: Пример LetoDBTray MiniGUI Ext


Вот Пример для LetoDBTray на MiniGUI Ext (сб.83)
Правда я тут прицепил и NETIO :)

LETODB.EXE собран с harbour 1.0.1
RDDLETO.LIB с Харбуром из сборки MiniGUI Ext

click here<\/u><\/a>

За основу взята INET_CHECKER Григория Филатова

PS: На Tray Иконку Щелкать левой кнопкой

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


Пост N: 343
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 15.06.10 13:30. Заголовок: Добавил source/serve..


Добавил source/server/leto_2.c - ядро, основанное на Harbour mt. Пару тестов прогнал - работает. На скорость и прочее не проверял еще.
Makefile's еще не выкладывал. Если надо скомпилировать - в нужном makefile замените letocore.c на leto_2.c и hbvm.lib - на hbvmmt.lib

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


Пост N: 405
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 15.06.10 15:54. Заголовок: sashaBG, мне понрави..


sashaBG, мне понравилось. :)

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




Пост N: 1374
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.06.10 16:24. Заголовок: sashaBG пишет: Вот ..


sashaBG пишет:

 цитата:
Вот Пример для LetoDBTray на MiniGUI Ext (сб.83)



Классно ! И мне тоже понравилось.
Только как перезапускать LetoDb с другого - удаленного компа ?

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




Пост N: 66
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 15.06.10 17:13. Заголовок: Вот Так

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




Пост N: 1511
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.06.10 19:38. Заголовок: Я занимаюсь переводо..


Я занимаюсь переводом PRG --> C для OpenTable и что там еще осталось

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




Пост N: 1515
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.06.10 09:08. Заголовок: alkresin пишет: Доб..


alkresin пишет:

 цитата:
Добавил source/server/leto_2.c - ядро, основанное на Harbour mt. Пару тестов прогнал - работает. На скорость и прочее не проверял еще.
Makefile's еще не выкладывал. Если надо скомпилировать - в нужном makefile замените letocore.c на leto_2.c и hbvm.lib - на hbvmmt.lib



На первый взгляд, все работает. Но я тоже только у себя тестировал, в работу не ставил. Хотя у меня и с прежней моделью сервер (собранный с xHarbour) не падал, так что я на таком уровне протестировать не смогу. alex_on, а ваша проблема с падением сервера не исчезла ?
А как в дальнейшем предполагается использовать потоки ? Может быть, для каждого соединения создавать отдельный поток ? Так было бы логично, и с транзакцией было бы все как положено, и различные пользователи не мешали бы друг другу.

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


Пост N: 81
Зарегистрирован: 07.07.09
ссылка на сообщение  Отправлено: 17.06.10 09:46. Заголовок: Pasha пишет: alex_o..


Pasha пишет:

 цитата:
alex_on, а ваша проблема с падением сервера не исчезла ?


Пока только тестирую
Нет времени с связи с переездом.

 цитата:
Может быть, для каждого соединения создавать отдельный поток ?


Слишком накладно (если соединений более 15). У нас доходит до 150 и более, при таком кол-во на переключение потоков будет времени уходить больше, чем на обработку команд

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


Пост N: 344
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 17.06.10 12:20. Заголовок: А как в дальнейшем п..



 цитата:
А как в дальнейшем предполагается использовать потоки ? Может быть, для каждого соединения создавать отдельный поток ?


Думать надо.
Вариант с потоком на каждое соединение привлекателен своей простотой, но ... см.выше - Александр все правильно сказал. Тот же ADS использует фиксированное количество потоков, т.е. он как-то распределяет работу между ними. Скорее всего, на каждый запрос выделяется первый свободный поток, а если таковых нет, то запрос помещается в очередь. Тоже вариант, кстати.
Но я бы предпочел, чтобы все транзакции выполнялись только одним потоком - при этом реализуется то их важное свойство, название которого я забыл :). Учитывая, что время исполнения транзакции сравнительно невелико - это не фильтрация, не индексация и т.п. - то ступора не должно быть.
Для начала надо проверить и отработать механизм с hb_rddDetachArea() и hb_rddRequestArea().

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




Пост N: 1517
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.06.10 12:32. Заголовок: Транзакция (commit) ..


Транзакция (commit) и так выполняется на сервере одним запросом, так что это укладывается в схему фиксированного числа потоков. Правда, во время транзакции могут быть еще запросы на чтение данных. Для запросов на чтение требование выполнения в одном потоке критично ? Ведь их посылает один клиент, и следующий запрос не пройдет, пока не получен ответ по предыдущему.

А количество потоков можно сделать настраиваемым - как в ADS к примеру. По умолчанию 8 с возможностью перенастройки.

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


Пост N: 345
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 17.06.10 13:01. Заголовок: Транзакция (commit) ..



 цитата:
Транзакция (commit) и так выполняется на сервере одним запросом, так что это укладывается в схему фиксированного числа потоков.


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

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




Пост N: 1518
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.06.10 13:27. Заголовок: alkresin пишет: Не ..


alkresin пишет:

 цитата:
Не совсем понял, что вы имеете ввиду, но я говорил о том, чтобы все транзакции выполнялись в одном потоке, строго одна за другой, а не так, что одна транзакция в потоке А, а другая в это время параллельно в потоке Б.



Теперь понятно, я говорил о другом

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


Пост N: 82
Зарегистрирован: 07.07.09
ссылка на сообщение  Отправлено: 17.06.10 13:28. Заголовок: alkresin пишет: одн..


alkresin пишет:

 цитата:
одна транзакция в потоке А, а другая в это время параллельно в потоке Б


Имелось в виду commit или весь период от начала до конца?
Если только commit и совсем ничего не придумаем, то можно тупо блокировать потоки с транзакциями и обрабатывать commit по очереди

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


Пост N: 346
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 17.06.10 14:18. Заголовок: Имелось в виду commi..



 цитата:
Имелось в виду commit или весь период от начала до конца?


Не понял. Какой период ? Какой фрагмент leto_Transaction() вы называете commit ? Зачем раздавать транзакции по потокам и блокировать их исполнение, а не просто выполнять их по очереди в одном потоке ?

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


Пост N: 83
Зарегистрирован: 07.07.09
ссылка на сообщение  Отправлено: 17.06.10 17:51. Заголовок: alkresin пишет: Как..


alkresin пишет:

 цитата:
Какой период ? Какой фрагмент leto_Transaction() вы называете commit ?


Имелось в виду с точки зрения клиентской части в том числе, т.е. LETO_COMMITTRANSACTION()

 цитата:
Зачем раздавать транзакции по потокам и блокировать их исполнение, а не просто выполнять их по очереди в одном потоке ?


Т.е. только один поток будет выполнять транзакции?
А если все идет через транзации? Тогда в некоторых случаях мы не сможем разделить по потокам задачи.

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