On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
Pasha
Администратор




Пост N: 2416
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 22.06.12 18:14. Заголовок: Leto DB Server (продолжение 8)


Немного доработал документацию к letodb

Спасибо: 0 
Профиль
Ответов - 273 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 All [только новые]


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




Пост N: 2636
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.12.12 14:13. Заголовок: SergKis пишет: Еще ..


SergKis пишет:

 цитата:
Еще можно добавить параметр .T./.F., что в skip буфере: записи с полями или ссылки на записи, участвующие в запросе и работать вместо skip через goto.



Это как раз наоборот увеличит траффик. Если в skip-буфере хранятся записи, то они выбираются из него без обращения к серверу. Если номера записей (ссылки), то каждый goto потребует запроса к серверу, что нивелирует саму идею буфера.

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




Пост N: 57
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.12.12 15:26. Заголовок: Pasha пишет:что ниве..


Pasha пишет:
 цитата:
что нивелирует саму идею буфера

Это как применять имеющиеся возможности. Если запрос к данным за несколько лет , т.е. для больших и неопределенных в объеме выборок, я бы предпочел быстро получить ссылки и потом работать по ним, а при работе с карточками, документами конечно skip-буфер. И что особенно нравится, не надо городить функции UDF, которые появившись, начинают жить вместе с проектом, но где то на сервере, и в общей куче, и хорошо если делал их сам. Функция Leto_ParseRecords() - это реальный вариант команды SELECT ... FROM ..., что радует.
Pasha пишет:

 цитата:
Тогда skip-буфер можно будет полноценно использовать при обновлении данных


Наверно и эта возможность интересна, но как она будет сочетаться с транзакциями? Сегодня мы делаем так:
- делаем выборку (select функция)
- сохраняем в MemIO
- даем для работы клиенту (Browse)
- если были изменения, в транзакции сбрасываем на сервер
как это будет выглядеть со skip буфером ?



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




Пост N: 2638
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.12.12 15:47. Заголовок: SergKis пишет: Это ..


SergKis пишет:

 цитата:
Это как применять имеющиеся возможности. Если запрос к данным за несколько лет , т.е. для больших и неопределенных в объеме выборок, я бы предпочел быстро получить ссылки и потом работать по ним, а при работе с карточками, документами конечно skip-буфер. И что особенно нравится, не надо городить функции UDF, которые появившись, начинают жить вместе с проектом, но где то на сервере, и в общей куче, и хорошо если делал их сам. Функция Leto_ParseRecords() - это реальный вариант команды SELECT ... FROM ..., что радует.



Если установить фильтр: обычный и scope, то в skip-буфер как раз будут занесены только те записи, которые ему удовлетворяют, и нет необходимости в ссылках на номера записей с их дальнейшей выборкой


 цитата:
Наверно и эта возможность интересна, но как она будет сочетаться с транзакциями?



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

Я при изменении записи хочу не очищать полностью skip-блок, а только помечать измененную запись в нем. Если потребуется выбрать запись, которая есть в буфере и не изменялась, то она будет выбрана из буфера, а если изменялась - считана вновь с сервера. Есть транзакция или нет - при этом роли не играет.

К примеру, пусть в таблице 10 записей. Как сейчас обрабатывается выражение вида:

go top
while ! eof()
if RLock()
Field->FName := 'fsdfsdfsd'
commit
unlock
endif
skip
enddo

Сейчас:
1. Считано 10 записей в буфер, текущая запись номер 1
2. Запрос на update, буфер очищается
3. Skip - считывается 9 записей
4. Запрос на update, буфер очищается
5. Skip - считывается 8 записей
...

Если изменить алгоритм:
1. Считано 10 записей в буфер, текущая запись номер 1
2. Запрос на update, буфер не очищается, в нем делается пометка для записи 1
3. Skip - берется следующая запись из буфера
4. Запрос на update, буфер не очищается, в нем делается пометка для записи 2
5. Skip - берется следующая запись из буфера
...

Транзакция только влияет на то, как выполняется update: сразу или по commit transaction

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




Пост N: 59
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.12.12 16:16. Заголовок: Pasha пишет:К пример..


Pasha пишет:
 цитата:
К примеру, пусть в таблице 10 записей. Как сейчас обрабатывается выражение вида
go top
while ! eof()
...


Я правильно понял, что если написать на эти 10 записей Browse:
go top
Browse(...)

и в функции пользователя при корректировке:
if RLock()
Field->FName := 'fsdfsdfsd'
commit
unlock
endif
...
Return REFRESH
такая схема будет работать !


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




Пост N: 2640
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.12.12 16:20. Заголовок: Работать то будет, н..


Работать то будет, но неоптимально.
До корректировки будет использоваться skip-буфер.
При корректировке он будет очищен, и вся страница browse опять будет считана с сервера.
Я хочу сделать, чтобы буфер полностью не очищался, а считывалась только измененная запись при повторном обращении к ней.

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




Пост N: 61
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.12.12 16:37. Заголовок: Pasha спасибо за объ..


Pasha спасибо за объяснения !!!

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




Пост N: 62
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.12.12 09:22. Заголовок: Паша, еще вопрос по ..


Паша, еще вопрос по skip-буферу. Сейчас некоторые справочники читаю в массивы и потом, работаю по AScan(...), со skip-буфером можно ли делать так:
select AAA; leto_SetSeekBufer(LastRec()); leto_ParseRecords(...) // справочник 1
select BBB; leto_SetSeekBufer(LastRec()); leto_ParseRecords(...) // справочник 2
потом, по надобности делать:
select AAA; LOCATE ...
select BBB; LOCATE ...
или skip-буфер один, а не для каждой области ?

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




Пост N: 2642
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.12.12 10:27. Заголовок: skip-буфер создается..


skip-буфер создается для каждой рабочей области, а seek-буфер - для каждого индекса рабочей области.
Но по умолчанию seek-буфер не создается, его надо задать.
Но это разные буфера, один для операции skip, второй - для seek

leto_ParseRecords заполняет именно skip-буфер, к seek-буферу он не имеет отношения.
Если locate хочется использовать данных skip-буфера, полученных после leto_ParseRecords, то так просто это не сделаешь.
locate первым делом сделает go top, что сразу сбросит skip-буфер и испортит весь кайф. Поэтому надо делать locate с опцией rest
В результате locate переместится на найденную запись или на eof, если запись не найдена, и последующий locate в этом skip-буфере без его сброса будет сделать затруднительно.
Поэтому предпочтительнее все-таки будет алгоритм с просмотром всего полученного skip-буфера сразу:

while ! eof()
и в цикле делать все нужные сравнения
skip
enddo

все равно этот skip буфер уже получен с сервера и находится на клиенте.

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




Пост N: 64
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.12.12 10:46. Заголовок: Pasha пишет:все равн..


Pasha пишет:
 цитата:
все равно этот skip буфер уже получен с сервера и находится на клиенте


Это все очень ЗДОРОВО !
Тогда вместо memio можно использовать следующее:
select DOKUM; leto_SetSkipBufer(100); leto_ParseRecords(...)
while ! eof()
RLock()
skip
enddo
Browse(...) // с корректировкой
если изменения были в нескольких RecNo, то
while ! eof()
commit
skip
enddo
Unlock()
Как в таком случае быть с dbAppend() ?



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




Пост N: 2643
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.12.12 11:04. Заголовок: leto_SetSkipBufer(1..


leto_SetSkipBufer(100) перед leto_ParseRecords(...) делать необязательно, так как в буфер заносятся все данные, удовлетворяющие заданному условию.
После всех операций изменения данных сейчас буфер сбрасывается. Я только собираюсь сделать другой алгоритм: не сброс буфера, а пометку в нем измененных записей, но еще это не сделал.


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




Пост N: 2644
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.12.12 11:06. Заголовок: Я так понимаю, вы хо..


Я так понимаю, вы хотите сделать что-то вроде аналога fetch для результатов sql-запроса.
Я думаю, может стоит сделать отдельный набор функций для навигации по skip-буферу: текущая позиция в буфере, перемещение вперед/назад
Но это вопрос дискуссинный. Может достаточно будет обойтись функцией, которая бы возвращала позицию текущей записи в буфере.

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




Пост N: 66
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.12.12 11:31. Заголовок: Pasha пишет:Я так по..


Pasha пишет:
 цитата:
Я так понимаю, вы хотите сделать что-то вроде аналога fetch для результатов sql-запроса

Как конечный результат - да, а как промежуточный - избавится от кода закачки справочников в массивы и работа с документами, карточками со skip-буфером вместо закачки в memio, т.е. значительно сократить код в программе.

 цитата:
Я думаю, может стоит сделать отдельный набор функций для навигации по skip-буферу

это не принципиально, если будет какой-то базовый набор функций - обвесить можно всегда.

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




Пост N: 2523
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.12.12 00:57. Заголовок: sashaBG пишет: Прив..


sashaBG пишет:

 цитата:
Привет Всем кто использует LetoDB !
Сервер LetoDB работает отлично !



sashaBG пишет:

 цитата:
Кстати в 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 не серверный процесс.



Как решились эти проблемы ?
Есть ли новая версия letodbtray ?
Если можно, то поделитесь пожалуйста.
В вашей предыдущей программе не хватает информации по Номеру версии (сборки) LetoDB и и заодно и Номера версии вашей программы.
Я так понял Вы пишите программы с LetoDB на МиниГуи.
Как МиниГуи работает с базами, какие тонкости есть при использовании МиниГуи ?

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




Пост N: 117
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 29.12.12 12:16. Заголовок: Привет


Андрей прошло много времени с того поста что в цитате , сервер сайчас работает намного лучше.
Когда у меня будет болше времени , обещаю сделать небольшой пример СЕРВЕРА(комбинация между letodb + HBNETIO + MiniGUI) и КЛИЕНТА(MiniGUI + rddleto)

В принципе нет большой разницы при работе letodb чем с другими RDD . Я постараюсь показать кое чего в примере :)


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




Пост N: 2524
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.12.12 18:54. Заголовок: sashaBG пишет: Я по..


sashaBG пишет:

 цитата:
Я постараюсь показать кое чего в примере :)


Заранее спасибо, буду ждать. С наступающим Новым Годом !

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




Пост N: 2525
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.12.12 11:06. Заголовок: Что-то не хочет запу..


Что-то не хочет запускаться letodb.exe на Win8 (32bit) из под администратора.
Версия letodb-2.09-win, пробовал из папки Bin\BCC и Bin\MinGW

D:\@TEST_LETODB\letodb.log
12/29/12 02:14:16: Error installing LetoDB service: 5
12/29/12 02:18:20: LetoDB service has had some problems: 1063
12/29/12 02:20:20: LetoDB service has had some problems: 1063
12/29/12 02:22:11: LetoDB service has had some problems: 1063
12/30/12 12:00:11: LetoDB service has had some problems: 1063
12/30/12 12:01:53: LetoDB service has had some problems: 1063

Старая версия letodb.exe (672256) 14.06.10 - запускается.
12/30/12 12:04:34: Leto DB Server has been started.



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




Пост N: 118
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 30.12.12 16:46. Заголовок: Ето потому что сервер откомпилирован как (SERVICE)


Ето потому что сервер откомпилирован как (SERVICE)

сначало сделай letodb install , потом в срвисах найди запусти и (SERVICE) LetoDB Service
после етого даже после рестарта компьютера служба будет работать
я тоже на WIN8

почитай readme_rus.txt там все написано :)

потом из командной строки или из программы можно останавливать и запускать

net start "LetoDB Service" - СТАРТ
net stop "LetoDB Service" - СТОП


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




Пост N: 2526
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.12.12 20:54. Заголовок: sashaBG пишет: снач..


sashaBG пишет:

 цитата:
сначало сделай letodb install


Да читал я доку:
Для установки и удаления службы необходимы права администратора.
Для установки службы вызовите letodb с параметром 'install':
letodb.exe install

Делаю, пишет вот это:
12/30/12 21:54:00: Error installing LetoDB service: 5


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




Пост N: 2647
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.12.12 21:17. Заголовок: Andrey пишет: Делаю..


Andrey пишет:

 цитата:
Делаю, пишет вот это:
12/30/12 21:54:00: Error installing LetoDB service: 5



Ошибка 5 - это ERROR_ACCESS_DENIED, что однозначно идентифицирует причину ошибки как недостаток прав доступа для установки службы.
Убедитесь, что есть права админа. В конце концов, создайте ярлык на "letodb install" и запустите его с правами администратора, если такое возможно под win8

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




Пост N: 2527
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.12.12 23:20. Заголовок: Pasha пишет: В кон..


Pasha пишет:

 цитата:
В конце концов, создайте ярлык на "letodb install" и запустите его с правами администратора, если такое возможно под win8


Спасибо БОЛЬШОЕ !

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