Автор | Сообщение |
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 на Харборе, ... и вообще все в наших руках :). Кто хочет участвовать в разработке, тестировании - пишите.
| |
|
Ответов - 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.
| |
|
alkresin
|
| moderator
|
Пост N: 154
Зарегистрирован: 06.07.06
|
|
Отправлено: 27.03.08 10:52. Заголовок: Выложил исправленный..
Выложил исправленный build6
| |
|
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 Также желательно иметь пример использования дополнительных типов полей
| |
|
alkresin
|
| moderator
|
Пост N: 155
Зарегистрирован: 06.07.06
|
|
Отправлено: 27.03.08 14:55. Заголовок: А версия сервера в э..
цитата: | А версия сервера в этой сборке осталась старой - Leto DB Server v.0.5 |
| Забыл поправить. Ну и ладно, на этой стадии - не страшно. цитата: | Также желательно иметь пример использования дополнительных типов полей |
| Это к Паше. Я сам дополнительные типы не использую, и другим не советую :)
| |
|
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()
| |
|
Vlad04
|
| постоянный участник
|
Пост N: 110
Зарегистрирован: 13.10.05
|
|
Отправлено: 28.03.08 07:06. Заголовок: К Филатову. Выложил ..
К Филатову. цитата: | Выложил готовую к использованию полную сборку LetoDB build 0.6 (ровно 1000,00 КБайт) |
| Сборка поддерживает xHarbour?
| |
|
gfilatov
|
| модератор
|
Пост N: 750
Зарегистрирован: 25.05.05
|
|
Отправлено: 28.03.08 11:27. Заголовок: Vlad04 пишет: Сборк..
Vlad04 пишет: цитата: | Сборка поддерживает xHarbour? |
| Не проверял
| |
|
alkresin
|
| moderator
|
Пост N: 156
Зарегистрирован: 06.07.06
|
|
Отправлено: 28.03.08 12:42. Заголовок: Сервер ( letodb.exe ..
Сервер ( letodb.exe ) может быть собран чем угодно, а вот rdd - rddleto.lib, конечно же, должна быть сделана той же версией компилятора ( Harbour, C ), которой вы собираете свои программы.
| |
|
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.
| |
|
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'и делать не обязательно.
| |
|
Pasha
|
| Администратор
|
Пост N: 878
Зарегистрирован: 23.05.05
|
|
Отправлено: 28.03.08 16:22. Заголовок: alkresin пишет: Сде..
alkresin пишет: Впечатляет, особенно скорость разработки. Скажу пару слов от себя. В отличие от традиционных транцакций, в letodb Александр реализует другой принцип, когда транзакциями занимается не сервер, а клиент При этом во время транзакции данные на сервер не передаются совсем, а передаются только при commit transaction Операция rollback на сервере не нужна вообще, так как неудачную транзакцию сервер и не увидит Преимущества такого подхода видны невооруженным глазом Есть и недостатки, куда же без них Если на сервере реализовывать целостность ссылок, foreign key, то на сервере надо тоже предусматривать возможность отката транцакции Александр, а может быть задействовать autoinc-поля ? Харбор их поддерживает, осталось поднять в letodb Но тода при добавлении записей во время транзакции надо получать значения этих полей с сервера
| |
|
|
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.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 536
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.04.08 19:35. Заголовок: gfilatov пишет: Вы..
gfilatov пишет: цитата: | Выложил готовую к использованию исправленную сборку LetoDB build 0.6 по адресу: |
| Вопрос к Григорию: почему при запуске letodb.exe нет иконки в трее и нет вообще никакого окна от него ? Это сделано специально ? И на чем была проведена сборка ? Т.е. если на Харборе, то будет ли нормально работать хХарбор ? Или под свои программы на хХарборе нужно самостоятельно делать сборку letodb.exe ?
| |
|
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 ), которой вы собираете свои программы. |
| Думаю, что ответ Александра является исчерпывающим
| |
|
Andrey
|
| постоянный участник
|
Пост N: 537
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.04.08 12:09. Заголовок: gfilatov пишет: Так..
gfilatov пишет: цитата: | Так задумано разработчиками сервера, для доступа к внутренней информации сервера служит дополнительная утилита manage.exe |
| А как узнать версию сервера ? Это же нужно периодически для замены. Если бы сервер сидел в трее, то можно было бы вызывать его и менять настройки его. А так нельзя !!!
| |
|
Pasha
|
| Администратор
|
Пост N: 881
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.04.08 13:08. Заголовок: Как настроить на сер..
Как настроить на сервере кодовую страницу и другие параметры по умолчанию ? Codepage необходим для вычисления upper(), например, в фильтрах Я вижу в варианта: 1) Добавить codepage в PUSERSTRU (вместе с set exact, set dateformat etc), и отрабатывать перед каждой операцей, в которой вычисляется макрос или блок кода 2) Добавить глобальные настройки в letodb.ini Можно реализовать оба варианта, или один из двух Как лучше ?
| |
|
alkresin
|
| moderator
|
Пост N: 159
Зарегистрирован: 06.07.06
|
|
Отправлено: 11.04.08 14:25. Заголовок: Оба. Codepage, навер..
Оба. Codepage, наверное, стоит передавать на сервер один раз с intro.
| |
|
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;
| |
|
alkresin
|
| moderator
|
Пост N: 160
Зарегистрирован: 06.07.06
|
|
Отправлено: 15.04.08 18:11. Заголовок: Процедура заполнения..
цитата: | Процедура заполнения экрана следующая: сначала вызовами dbskip(1) определяется количество строк грида, затем следует несколько вызовов dbSkip(-1), |
| Значит, надо. Только тогда обязательно и другую штуку надо сделать - запоминать в LETOAREA время получения кэша, и если оно превышает какую-то константу ( 1с, например, ) и таблица открыта в shared режиме, обновлять кэш. Это в любом случае надо было делать, а при кэшировании dbskip(-1) - тем более, иначе можно долго так по кэшу ходить, в то время как данные давно изменились.
| |
|
Pasha
|
| Администратор
|
Пост N: 885
Зарегистрирован: 23.05.05
|
|
Отправлено: 15.04.08 20:11. Заголовок: По поводу SET_EXACT...
По поводу SET_EXACT. А в каких случаях клиент должен устанавливать его на сервере, кроме как при выполнении макросов, заданных клиентом (фильтров, индексных выражений, условий индекса) ? Я не подумал, что установка этого флага может быть опасной для сервера, поскольку часть его кода остается на prg-уровне. Может быть, просто восстанавливать его значение после использования для фильтра/индекса ? Я пропустил установку параметров окружения клиента для leto_Goto Надо еще добавить в UpdateRec, поскольку во время этой операции обновляются ключи индекса
| |
|
Ответов - 325
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
All
[только новые]
|
|
|