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

Ответов - 301, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All

Pasha: В команде USE / функции dbUseArea указывать параметры соединения обязательно, хотя бы затем, что программа (клиент) должна иметь возможность открывать файлы на нескольких серверах letodb Можете написать свою функцию, скажем leto_UseArea, которая добавляла бы к имени таблицы префикс - параметры соединения по умолчанию. Или сделайте свою команду USE вместо стандартной, в которой тоже поставлялись бы параметры соединения.

sashaBG: Letodb собран с xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6755) если в test_tr.prg заменить строку создания TEST.DBF на: dbCreate(cPath + 'test', {{'Code','N',2,0},{'Name','C',20,0},{'Name2','C',20,0},{'Name3','C',20,0},{'Name4','C',20,0},{'Name5','C',20,0}},, .T.) сервер падает не генерируя краш репорт это происходит после добавления {'Name5','C',20,0} с 5 пoлями работает .

Pasha: Поправил. Проверьте пожалуйста.


sashaBG: Паша Вы сделали COMMIT , последнее что у меня есть: /* $Id: Changelog,v 1.330 2010/11/18 18:45:50 ptsarenko Exp $ */

Pasha: Да, сделал. Просто коммит видно не сразу, а сюда я написал буквально в ту же минуту

sashaBG: Сделал тест под Harbour (15953) и под xHarbour (6755) РАБОТАЕТ Спасибо Паша ! Кстати в letodbtray но для моего проекта е сделал исправление : потому что Letodb падает из за постоянного подключение и отключения я в цикле по таймеру сделал възов функцию IsAlive() вместо IsConnected(): FUNCTION IsAlive() Return leto_file( _Server+"USER.DBF" ) и таким образом серввер не падает. но для общего использования она не подойдет , нельзя ли сделать на C leto_islive() ? И еще интересное наблюдение : на серверах ( я пробую на windows Serwer 2008 ) скорость работы letodb заметно ниже чем на обычном XP процессор на сервере нагружается небольше 5% а под XP и Win7 доходит до 60% и больше , наверное ето потому что letodb не серверны процес.

Pasha: Вместо проверки существования файла лучше использовать вызов: lConnected := ! Empty(Leto_MgGetInfo())

PSP: Pasha пишет: коммит видно не сразу Паша, растолкуйте, плиз.

Pasha: PSP пишет: Pasha пишет: цитата: коммит видно не сразу Паша, растолкуйте, плиз. Имеется в виду коммит на CVS. Если делать чекаут от анонимуса, то последние коммиты видно не сразу, а через некоторое время, может даже через несколько часов. А чекаут от имени девелопера видит сразу все обновления других девелоперов.

PSP: Ясно. Просто у меня че-то данные не сразу становятся видны после транзакции. Пока не понял почему...

Pasha: PSP пишет: Просто у меня че-то данные не сразу становятся видны после транзакции. Пока не понял почему... Во время транзакции или после коммита ? Если во время транзакции, то мы с Александром эту тему уже обсуждали. Вкратце: до коммита транзакция хранится на клиенте, и, если при этом получать данные с сервера, то будут переданы еще не измененные данные.

PSP: Pasha пишет: до коммита транзакция хранится на клиенте Я так подозреваю, что commit внутри транзакции не решит вопрос? :)

AlexMyr: PSP пишет: Я так подозреваю, что commit внутри транзакции не решит вопрос? :) Вот кусок с test_ta leto_BeginTransaction() select NAKL2 for i := 1 to Len( aSumm ) append blank replace NORD with n_ord, DORD with d_ord, NPROD with i, SUMMA with aSumm sumAll += aSumm next select NAKL1 append blank replace NORD with n_ord, DORD with d_ord, SUMMA with sumAll leto_CommitTransaction() т.е. начало транзакции, что-то делаем с данными, конец транзакции. А Вы как работаете с транзакциями?

Pasha: LETO_COMMITTRANSACTION может только завершить транзакцию. После коммита все данные становятся видны, но транзакция завершилась, можно только начать новую. А dbCommit во время транзакции игнорируется.

PSP: AlexMyr пишет: А Вы как работаете с транзакциями? Также. Pasha пишет: LETO_COMMITTRANSACTION может только завершить транзакцию. После коммита все данные становятся видны, но транзакция завершилась, можно только начать новую. А dbCommit во время транзакции игнорируется. Дело в том, что пока не могу отловить глюк. Он то есть, то нет. Поэтому слегка невнятно выражаюсь. Ладно, пока оставим это. Выловлю (если), - сообщу.

PSP: Короче... Попробую сформулировать :) - dbf открывается при запуске проги и остается открытым до завершения; - используются транзакции; - одна из станций производит запись в dbf; - после завершения транзакции станция, производишая запись, видит изменения, а остальные - нет; - если другая станция тоже проведет транзакцию записи в этот dbf, она увидит и "свои" и "чужие" изменения; - изменения не видны также при просмотре файла вьювером; - если все станции прекращают работу, все изменения становятся видны. Использую: Harbour 2.0.0 LetoDB: Changelog,v 1.331 2010/12/15 18:15:14 ptsarenko (проверял еще на Changelog,v 1.322 2010/09/10 10:49:01 alkresin, то же самое) LetoDB запущен под Ubuntu 10.04 Станции - Windows XP SP3 Натолкните на мысль, пожалуйста... :)

Pasha: PSP пишет: - после завершения транзакции станция, производишая запись, видит изменения, а остальные - нет; Чтобы остальные станции увидели изменение, надо, чтобы они перечитали изменившиеся данные, т.е. сделали goto(recno()) или skip(0)

PSP: Pasha пишет: Чтобы остальные станции увидели изменение, надо, чтобы они перечитали изменившиеся данные, т.е. сделали goto(recno()) или skip(0) "Вот оно чё, Михалыч, вот оно чё..." :) Спасибо, Паш.

Pasha: PSP пишет: "Вот оно чё, Михалыч, вот оно чё..." :) Дык этот же момент надо учитывать и для файл-сервера, без leto Если одна станция сделала коммит, остальные его увидят, когда перечитают файл Тоже самое касается и sql. Это стандартый вопрос: почему после транзакции другие клиенты ее не видят. И на это есть стандартный ответ: представьте, что после каждой транзакции sql-сервер вдруг начнет плеваться данными на всех подключенных в этот момент клиентов... это же нехорошо ? Вот поэтому клиенты должны сами, того, как тот Магомед, идти к горе.

PSP: А как объяснить, что вьювер тоже не видит изменений?



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