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: 153
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 27.03.08 10:24. Заголовок: Да, сегодня сделаю b..


Да, сегодня сделаю build6.
Эту hb_strncpyLower я вообще убрал, заменил вызовами strncpy() и hb_strLower().
Ее, как выяснилось, нет не только в xHarbour, но и в летнем ( последнем официальном ) релизе Harbour.


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


Пост N: 154
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 27.03.08 10:52. Заголовок: Выложил исправленный..


Выложил исправленный build6

Спасибо: 0 
Профиль
gfilatov
модератор




Пост N: 747
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 27.03.08 12:13. Заголовок: alkresin пишет: Выл..


alkresin пишет:

 цитата:
Выложил исправленный build6


Выложил готовую к использованию полную сборку LetoDB build 0.6 (ровно 1000,00 КБайт) по адресу:

http://minigui.mylivepage.ru/file/?fileid=4910

LetoDB Build 6 ( 27.03.2008 )
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[-] hb_strncpyLower() has been removed, because, as it appears, it is absent in
xHarbour and current official Harbour release

[+] Added support for additional field types:
HB_FT_INTEGER
HB_FT_DOUBLE
HB_FT_FLOAT
HB_FT_DAYTIME
HB_FT_MODTIME

Александр,
А версия сервера в этой сборке осталась старой - Leto DB Server v.0.5
Также желательно иметь пример использования дополнительных типов полей

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


Пост N: 155
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 27.03.08 14:55. Заголовок: А версия сервера в э..



 цитата:
А версия сервера в этой сборке осталась старой - Leto DB Server v.0.5


Забыл поправить. Ну и ладно, на этой стадии - не страшно.

 цитата:
Также желательно иметь пример использования дополнительных типов полей


Это к Паше. Я сам дополнительные типы не использую, и другим не советую :)

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




Пост N: 877
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 27.03.08 22:49. Заголовок: Харбор поддерживает ..


Харбор поддерживает двочные поля следующих типов: (по формату dbCreate/dbStruct - name, type, len, dec)

Дата:

"D", 3
"D", 4
Дата в формате 3 или 4 байта

"I", 2 - 16-ти битное целое со знаком, тип может быть также "2"
"I", 4 - 32-ти битное целое со знаком, или тип "4"
"I", 8 - 64-ти битное целое со знаком

"8", 8, ndec - тип double (8 байт)
"B", 8, ndec - аналогично

"@", 8 - дата и время, размер 8 байт
"T", 8 - аналогично дата и время
"T", 4 - время в 4-х байтовом формате

Преимущества двоичных типов:
1. Компактная запись данных. Особых причин использовать в 21-м веке архаичный текстовый формат эштон-тейт 80-х годов прошлого века сейчас нет :)
2. Возможность открывать dbf-формат скажем vfp
Недостаток:
1. Нет возможности прямо указать размер поля для вывода на экран, поэтому используется мамксимальный размер текстового представления соответствующего типа
2. Прочие (помимо харбора) программные продукты могут не прочитать такой формат

В харборе поддержка этих типов данных появилась давно, сейчас их можно использовать в letodb
Правда, в билд 6 попали ошибки, которые я пофиксил только сейчас

Насчет примера использования - это федь фича не letodb, а харбора, примеры должны быть в tests
Если кратко:

dbCreate(cPath + 'dtest.dbf', {;
{'D3', 'D', 3, 0}, {'S1', 'C', 10, 0},;
{'D4', 'D', 4, 0}, {'S2', 'C', 10, 0},;
{'D8', 'D', 8, 0}, {'S3', 'C', 10, 0},;
{'I4', 'I', 4, 0}, {'I2', '2', 2, 0}, {'F4', '8', 8, 2} })

dbUseArea(.t.,, cPath + 'dtest')
dbAppend()
? I4
Field->D3 := Date()
Field->S1 := '11'
Field->D4 := Date() + 1
Field->S2 := '22'
Field->D8 := Date() + 2
Field->S3 := '33'
Field->I4 := 2
Field->I2 := -23
Field->F4 := 321.234
? D3, I4, F4
dbCommit()


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


Пост N: 110
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 28.03.08 07:06. Заголовок: К Филатову. Выложил ..


К Филатову.

 цитата:
Выложил готовую к использованию полную сборку LetoDB build 0.6 (ровно 1000,00 КБайт)


Сборка поддерживает xHarbour?

Спасибо: 0 
Профиль
gfilatov
модератор




Пост N: 750
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 28.03.08 11:27. Заголовок: Vlad04 пишет: Сборк..


Vlad04 пишет:

 цитата:
Сборка поддерживает xHarbour?


Не проверял

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


Пост N: 156
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 28.03.08 12:42. Заголовок: Сервер ( letodb.exe ..


Сервер ( letodb.exe ) может быть собран чем угодно, а вот rdd - rddleto.lib, конечно же, должна быть сделана той же версией компилятора ( Harbour, C ), которой вы собираете свои программы.

Спасибо: 0 
Профиль
gfilatov
модератор




Пост N: 751
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 28.03.08 13:44. Заголовок: Pasha пишет: в билд..


Pasha пишет:

 цитата:
в билд 6 попали ошибки, которые я пофиксил только сейчас


Выложил готовую к использованию исправленную сборку LetoDB build 0.6 по адресу:

http://minigui.mylivepage.ru/file/?fileid=4919

От себя добавил портированный в Minigui менеджер активных подключений сервера (вместе с исходниками) в дополенение к уже существующим консольному и оригинальному гуишному на Hwgui.



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


Пост N: 157
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 28.03.08 14:37. Заголовок: Сделал транзакции - ..


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

leto_BeginTransaction()
// Здесь, собственно, операции по изменению таблиц -
// Append, Delete, Recall, Replace
...
leto_CommitTransaction( [lUnlockAll] )

Чтобы не наделать ошибок, необходимо четко представлять себе, как это работает. Все операции по изменению таблиц ( append, delete, recall. replace ) реально осуществляются только во время leto_CommitTransaction().
Значит, если у вас:

leto_BeginTransaction()
select a
rlock()
replace xxx with 1
go top
...
leto_CommitTransaction()

то сначала исполнится go top, а после ( если блокировка прошла успешно ) - replace.
Параметр lUnlockAll у leto_CommitTransaction(), по умолчанию - .T., указывает, надо ( .T. ) автоматически разблокировать все записи после выполнения транзакции, или нет, т.е. unlock'и делать не обязательно.


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




Пост N: 878
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 28.03.08 16:22. Заголовок: alkresin пишет: Сде..


alkresin пишет:

 цитата:
Сделал транзакции



Впечатляет, особенно скорость разработки.
Скажу пару слов от себя. В отличие от традиционных транцакций, в letodb Александр реализует другой принцип, когда транзакциями занимается не сервер, а клиент
При этом во время транзакции данные на сервер не передаются совсем, а передаются только при commit transaction
Операция rollback на сервере не нужна вообще, так как неудачную транзакцию сервер и не увидит
Преимущества такого подхода видны невооруженным глазом
Есть и недостатки, куда же без них
Если на сервере реализовывать целостность ссылок, foreign key, то на сервере надо тоже предусматривать возможность отката транцакции

Александр, а может быть задействовать autoinc-поля ? Харбор их поддерживает, осталось поднять в letodb
Но тода при добавлении записей во время транзакции надо получать значения этих полей с сервера


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


Пост N: 158
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 28.03.08 17:57. Заголовок: Операция rollback на..



 цитата:
Операция rollback на сервере не нужна вообще, так как неудачную транзакцию сервер и не увидит


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

 цитата:
Если на сервере реализовывать целостность ссылок, foreign key, то на сервере надо тоже предусматривать возможность отката транцакции


Можно так же, как описано выше, предварительно проверять принятые данные, тогда rollback не понадобится.

 цитата:
Но тода при добавлении записей во время транзакции надо получать значения этих полей с сервера


Я думал, как можно делать такого рода вещи. Это ведь, чтобы использовать значения этих полей для записи в другие таблицы во время транзакции, верно ?
Можно будет реализовать функции типа
leto_fieldget( numfield, num_slot ) и leto_fieldput( numfield, num_slot ), которые во время транзакции будут включать в пакет соответствующие команды, и сервер, встретив эти команды, запишет в какой-то слот значение поля numfield в случае leto_fieldget и, соответственно, из слота в указанное поле в случае leto_fieldput.

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




Пост N: 536
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.04.08 19:35. Заголовок: gfilatov пишет: Вы..


gfilatov пишет:

 цитата:

Выложил готовую к использованию исправленную сборку LetoDB build 0.6 по адресу:


Вопрос к Григорию: почему при запуске letodb.exe нет иконки в трее и нет вообще никакого окна от него ?
Это сделано специально ?
И на чем была проведена сборка ? Т.е. если на Харборе, то будет ли нормально работать хХарбор ?
Или под свои программы на хХарборе нужно самостоятельно делать сборку letodb.exe ?


Спасибо: 0 
Профиль
gfilatov
модератор




Пост N: 759
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 05.04.08 20:23. Заголовок: Andrey пишет: почем..


Andrey пишет:

 цитата:
почему при запуске letodb.exe нет иконки в трее и нет вообще никакого окна от него ?


Так задумано разработчиками сервера, для доступа к внутренней информации сервера служит дополнительная утилита manage.exe

Andrey пишет:

 цитата:
на чем была проведена сборка ?


Использован Харбор.

Andrey пишет:

 цитата:
будет ли нормально работать хХарбор ?


alkresin пишет:

 цитата:
Сервер ( letodb.exe ) может быть собран чем угодно, а вот rdd - rddleto.lib, конечно же, должна быть сделана той же версией компилятора ( Harbour, C ), которой вы собираете свои программы.



Думаю, что ответ Александра является исчерпывающим

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




Пост N: 537
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.04.08 12:09. Заголовок: gfilatov пишет: Так..


gfilatov пишет:

 цитата:
Так задумано разработчиками сервера, для доступа к внутренней информации сервера служит дополнительная утилита manage.exe


А как узнать версию сервера ? Это же нужно периодически для замены.
Если бы сервер сидел в трее, то можно было бы вызывать его и менять настройки его. А так нельзя !!!

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




Пост N: 881
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 11.04.08 13:08. Заголовок: Как настроить на сер..


Как настроить на сервере кодовую страницу и другие параметры по умолчанию ?
Codepage необходим для вычисления upper(), например, в фильтрах
Я вижу в варианта:
1) Добавить codepage в PUSERSTRU (вместе с set exact, set dateformat etc), и отрабатывать перед каждой операцей, в которой вычисляется макрос или блок кода
2) Добавить глобальные настройки в letodb.ini

Можно реализовать оба варианта, или один из двух
Как лучше ?


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


Пост N: 159
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 11.04.08 14:25. Заголовок: Оба. Codepage, навер..


Оба. Codepage, наверное, стоит передавать на сервер один раз с intro.

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




Пост N: 884
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.04.08 16:39. Заголовок: Александр, у меня по..


Александр, у меня появилось такое предложение
Что если сделать кеширование dbSkip(-1) аналогично dbSkip(1) ?
Это нужно для оптимизации TBrowse и прочих гридов
Процедура заполнения экрана следующая: сначала вызовами dbskip(1) определяется количество строк грида, затем следует несколько вызовов dbSkip(-1),
по которым уже заполняется экран
Если сделать writelog в leto_Skip, то получается такая картина:


2565;1;1;podrp;A;
2565;1;12;podrp;A;
2565;-1;19;podrp;A;
2565;-1;18;podrp;A;
2565;-1;17;podrp;A;
2565;-1;15;podrp;A;
2565;-1;14;podrp;A;
2565;-1;13;podrp;A;
2565;-1;12;podrp;A;
2565;-1;11;podrp;A;
2565;-1;10;podrp;A;
2565;-1;9;podrp;A;
2565;-1;8;podrp;A;
2565;-1;7;podrp;A;
2565;-1;6;podrp;A;
2565;-1;5;podrp;A;
2565;-1;4;podrp;A;
2565;-1;3;podrp;A;
2565;-1;2;podrp;A;



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


Пост N: 160
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 15.04.08 18:11. Заголовок: Процедура заполнения..



 цитата:
Процедура заполнения экрана следующая: сначала вызовами dbskip(1) определяется количество строк грида, затем следует несколько вызовов dbSkip(-1),


Значит, надо. Только тогда обязательно и другую штуку надо сделать - запоминать в LETOAREA время получения кэша, и если оно превышает какую-то константу ( 1с, например, ) и таблица открыта в shared режиме, обновлять кэш. Это в любом случае надо было делать, а при кэшировании dbskip(-1) - тем более, иначе можно долго так по кэшу ходить, в то время как данные давно изменились.

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




Пост N: 885
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.04.08 20:11. Заголовок: По поводу SET_EXACT...


По поводу SET_EXACT. А в каких случаях клиент должен устанавливать его на сервере, кроме как при выполнении макросов, заданных клиентом (фильтров, индексных выражений, условий индекса) ?
Я не подумал, что установка этого флага может быть опасной для сервера, поскольку часть его кода остается на prg-уровне. Может быть, просто восстанавливать его значение после использования для фильтра/индекса ?
Я пропустил установку параметров окружения клиента для leto_Goto
Надо еще добавить в UpdateRec, поскольку во время этой операции обновляются ключи индекса

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