Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Зависает FireBird [D6, IB6.x, FireBird]


Страницы:   1 2

galexis ©   (2004-08-18 11:27:00) 

Поиск в БД идет несколько минут (1-2 минуты). Особо нетерпеливые пользователи, видя что программа не реагирует на их дейтвия вырубают ее по ctrl+alt+del. После чего зависает FireBird Server на сервере. Точнее в службах написано, что он работает, а подключится к нему не удается. Приходится останавливать службу и запускать ее заново. Что не так?
Спасибо.


Sergey13   (2004-08-18 12:34:00) [21]

2 [13] Sergey_Masloff   (18.08.04 12:30)
У автора
>Идет поиск с помощью Like в поле VARCHAR длиной 400
Для 400 таких слов штук 40 с гаком может быть. Если записей прилично, то... 8-(


galexis   (2004-08-18 12:31:00) [22]


> Соловьев ©

я и перевожу сначало все в верхний регистр. Это значит что мне без % надо искать?


Sergey_Masloff   (2004-08-18 12:30:00) [23]

galexis ©   (18.08.04 12:17) [12]
>А каким образом словарь формировать? Отдельной программкой
Почему отдельной? Зависит от используемой "стратегии"
Это можно делать при вставке каждой записи. Логика может быть реализована как на клиенте так и на сервере (если он поддерживает) - как ХП или триггер например. Неважно.
 В твоей ситуации может быть будет какая-то утилитка (отдельная или вмонтированая в программу) которая пробежит по имеющейся базе и построит словарь.
 Суть ты (я думаю) понял - строка разбивается на слова и незначащие (ООО, АОЗТ, ТОО и так далее а также предлоги) - выкидываем. Значащие пишем в отдельную таблицу - словарь в которой три (например) поля - ID (уникальный) PARENTID (ссылка на ключ основной таблицы) и VALUE (слово)

Таблица MAIN
ID NAME
1  АОЗТ Рога И Копыта

Таблица DICTIONARY
ID  PARENTID VALUE
1   1        РОГА  <-- Регистр ВСЕГДА один!!!
2   1        КОПЫТА

В поиске пляшешь от словаря


galexis   (2004-08-18 12:17:00) [24]


> Digitman ©

Программист я хреновый, т.к. занимаюсь этим от случая к случаю. Давно хотел сделать поиск как в IB Expert. Но не умею. Мне бы где подробнее почитать про эти нити и т.д. Я даже не все понял, про что вы написали НД, ХП. ХП -хранимая процедура? НД-?

> Sergey_Masloff

Да я и сам знаю что хреновый программист. Но какой уж есть. Тем более что в нашей организации их вообще нет, а я системный администратор наверно. А каким образом словарь формировать? Отдельной программкой?


Соловьев   (2004-08-18 12:13:00) [25]


> OUNDEX его давно придумали американцы

это понятно - для нечеткого поиска. я про другое говорил.


Anatoly Podgoretsky   (2004-08-18 12:11:00) [26]

Соловьев ©   (18.08.04 12:06) [9]
SOUNDEX его давно придумали американцы


Соловьев   (2004-08-18 12:06:00) [27]


> на фиг в словарь идет две записи "Рога" и "Копыта". Первый
> поиск идет по словарю возвращаешься по ссылкам на основнуютаблицу
> проверяя процент соответствия. Это решение лежащее на поверхности.

Да, и еще хочу добавить, что как правило то исчут без учета регистра - так вот в справочнике еще предусмотреть несколько полей, одно как есть, а другое в верхнем регистре - и искать без % с начала, тогда можно индекс подключить


Sergey_Masloff   (2004-08-18 12:01:00) [28]

galexis ©   (18.08.04 11:53) [6]
>Поиск на вхождение слова или части слова по всей строке. Это БД >юр. лиц. Обычно ищут то, чего сами не знают.
Если ты ищешь лайком с процентиком впереди то лучше им искать другого программиста. Не обижайся, но мир суров.
 Для описаной тобой задачи имеются совершенно другие способы. Могу сказать что у нас поиск по многомиллионной базе клиентов по нечеткому критерию идет ну 2-3 секунды. Причем найдет даже если ты вместо Иванов ищешь Ивнов например (ну ошибся при вводе). Но это так, уже мерянье.
 По сабжу реализуй словарь и поиск через него. Типа название ООО Рога и Копыта -> ООО на фиг в словарь идет две записи "Рога" и "Копыта". Первый поиск идет по словарю возвращаешься по ссылкам на основнуютаблицу проверяя процент соответствия. Это решение лежащее на поверхности.


Digitman   (2004-08-18 11:54:00) [29]


> Не могу особо тупых пользователей поменять


они далеко не всегда тупые, просто они как правило излишне ретивые)

и вот предупредить их ретивость ты вполне бы мог внесением специальной логики в свою программу

мало того, ты как программер обязанпредусматривать подобные ситуации !

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

2. Вынеси потенциально "тяжелый" запрос в доп.трэд, чтобы не занимать им осн.трэд

3. Вынеси формирование НД по этому запросу в ХП

В сам запрос добавь проверку значения специально созданного тобой генератора

for select .... into ... where .... and GEN_ID(GEN, 0) = 0do suspend;

перед обращением к ХП сбрось генератор GEN в 0

обратись к ХП (т.е. стартуй запрос) в доп.треде, в осн.трэде выведи модальное окошко с прогресс-баром или анимацией и кнопкой ОТМЕНА

когда ретивый юзер устанет ждать, он кликнет на кнопке ОТМЕНА, при этом ты стартуешь еще один доп.тред, задача которого - инкрементировать генератор GEN

как только при выборке очер.записи ХП обнаружит условие GEN_ID(GEN, 0) <> 0, выполнение запроса немедленно и корректно прекращается, и метод StoredProc.Open, вызванный в доп.треде, немедленно возвратит управление


galexis   (2004-08-18 11:53:00) [30]


> Соловьев ©

Поиск на вхождение слова или части слова по всей строке. Это БД юр. лиц. Обычно ищут то, чего сами не знают.


> Desdechado ©

Может и так. Но обычно запрос длится не более 2 минут. А после отрубания программы, FireBird и через 30 минут не работает. Да и сервак достаточно мощный двухпроцессорный на Xion 2,4 ГГц, 2Гб оперативки, RAID и т.д. Фирменный - IBM.


Desdechado   (2004-08-18 11:42:00) [31]

так и сервер наверно не зависает, а продолжает этот запрос обрабатывать, может, даже захватывая все ресурсы процессора


Соловьев   (2004-08-18 11:42:00) [32]


> Идет поиск с помощью Like в поле VARCHAR длиной 400

не помню там требовалось только поиск с начала строки или по всей?


Anatoly Podgoretsky   (2004-08-18 11:40:00) [33]

Докладную записку директору


galexis   (2004-08-18 11:36:00) [34]

Да по этому поиску я тут уже общался. Идет поиск с помощью Like в поле VARCHAR длиной 400. И окошко есть, и курсор на часы с SQL поменял. Не могу особо тупых пользователей поменять.


Соловьев   (2004-08-18 11:28:00) [35]


> Поиск в БД идет несколько минут (1-2 минуты).

вывести окошко. Идет поиск :)
И интересно посмотреть на этот поиск - что же там можно 2 минуты делать то?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо