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 
Профиль
Ответов - 325 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 All [только новые]


alkresin
moderator


Пост N: 83
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 08.02.08 14:16. Заголовок: Добавляем. По безопа..


Добавляем. По безопасности - важно то, что эти операции можно сделать только с помощью Leto, т.е.:
1) если это предусмотрел автор программы ( а не рядовой user, не знающий куда деть руки ), а он должен знать, что делает
2) эти операции не опаснее, чем zap, например
3) авторизацию на сервере мы, так или иначе, сделаем - и там в опциях можно будет указать, например, что на удаление/переименование имеет право только админ.

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


Пост N: 403
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 08.02.08 15:18. Заголовок: alkresin пишет: Доб..


alkresin пишет:

 цитата:
Добавляем. По безопасности - важно то, что эти операции можно сделать только с помощью Leto, т.е.:
1) если это предусмотрел автор программы ( а не рядовой user, не знающий куда деть руки ), а он должен знать, что делает
2) эти операции не опаснее, чем zap, например
3) авторизацию на сервере мы, так или иначе, сделаем - и там в опциях можно будет указать, например, что на удаление/переименование имеет право только админ.



То что все операции делаются с помощью серверов - это понятно.
По первому пункту - знать то он должен, а на практике..

Если мы считаем операцию ZAP небезопасной - мы можем на сервере ее и не выполнять. Закрыть таблицу, переименовать в какой-то dbf.bak и создать новую с именем и структурой прежней - быстрый бэкап, или более медленный - сохранить каким либо образом все данные и сделать ZAP.

Только я вот не понял - в существующем варианте letodb допускает конкурирующих юзерей или нет?

По третьему пункту - если этим никто еще не занимается, то я могу внести на рассмотрение свои предложения, правда только после того как решу проблему гриппа..


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




Пост N: 807
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 08.02.08 17:40. Заголовок: Петр пишет: По трет..


Петр пишет:

 цитата:
По третьему пункту - если этим никто еще не занимается



Я не занимаюсь

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


Пост N: 84
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 08.02.08 19:36. Заголовок: Только я вот не поня..



 цитата:
Только я вот не понял - в существующем варианте letodb допускает конкурирующих юзерей или нет?


Да.

 цитата:
По третьему пункту - если этим никто еще не занимается, то я могу внести на рассмотрение свои предложения,


Ждем.

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




Пост N: 808
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 08.02.08 21:01. Заголовок: Мне кажется, надо пе..


Мне кажется, надо переделать delete/recall. Сейчас эта команда сразу передается на сервер и немедленно выполняется
Надо это делать только при putRec, т.е добавить к этой команде еще один параметр.
При нынешней схеме может произойти такая ситуация:

dbAppend() // команда на сервер еще не передана
dbDelete() // команда на сервер сразу передана и фактически не отработана, поскольку запись еще не добавлена
...
dbCommit() // добавлена запись, у которой не установлен флаг deleted()


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




Пост N: 809
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 08.02.08 22:14. Заголовок: Надо вводить что-то ..


Надо вводить что-то вроде Connection Id. Каждый раз передавать ip-адрес и порт неудобно

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


Пост N: 406
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 08.02.08 22:45. Заголовок: Pasha пишет: Надо в..


Pasha пишет:

 цитата:
Надо вводить что-то вроде Connection Id. Каждый раз передавать ip-адрес и порт неудобно



Не знаю, что Вы конкретно имели ввиду, но в принципе согласен
что-то вроде

CREATE CONNECTION mycon USER "user" PASSWORD "password"

IF mycon:ErrorCode() != 0
? "Извините, сервер недоступен"
Return 1
ENDIF

USE table1 NEW CONNECTION mycon
USE table2 NEW CONNECTION mycon

тогда и с авторизацией меньше хлопот буде и обработку ошибок легче будет делать,
и проверку "живо" ли соеденение перед операциями с таблицей после длительного простоя или во время длительной операции можно будет организовать..




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




Пост N: 810
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 08.02.08 23:43. Заголовок: Да, так было бы лучш..


Да, так было бы лучше всего. Тем более параметр nConnection предусмотрен в dbUse/dbCreate
Только он должен быть числовой

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


Пост N: 407
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 08.02.08 23:57. Заголовок: Некоторые несущественные замечания


Увидя в коде сл.конструкцию и зная об отличии в реализации Adel Harbour и xHarbour

сначала заменил

 цитата:
j := Ascan( HSTable():aTables,{|o|o==oTable} )
Adel( HSTable():aTables,j )
Asize( HSTable():aTables,Len(HSTable():aTables)-1 )


на

 цитата:
j := Ascan( HSTable():aTables,{|o|o==oTable} )
#ifdef __XHARBOUR__
Adel( HSTable():aTables,j, .t. )
#else
#include "hbver.h"
#if HB_VER_MAJOR >= 1
Hb_Adel( HSTable():aTables,j, .t. )
#else
Adel( HSTable():aTables,j )
Asize( HSTable():aTables,Len(HSTable():aTables)-1 )
#endif
#endif



Потом решил, что это громоздко и по принципу leto_at написал leto_adel, потом опять подумал и решил, что лучше будет использовать leto_ScanAndDel


 цитата:
HB_FUNC( LETO_SCANANDDEL )
{
PHB_ITEM pArray = hb_param( 1, HB_IT_ARRAY );
PHB_ITEM pValue = hb_param( 2, HB_IT_ANY );

if( pArray && pValue )
{
ULONG ulStart = hb_parnl( 3 );
ULONG ulCount = hb_parnl( 4 );
long lPos;

lPos = hb_arrayScan( pArray, pValue,
ISNUM( 3 ) ? &ulStart : NULL,
ISNUM( 4 ) ? &ulCount : NULL,
FALSE );

if (lPos > 0 && hb_arrayDel(pArray, lPos) )
{
hb_arraySize( pArray, hb_arrayLen( pArray ) - 1 );
}
}
hb_itemReturn( pArray );
}






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


Пост N: 85
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 09.02.08 10:33. Заголовок: Мне кажется, надо пе..



 цитата:
Мне кажется, надо переделать delete/recall. Сейчас эта команда сразу передается на сервер и немедленно выполняется
Надо это делать только при putRec, т.е добавить к этой команде еще один параметр.


Да, пожалуй.

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


Пост N: 86
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 09.02.08 10:49. Заголовок: Что-то вроде CREATE ..


Что-то вроде CREATE CONNECTION так или иначе надо вводить, чтобы указать логин/пароль, если это требует сервер.
А use/create с использованием ID можно ввести опционально, оставив и существующую схему, поскольку она ( существующая ) позволяет оставить код программы без изменений. Я, честно говоря, не вижу проблем с ее использованием. Если пути к файлам хранятся в переменных, инициализируемых в начале программы, как оно по хорошему и должно быть, а не указываются непосредственно в команде USE, то для программиста это изменение пути будет практически незаметно.

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


Пост N: 87
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 09.02.08 10:49. Заголовок: Петр пишет: Увидя в..


Петр пишет:

 цитата:
Увидя в коде сл.конструкцию и зная об отличии в реализации Adel Harbour и xHarbour


А в чем эта разница ? Я не в курсе.

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


Пост N: 408
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 09.02.08 11:21. Заголовок: Дело в том, что xHar..


Дело в том, что xHarbour за счет введения третьего параметра позволяет заменить конструкцию

Adel( array, pos )
Asize( array, Len(array)-1 )

на Adel( array, pos, .t. )

третий параметр т.н. <lShrink>
Optionally, a logical value can be specified. If .T. (true) is passed, the length of the array is reduced by one element. The default value is .F. (false) leaving the number of elements in <aArray> unchanged

Это удобно и выполняется быстрее.

В Harbour c недавного времени тоже есть подобная функция - она называется Hb_Adel. Сначала она появилась в xhb.lib, а потом ввиду очевидных преимуществ попала и в core.








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


Пост N: 409
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 09.02.08 12:03. Заголовок: alkresin пишет: Что..


alkresin пишет:

 цитата:
Что-то вроде CREATE CONNECTION так или иначе надо вводить, чтобы указать логин/пароль, если это требует сервер.
А use/create с использованием ID можно ввести опционально, оставив и существующую схему, поскольку она ( существующая ) позволяет оставить код программы без изменений. Я, честно говоря, не вижу проблем с ее использованием.



hSocket := hb_IPConnect( "127.0.0.1", 2812 )
IF hb_IPErrorCode() != 0
?LETO_FILE("//127.0.0.1:2812/c:/windows/*.*")
ENDIF
hSocket := NIL

Выполнение этого кода меня не порадовало.

Сервер обязательно должен требовать авторизацию, другое дело можно позволить анонимный вход с учетной записью по умолчанию и с соответствующими ей правами.

Я понимаю, что Вы стремитесь к минимизации переделок существующего кода и это очень хорошо.
Но код все равно придется переделывать, добавлять же нужно
REQUEST LETO
RDDSETDEFAULT( "LETO" )

почему не добавить еще и

CREATE CONNECTION cn USER "user" PASSWORD "password"

IF cn:ErrorCode() != 0
? "Извините, сервер недоступен"
Return 1
ENDIF

OPEN DATABASE base CONNECTION cn
IF base:ErrorCode() != 0
? "Извините, не удалось открыть базу "
Return 1
ENDIF

USE table1 NEW
USE table2 NEW [DATABASE base]
..

К тому же, на мой взгяд
DataPath в letodb.ini не может быть опциональным, как и IndexPath.
И leto_file() должна быть привязана к DataPath/IndexPath

Да и сам letodb.ini не может не существовать..


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


Пост N: 410
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 09.02.08 12:42. Заголовок: + added LETO_FER..



 цитата:
+ added LETO_FERASE(), LETO_FRENAME(), LETO_FERROR() functions



Тест успешно пройден

hSocket := hb_IPConnect( "127.0.0.1", 2812 )
IF hb_IPErrorCode() != 0
?LETO_FILE("//127.0.0.1:2812/c:/windows/*.*")
?LETO_FERASE("//127.0.0.1:2812/c:/windows/system.ini")
ENDIF
hSocket := NIL



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




Пост N: 811
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 09.02.08 13:26. Заголовок: Петр пишет: почему ..


Петр пишет:

 цитата:
почему не добавить еще и

CREATE CONNECTION cn USER "user" PASSWORD "password"



Этой функции можно было бы передавать еще используемый rdd на сервере: dbfcdx/dbfntx/etc

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




Пост N: 812
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 09.02.08 13:27. Заголовок: Петр пишет: Тест ус..


Петр пишет:

 цитата:
Тест успешно пройден

hSocket := hb_IPConnect( "127.0.0.1", 2812 )
IF hb_IPErrorCode() != 0
?LETO_FILE("//127.0.0.1:2812/c:/windows/*.*")
?LETO_FERASE("//127.0.0.1:2812/c:/windows/system.ini")
ENDIF
hSocket := NIL



:) что тут еще сказать
:)

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




Пост N: 813
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 09.02.08 13:28. Заголовок: добавил ordCondSet()..


добавил ordCondSet()

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




Пост N: 814
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 09.02.08 13:31. Заголовок: Какие будут предложе..


Какие будут предложения по безопасности ? Давать права на опасные операции на ккаталоги БД или отдельно на таблицы/индексы ?

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


Пост N: 88
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 09.02.08 13:49. Заголовок: Потом решил, что это..



 цитата:
Потом решил, что это громоздко и по принципу leto_at написал leto_adel, потом опять подумал и решил, что лучше будет использовать leto_ScanAndDel


Дело хорошее, но надо еще подумать :). Наученный горьким опытом, я заглянул в сырцы xHarbour и обнаружил, что там в hb_arrayScan() уже 6 параметров:

ULONG HB_EXPORT hb_arrayScan( PHB_ITEM pArray, PHB_ITEM pValue, ULONG * pulStart, ULONG * pulCount, BOOL bExact, BOOL bAllowChar )

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