Автор | Сообщение |
|
| постоянный участник
|
Пост N: 1212
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.04.10 00:32. Заголовок: Совместно открытые файлы. Использование блокировки индекса на чтение.
Pasha: 3. Выборки из файла можно выполнять так: dbOrderInfo(DBOI_READLOCK,,, .t.) dbSeek(..) while ... if ... endif skip enddo dbOrderInfo(DBOI_READLOCK,,, .f.) Это блокировка индекса на чтение. Она выполняется всегда при любой навигавии по таблице, т.е. в операциях seek/skip/goto Если выборка состоит из 100 строк, то блокировка/разблокировка будет выполняться 100 раз, и выборка будет тормозить. Если блокировку сделать перед выборкой, то выборка будет выполняться быстро. Но злоупотреблять READLOCK не стоит, поскольку на время блокировки эти данные недоступны для чтения с других станций. А как будет выглядеть эта недоступность ? Будет вылет программы или еще чего нибудь ? Т.е. хотелось бы что другой юзер при блокировки получал бы сообщение типа: "Данные заняты ! Подождите, пока идет расчет !" . Это придется делать самостоятельно или можно получить какую-нибудь через функцию: блокирован индекс или нет ?
|
|
|
Ответов - 8
[только новые]
|
|
|
| Администратор
|
Пост N: 1392
Зарегистрирован: 23.05.05
|
|
Отправлено: 08.04.10 09:28. Заголовок: На время блокировки ..
На время блокировки на другой станции будет задержка при навигации по той же таблице. Это задержка в любом случае есть, так как блокировка на чтение выполняется всегда. Сообщение выдавать не получится. Меня тоже, когда пришлось использовать READLOCK, беспокоил вопрос, насколько такой способ будет мешать рабете других станций. Конечно, надо выполнять определенные правила. Выборка с READLOCK должна быть простой, т.е. внутри нее не должно быть выборок из других таблиц. Ну без фанатизма конечно, если выбирается очеть большой обьем данных, READLOCK использовать не надо. Я делал тесты. Но в реальной работе пользователей неблагопиятных последствий не было.
|
|
|
|
| постоянный участник
|
Пост N: 1213
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.04.10 10:02. Заголовок: Спасибо БОЛЬШОЕ Pash..
Спасибо БОЛЬШОЕ Pasha ! Буду пробовать !
|
|
|
|
| Администратор
|
Пост N: 1394
Зарегистрирован: 23.05.05
|
|
Отправлено: 08.04.10 12:47. Заголовок: Я неправильно написа..
Я неправильно написал. Если индекс заблокирован для чтения, то для других рабочих станций будет недоступна операция записи по индексу, а не чтение.
|
|
|
|
| |
Пост N: 1566
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.04.10 13:00. Заголовок: что то я не вижу пра..
что то я не вижу практического применения READLOCK в сетевой задаче , коли для других рабочих станций будет недоступна операция записи по индексу. для локальной задачи это то что надо.
|
|
|
|
| Администратор
|
Пост N: 1395
Зарегистрирован: 23.05.05
|
|
Отправлено: 08.04.10 13:12. Заголовок: В момент чтения данн..
В момент чтения данных с одной р.с. операция записи на другой в любом случае недоступна. Речь идет о том, что на блокировку/снятие блокировки тратится время, и множество таких блокировок/снятий замедляет работу Если блокировать один раз перед выборкой, то выборка выполняется намного быстрее
|
|
|
|
| |
Пост N: 1567
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.04.10 13:18. Заголовок: То есть если в этом ..
То есть если в этом режиме кто то строит отчет который строится (условно) 1 минуту , это значит что на другой рабочей станции использующей те же базы и индексы пользователь не сможет провести какой то документ (пишущий в те же базы) в течении 1 минуты ?
|
|
|
|
| Администратор
|
Пост N: 1396
Зарегистрирован: 23.05.05
|
|
Отправлено: 08.04.10 13:25. Заголовок: Если поставить такую..
Если поставить такую блокировку на чтение, то да Но речь идет о блокировке индекса
|
|
|
|
| |
Пост N: 1568
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.04.10 15:07. Заголовок: Pasha пишет: Но реч..
Pasha пишет: цитата: | Но речь идет о блокировке индекса |
| То есть база обновится а индекс нет до тех пор пока станция его залочившая не даст dbOrderInfo(DBOI_READLOCK,,, .f.) , так ?
|
|
|
|