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


Pasha
Администратор




Пост N: 857
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.03.08 12:14. Заголовок: Лучше действительно ..


Лучше действительно имена тегов хранить в LETOTAG
А для исключения излишней передачи сохранять текущий индекс в AREASTRU,
и не передавать его в других командах. а только в dbSetOrder()

Пересматриваю код
Во 1-х, я немного ошибся в hs_goto:
Надо написать для go top

hs_setscope( nUserStru, nId, .t.)
dbGoTop()
IF oArea:bFilter != Nil
hs_setscope( nUserStru, nId, .f.)
DO WHILE !Eof() .AND. !Eval(oArea:bFilter)
dbSkip(1)
ENDDO
hs_clearscope(nUserStru, nId, .f.)
ENDIF
hs_clearscope(nUserStru, nId, .t.)

и для bottom тоже, поправлю

И у меня сомнения по поводу кода в hs_skip:

dbSkip( nSkip )
IF oArea:bFilter != Nil
IF nSkip > 0
DO WHILE !Eof() .AND. !Eval(oArea:bFilter)
dbSkip(1)
ENDDO
ELSE
DO WHILE !Bof() .AND. !Eval(oArea:bFilter)
dbSkip(-1)
ENDDO
ENDIF
ENDIF

Если nSkip > 1 и установлен bFilter, то этот код отработает неправильно


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




Пост N: 858
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.03.08 12:20. Заголовок: Уже почти весь код п..


Уже почти весь код перенесен на С, осталось совсем немного
Открытие/создание, и навигация

Я перепишу hs_goto, ok ?
Там можно немного оптимизировать go top/ go bottom с установленным filter, используя dbOrderInfo(SKIPEVAL,,, bFilter)/dbOrderInfo(SKIPEVALBACK,,, bFilter)
Когда я у себя в программах стал использовать эту функцию, выигрыш в производительности был существенным, в разы в некоторых случаях

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




Пост N: 859
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.03.08 12:24. Заголовок: Кстати, SKIPEVAL мож..


Кстати, SKIPEVAL можно использовать и в hs_skip

if bFilter # nil
for i := 1 to nSkip
dbOrderInfo(SKIPEVAL,,, bFilter)
next
endif


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


Пост N: 138
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 21.03.08 14:15. Заголовок: Уже почти весь код п..



 цитата:
Уже почти весь код перенесен на С, осталось совсем немного
Открытие/создание, и навигация


Некоторые вещи, в т.ч. открытие/создание, скорее всего, придется оставить на prg - т.к. на C уровне обработки ошибок ( аналога BEGIN SEQUENCE ... END SEQUENCE ) нет.

 цитата:
Я перепишу hs_goto, ok ?


Ok.

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




Пост N: 860
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.03.08 15:14. Заголовок: alkresin пишет: на ..


alkresin пишет:

 цитата:
на C уровне обработки ошибок ( аналога BEGIN SEQUENCE ... END SEQUENCE ) нет



Не получится обрушение сервера при разных нестандартных ситуациях типа
"data corruption" ? В этом случае надо как-то перехватывать такие ошибки

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


Пост N: 139
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 21.03.08 15:24. Заголовок: Такие нестандартные ..


Такие нестандартные ситуации случаются при реальном повреждении файлов, которые, по идее, использование сервера как раз и должно исключить. А то ведь есть и такие ошибки, которые не обрабатываются и на prg уровне - всякие internal error - особенно с индексами.

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




Пост N: 861
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.03.08 16:01. Заголовок: Может стоит сделать ..


Может стоит сделать вызов ParseCommand() на prg-уровне внутри BEGIN SEQUENCE/END ?


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




Пост N: 862
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.03.08 16:11. Заголовок: Надо обязательно пер..


Надо обязательно перехватывать data width error в leto_UpdateRec


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




Пост N: 863
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.03.08 17:01. Заголовок: Извиняюсь, так и дел..


Извиняюсь, так и делается. То есть, такая ситуация блокируется уже на клиенте

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




Пост N: 864
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.03.08 23:21. Заголовок: Переписал на C hs_go..


Переписал на C hs_goto
DBOI_SKIPEVAL не стал использовать: во 1-х, он реализован не на уровне dbfRdd, а выше - для dbfcdx/dbfntx
Во 2-х: выигрыш в производительности в своих программах я получил фактически за счет перевода кода в цикле по workarea на С-уровень, что и так уже сделано
В hs_skip все в порядке, это меня бес попутал :)

Как поступим с TagName ? Сейчас имя тега передается при каждой операции навигации по таблице
Может действительно передавать его на сервер только в letoOrderListFocus ? И на сервере проблема с поиском тега будет решена


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


Пост N: 140
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 22.03.08 10:09. Заголовок: Как поступим с TagNa..



 цитата:
Как поступим с TagName ? Сейчас имя тега передается при каждой операции навигации по таблице
Может действительно передавать его на сервер только в letoOrderListFocus ?


Вопрос неоднозначный. Сам акт приема-передачи ip-пакета отнимает сравнительно немалое время, поэтому, скажем, один пакет длиной 100 байт передается существенно быстрее, чем 2 по 50. Обычно ordSetFocus() вызывается не так часто, но это происходит, например, почти при каждом открытии файла - так что если передавать пакет при ordSetFocus(), то файлы будут открываться медленнее.

 цитата:
И на сервере проблема с поиском тега будет решена


Она будет просто перенесена из одной функции в другую. При обработке ordSetFocus() все равно придется это делать.

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




Пост N: 865
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 22.03.08 11:00. Заголовок: alkresin пишет: Воп..


alkresin пишет:

 цитата:
Вопрос неоднозначный. Сам акт приема-передачи ip-пакета отнимает сравнительно немалое время, поэтому, скажем, один пакет длиной 100 байт передается существенно быстрее, чем 2 по 50.



Кстати, о птичках :)
Я заметил, что закрытие БД выполняется довольно медленно, поскольку при dbCloseAll() передается отдельный пакет close для каждой workarea. Можно ли сделать закрытие всех областей letodb одним пакетом ?

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




Пост N: 866
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 22.03.08 11:13. Заголовок: Тогда добавляем имя ..


Тогда добавляем имя тега в LETOTAG ? Поскольку в пакетах goto/skip/seek имя текушего тега уже передается, для поиска данных тега на сервере этой информации будет достаточно

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


Пост N: 141
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 22.03.08 17:47. Заголовок: Можно ли сделать зак..



 цитата:
Можно ли сделать закрытие всех областей letodb одним пакетом ?


Если написать leto_dbCloseAll() и предложить использовать ее вместо dbcloseall()

 цитата:
Тогда добавляем имя тега в LETOTAG ?


Да

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




Пост N: 867
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 22.03.08 21:59. Заголовок: Переписал на C hs_sk..


Переписал на C hs_skip, переделал поиск тега на сервере по имени
По поводу dbCloseAll:
Сделать в leto_dbCloseAll() закрытие только "своих" областей, а затем вызовом dbCloseAll() закрывать остальные ?
Правда, может быть случай, когда клиент подключен боее чем к одному серверу


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


Пост N: 142
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 22.03.08 22:45. Заголовок: Переписал на C hs_sk..



 цитата:
Переписал на C hs_skip, переделал поиск тега на сервере по имени


Отлично! А почему в mail list не шлете changelog ?

 цитата:
Сделать в leto_dbCloseAll() закрытие только "своих" областей, а затем вызовом dbCloseAll() закрывать остальные ?


Не понял. Каких "своих" ? А какие еще закрывает клиентская программа при помощи dbCloseAll() ?

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




Пост N: 868
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 22.03.08 23:33. Заголовок: Я все свои изменения..


Я все свои изменения отправляю в mail list. Возврата нет. Они не проходят ?
Проверил - у меня в адресной книге стотит letodb-developers-bounces@lists.sourceforge.net
Наверное надо Letodb-developers@lists.sourceforge.net
Эх, Семен Семеныч
Отправил тест.

Насчет своих, я имел в виду, что могут быть открыты workarea и с другими rdd


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




Пост N: 869
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 22.03.08 23:34. Заголовок: Теперь получил свое ..


Теперь получил свое же письмо

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




Пост N: 870
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.03.08 00:30. Заголовок: Что-то я смотрю, уст..


Что-то я смотрю, установка set deleted не срабатывает
Ставлю set deleted on, и удаленные записи видны. Не пойму, в чем дело


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




Пост N: 871
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.03.08 10:12. Заголовок: Увидел Может добавит..


Увидел
Может добавить еще один байт установок к командам seek/skip/goto для флага deleted и убрать bDeletedOn из USERSTRU ?


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