Rambler's Top100

(c)2009-2017 openinfotech.ru

СУБД HyTech

Документация
Фильтры

Фильтры

Этот тип поисковых операций отличается по своей реализации от всех прочих. Это итеративная операция. Пользователь получает элементы результата один за другим, а не все сразу. Только после получения всех элементов может быть определено их число. Итеративность выполнения, естественно, снижает скорость выполнения операций в силу используемых алгоритмов, но позволяет получить первые элементы результата еще до окончательного завершения поиска сразу после выполнения начальных построений. Поэтому время получения первого элемента результата может оказаться существенно меньше, чем время получения всех элементов сразу (при использовании других функций поиска). Однако общее время выполнения фильтрации, скорее всего, будет больше, чем прочих поисков.

Область использования функций фильтрации в системе с инвертированными списками (HyTech) значительно уже, чем в системах на B-деревьях и подразумевает два основных случая:

  • для реализации трудно формализуемых условий поиска (например, sin(x) > 0.3);
  • как возможная альтернатива логической связке нескольких атомарных поисков (при помощи операций И/ИЛИ/НЕ) или связке нескольких таблиц (при помощи операций Join/Link).

Для первого случая фильтрация является единственным спобом реализации поиска и скорость ее выполнения не имеет большого значения.

Для второго случая фильтрация обычно менее эффективна, чем связка. Скорость выполнения фильтрации может оказаться выше только для при сканировании очень маленького подмножества записей или, наоборот, при комбинации значительного числа поисковых условий (таблиц).

Точная граница эффективности функций фильтрации зависит от множества факторов (размеров таблиц и анализируемых подмножеств, соотношения производительности процессор/диски и пр.) и для конкретного приложения может быть определена только экспериментальным путем.

Фильтрация записей таблицы или группы связанных таблиц выполняется с использованием механизма call-back функций следующим образом:

  • пользователь заказывает поля записи (комбинированной записи), необходимые ему для принятия решения и вызывает функцию фильтрации, указывая адрес своей функции, выполняющей анализ полей отбора и принятие решения;
  • функция фильтрации выполняет начальные построения и начинает сбор заданных полей отбора, формируя кандидата на элемент результата;
  • после формирования очередного кандидата на элемент результата (записи или комбинированной записи) вызывается пользовательская функция принятия решения;
  • пользовательская функция определяет пригодность кандидата и формирует соответствующий код завершения, возвращая управление в функцию фильтрации;
  • функция фильтрации продолжает формирование кандидатов на элемент результата до достижения конца или прекращает процесс по требованию пользователя;
  • сформированное множество результатов оформляется соответствующим типу результата образом. Функция фильтрации завершается и возвращает управление пользователю.