Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » InterBase и FireBird: вопросы по работе и их решение

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104

Открыть новую тему     Написать ответ в эту тему

eddoc



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Комрады, вопрос по проектированию.
 
Для служебных целей необходимо записывать каждому юзеру время дисконнекта с базой. Где это лучше делать: на сервере в триггере или на клиенте?  
 
Хотелось бы учитывать и ситуацию с падением сервера или элементарным обрывом коннекта.
 

 
Shaman2

Цитата:
Только не новичкам. Нормального ответа на данном форуме дождаться это что-то. ИМХО

Это вы зря. Если человек букварь осилил, то в худшем случае тынцом направят в нужную сторону, потому что 90% типичных вопросов находятся элементарным поиском по форуму.

Всего записей: 328 | Зарегистр. 25-11-2007 | Отправлено: 16:20 27-07-2012
SevereK20

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Для служебных целей необходимо записывать каждому юзеру время дисконнекта с базой. Где это лучше делать: на сервере в триггере или на клиенте?  

Ни на клиенте, ни на сервере нельзя гарантировать фиксацию отключения пользователя.

Всего записей: 7699 | Зарегистр. 07-05-2010 | Отправлено: 16:36 27-07-2012
eddoc



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SevereK20
А конкретнее?

Всего записей: 328 | Зарегистр. 25-11-2007 | Отправлено: 01:20 28-07-2012
SevereK20

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
eddoc
Я не большой спец, но задавалася уже этим вопросом.
Пример 1-на клиентском приложении при закрытии программы делать инсерт в лог о том, что пользователь покинул бд. Понятное дело, что при обрывах сети, аварийном завершении работы и т.д. метод не сработает.  
Собственно говоря когда я писал я опирался на это сообщение (с другого форума)

Цитата:
1. Добавил по одному полю (назвал его Locker) к каждому документу (т.е. к соотв. таблице).
2. Создал простенькую табличку LockDoc с одним полем DocNum. Его же сделал ПК.
Тут надо, правда, отметить, что нумерация (ПК) у всех типов документов у меня в базе сквозная, т.е. нет никаких (каких бы то ни было) документов с одним номером. Но, думаю, это преодолимо.
3. При начале редактирования первым делом пытаемся вставить в таблицу LockDoc номер редактируемого документа. Если такой номер там уже есть, (это значит, что его кто-то уже редактирует), то получим нарушение ограничения ПК. Обрабатываем это исключение на клиенте, сообщая ему, что юзер такой-то уже начал изменять документ (о имени юзера см. следующий пункт).
4. Если вставка номера в таблицу LockDoc прошла успешно, то:
4.1. Транзакцию на обновление LockDoc оставляем открытой до конца редактирования документа.
4.2. В поле редактируемого документа Locker вписываем USER и завершаем эту транзакцию (для того, чтобы это имя можно было потом прочитать).
Если конкурирующий юзер нарвется на невозможность начать редактирования документа, то формируется запрос к этому документу, откуда мы и получим имя юзера - "блокировщика".
5. После окончания редактирования документа откатываем транзакцию для таблицы Locker (т.е. убираем от-туда номер заблокированного документа. Для тех, кто видит в откате плохой тон, можно Commit - Delete - Commit).
В отредактированном документе имя юзера в поле LockDoc просто оставляем - оно никому не мешает.  

Всего записей: 7699 | Зарегистр. 07-05-2010 | Отправлено: 02:09 28-07-2012
eddoc



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SevereK20

Цитата:
Я не большой спец, но задавалася уже этим вопросом.  

 
Многа букафф и нет ответа на поставленный вопрос.
 
Как выяснилось, ситуация такова: триггеры на сервере отработают лишь в случае корректного дисконнекта. Во всех остальных случаях (убиение коннекта через системные таблицы, шатдаун базы и проч.) никто ничего не гарантирует.
 
Если делать хотелку на клиенте, то остается (с б-а-а-а-альши-и-и-и-ми оговорками) вариант с таймером, что считается моветоном и оправдывает себя только в случае крайней необходимости.

Всего записей: 328 | Зарегистр. 25-11-2007 | Отправлено: 18:01 29-07-2012
OXDBA

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
eddoc

Цитата:
Для служебных целей

Если действительно для служебных целей, то есть такой инструмент FBScanner . Он платный, но денег своих стоит.

Всего записей: 426 | Зарегистр. 19-01-2005 | Отправлено: 10:24 30-07-2012
ant0ni02004

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
eddoc

Цитата:
Если делать хотелку на клиенте

клиент тоже может резет нажать и перегрузиться вдруг. да, пожалуй можна из клиента таймером что-то обновлять раз в минуту по transactionID, например, и неактивность более чем 2-3 минуты считать как рассоединение. но стоит ли - вот вопрос...
З.Ы.
почему вам важно именно время разъединения с БД?

Всего записей: 442 | Зарегистр. 26-10-2004 | Отправлено: 17:00 30-07-2012
eddoc



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ant0ni02004

Цитата:
почему вам важно именно время разъединения с БД?

В embedded версии при репликации знать - какая "старее"  
 
Ну и ... познавательный процесс

Всего записей: 328 | Зарегистр. 25-11-2007 | Отправлено: 18:35 30-07-2012
ant0ni02004

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
eddoc
для репликации будет гораздо лучше ставить дату изменения записи

Всего записей: 442 | Зарегистр. 26-10-2004 | Отправлено: 01:49 31-07-2012
eddoc



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ant0ni02004
В каждую таблю?

Всего записей: 328 | Зарегистр. 25-11-2007 | Отправлено: 09:26 31-07-2012
OXDBA

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот ведь изобретатели велосипедов, а IBReplicator чем не угодил?

Всего записей: 426 | Зарегистр. 19-01-2005 | Отправлено: 09:35 31-07-2012
eddoc



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OXDBA

Цитата:
IBReplicator чем не угодил?

А как его в клиента встроить? А как быть с распространением такого клиента на БЕСплатной основе?
 
Вот и занимаешься велосипедопостроением O_o

Всего записей: 328 | Зарегистр. 25-11-2007 | Отправлено: 14:55 31-07-2012
ant0ni02004

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
eddoc

Цитата:
В каждую таблю

если вам интересна именно последняя дата "делания чего-то с чем-то" то можна ровно одну запись в спец.таблице держать и апдейтить её из всех остальных таблиц триггерами (after insert,update,delete)
 
а так можна и в каждой таблице завести такую колонку. и даже три (дата изменения, ИД юзера, ИД базы)
 

Всего записей: 442 | Зарегистр. 26-10-2004 | Отправлено: 15:42 31-07-2012
OXDBA

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
В embedded версии

и

Цитата:
А как его в клиента встроить?

При разговоре о репликации звучит пугающе, ну да ладно, в общем случае репликация подручными средствами решается на базе IBE$LOG_TABLES и IBE$LOG_KEYS, создание триггеров для их заполнения прекрасно реализовано в IBExpert. Далее идет длинный путь по полю, усеянному граблями, в конце которого виден один из стандартных репликаторов

Цитата:
А как быть с распространением такого клиента на БЕСплатной основе

Если у вас разработчики на бесплатной основе, то ни как. Если же все-таки они хотят хотя бы еду, то вопрос выходит за рамки данной темы, хотя наше руководство посчитало, что купить репликатор дешевле, чем оплачивать работу по поддержке самописного.

Всего записей: 426 | Зарегистр. 19-01-2005 | Отправлено: 16:37 31-07-2012
eddoc



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ant0ni02004

Цитата:
можна ровно одну запись в спец.таблице держать

Так и планируется: сделать что-то вроде "местного реестра" для каждого успешно подключившегося юзера, куда писать все его настройки, освободившись от ОС и машины
 
OXDBA

Цитата:
в общем случае репликация подручными средствами решается на базе IBE$LOG_TABLES и IBE$LOG_KEYS

Вот видите, сколько нового узнаЕшь, задавшись вполне невинным вопросом, хотя ФБ пользуюсь не один год
 

Цитата:
Если у вас разработчики на бесплатной основе, то ни как.

"Я в этой гостинице администратор" (с)

Всего записей: 328 | Зарегистр. 25-11-2007 | Отправлено: 08:35 01-08-2012
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Похоже OXDBA с нами нет.
- Что Вы думаете на счёт  
select
50 join
plan Один индекс?
 
Добавлено:
Ладно, второй вопрос - гдето видел кейс-сенситив не сенситив индексы. Непомню - может IBExpert новый был. Реално не помню в натуре. Если таков есть отпишите.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 21:01 02-08-2012
exteris

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
гдето видел кейс-сенситив не сенситив индексы

Можно сделать индекс по выражению:
CREATE INDEX IDX1 ON T1 COMPUTED BY (UPPER(COL1))
 
Добавлено:

Цитата:
- Что Вы думаете на счёт  
select  
50 join  
plan Один индекс?  

Не понял мысли.

Всего записей: 382 | Зарегистр. 14-04-2003 | Отправлено: 09:08 03-08-2012
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
exteris
На момент написания вопроса я не знал действительности. Возможно знал из предыдущих жизней, но составлять планы я учился сегодня.  

Цитата:
Не понял мысли.

Индекс используется в двух случаях - поиск и последовательное чтение - это огромная разница минуя учебники. Могу объяснить скайпом и только матом. ))))) Обязательный вывод - вопрос не по существу.
 
Кейс - да, интересовало только это. - Зачёт.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 22:01 03-08-2012
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Извиняюсь за экспрессию. Я сейчас не могу сказать что подобрал для себя оптимальный способ писать план - значит утверждать ничего не могу, академический подход ещё не сформирован.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 21:15 06-08-2012
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, как сделать следующий фокус. Есть БД, в ней есть поле типа Timestamp. Необходимо во всех записях этого поля увеличить время (только время, дату надо оставить) на один час.

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 16:13 08-08-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » InterBase и FireBird: вопросы по работе и их решение


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru