Суббота, 18.05.2024
Мой сайт
Меню сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » 2016 » Декабрь » 5 » Рекурсия, полнотекстовый поиск, индексы
20:49
Рекурсия, полнотекстовый поиск, индексы

Рекурсия, полнотекстовый поиск, индексы

Потребовалось-таки мне копировать ветвь дерева и потому сразу же потребовалась так называемая РЕКУРСИЯ, вызов из функции той же самой функции.
В медицинской базе, про которую тут:
http://akostina76.ucoz.ru/blog/2016-11-24-3643

…мне потребовалось в справочнике связей создавать копии структур справочника объектов (чтобы руками это не делать).
Выглядит это так:


… т.е в справочник добавляется новая строка, а если к этой ветке прицелены ещё какие-то ветки, то для них всех выполняется эта же функция но с чуть другими параметрами.
Рекурсия появилась уже в Турбо Си. Но где-то раньше, видимо на больших машинах её не было. Потому что об этом говорилось как о достижении. И действительно компилятор должен что-то сложное генерировать чтобы во всё том же ассемблерном коде, для каждого вызова функции создавалась своя изолированная среда (экземпляры переменных и т.д). Так или иначе в обычных языках это есть довольно давно.
Здесь я написала про то, что SQL этого не умеет:
http://akostina76.ucoz.ru/blog/2016-11-26-3650

Ошиблась. Отсюда:
https://habrahabr.ru/post/27439/

Рекурсивны SQL запросы являются одним из способов решения проблемы дерева и других проблем, требующих рекурсивную обработку. Они были добавлены в стандарт SQL 99. До этого они уже существовали в Oracle. Несмотря на то, что стандарт вышел так давно, реализации запоздали. Например, в MS SQL они появились только в 2005-ом сервере.
… Но только с стандарте это появилось в 1999 году, а в SQL Server-е с 2005 года.
И хранимые процедуры вызывать можно, но не более 32 вложений:
http://www.sql.ru/forum/24992/rekursivnyy-vyzov-hranimyh-procedur

Так что некоторый дурной тон в виде работы с данными из программы а не средствами базы данных не является единственной возможностью.
При этом почти наверняка там внутри что-то есть, что позволяет работать с этими деревьями. Здесь описано:
http://akostina76.ucoz.ru/blog/2016-11-24-3643

… добавление внутренних полей Родитель1, 2 чтобы хоть как-то ускорить выборки. Это решает вопрос не полностью а частично и это дополнительная, хранящаяся в базе информация. Но ведь все индексы, по которым осуществляется поиск это какая-то дополнительная хранимая информация. Чтобы решить вопрос радикально мне потребовалось бы завести отдельную таблицу (типа 1С-овских характеристик) и хранить в ней для каждой строки полный список «ветвей» («родителей»), который к ней ведёт. При таком добавлении все выборки, которые обычно делаются рекурсией осуществлялись бы мгновенно, выборкой по этой внутренней таблице – своеобразному индексу.
Есть ещё один тип информации, с которым всё чаще и чаще приходится работать. Это произвольный и достаточно длинный текст. И по этому объекту тоже что-то надо искать. И на нем тоже никак не работают стандартные индексы, годные для сортировки и поиска коротких слов.
В SQL Server-е для этого есть специальный, отдельный полнотекстовый индекс:
http://dbasimple.blogspot.ru/2012/08/ms-sql-server-2008-full-text-search.html

… который работает быстрее чем LIKE в выражении WHERE просто потому, что он – индекс.
Я таким никогда не пользовалась, но можно искать не просто тексты, в которых есть слова, но и тексты, в которых эти слова, например, разделены не более чем двумя другими словами тоже можно:
https://msdn.microsoft.com/ru-ru/library/ms142568.aspx

В 1С тоже есть свой полнотекстовый поиск с аналогичными возможностями:
http://v8.1c.ru/overview/Term_000000275.htm

… который судя по пустому каталогу SQL Server-е делается своими внутренними средствами.
Это было два примера данных, для которых не годятся стандартные индексы как средство поиска. Статью по какому-то экзотическому индексу, данную Новиковым:
http://www.math.spbu.ru/SD_AIS/ru-index.shtml

… я пыталась понять в 1994 году. Мне это показалось неинтересным потому что было непонятно что за информация такая может требовать чего-то отличного от уже созданного NTX файла с B-деревом. Но жизнь сложнее. И объекты, для работы с которыми могут потребоваться нестандартные средства не звучат может потому, что с ними ещё не научились работать.
Напомню, что в 1994 году обычнее языки уже умеют работать с рекурсией, а для работы с базой данных этого инструмента ещё нет даже в стандарте. И, тем более, нет ещё внутреннего инструментария (каких-то индексов) для работы со всем этим. Но все эти очень полезные для хозяйства вещи уже кто-то придумывал и разрабатывал.

 

Просмотров: 268 | Добавил: akostina76 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа
Поиск
Календарь
«  Декабрь 2016  »
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
262728293031
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Copyright MyCorp © 2024
    Бесплатный конструктор сайтов - uCoz