Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Помогите выбрать бд для поиска текста в большой бд / 25 сообщений из 44, страница 1 из 2
24.05.2006, 16:52
    #33749237
sekos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
В данных момент есть поиск в бд LIKE "%something%". Тормозит на больших обьемах данных. Fulltext search и "something%" не предлагать плз. В данном случае всё написано на MySQL 4.0.

Другие БД могут справиться с этой задачей лучше?

Нужно искать именно n-ое кол-во букв в строке. Длина - 2..64 символа.

Может есть варианты что-то кардинально изменить, улучшив скорость?
...
Рейтинг: 0 / 0
24.05.2006, 17:12
    #33749307
MGR
MGR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
"большие объемы" это сколько в строках/гигибайтах?
...
Рейтинг: 0 / 0
24.05.2006, 17:16
    #33749332
Yo.!!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
sekos
Нужно искать именно n-ое кол-во букв в строке. Длина - 2..64 символа.


это значит fullscan всей таблицы, на любой субд. т.е. переход ничего не даст.

sekosМожет есть варианты что-то кардинально изменить, улучшив скорость?

рассказывай, что за задача, и будем тебе рассказывать почему тебе ненада n-ое кол-во букв в произвольной строке.
...
Рейтинг: 0 / 0
24.05.2006, 17:46
    #33749447
sekos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
Есть строки типа

ez548-sek1
UZ53310SK20

БД с серийниками некого оборудования. Серийники могут быть любыми. Данных порядка 70 млн. Пользователь вводит запросв и надо что бы ему вывелось всё оборудование серийники которых содержат данный запрос. Запрос минимум 2 символа.

Вот такая вот задача.
...
Рейтинг: 0 / 0
24.05.2006, 18:16
    #33749551
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
sekosВ данных момент есть поиск в бд LIKE "%something%". Тормозит на больших обьемах данных. Fulltext search и "something%" не предлагать плз. В данном случае всё написано на MySQL 4.0.

Другие БД могут справиться с этой задачей лучше?

Нужно искать именно n-ое кол-во букв в строке. Длина - 2..64 символа.

Может есть варианты что-то кардинально изменить, улучшив скорость?
Индекс по этому полю таблицы есть?
...
Рейтинг: 0 / 0
24.05.2006, 18:17
    #33749556
VoDA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
sekosЕсть строки типа

ez548-sek1
UZ53310SK20

БД с серийниками некого оборудования. Серийники могут быть любыми. Данных порядка 70 млн. Пользователь вводит запросв и надо что бы ему вывелось всё оборудование серийники которых содержат данный запрос. Запрос минимум 2 символа.

Вот такая вот задача.Сделать собственный "полнотекстовый поиск".
Разделить серийник на элементы и искать среди этих элементов. поиск тогда будет по прямому соответствию, т.е. используется индекс.

Но нужна денормализация БД - это вызовет сильный рост объемов данных + алгоритм актуализации.
...
Рейтинг: 0 / 0
24.05.2006, 18:21
    #33749573
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
Привет, ну!
Ты пишешь:

нуня> Индекс по этому полю таблицы есть?Кхм, мсье знает ТАКОЙ вид индексов?

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
24.05.2006, 18:24
    #33749580
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
Если не критично использование именно SQL, то можно на каше строить индексы какие заблагорассудится.
В двух словах - обычная схема - это два отображения
1) по иду получить строку таблицы
2) по значению (поле таблицы) получить ид строки

Можно второй пункт написать любым образом, например при записи UZ53310SK20
делать отображение
UZ53310SK20 -> id
Z53310SK20 -> id
53310SK20 -> id
и так далее.
тогда все запросы вида %some% сводятся к виду some%. Скажем если пришло "найти содержащие Z5" то по индексу берем те которые начинаются на Z5 и вперед.
...
Рейтинг: 0 / 0
24.05.2006, 18:26
    #33749589
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
Мимопроходящий
Привет, ну!
Ты пишешь:

нуня> Индекс по этому полю таблицы есть?Кхм, мсье знает ТАКОЙ вид индексов?

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.3
А толку в моих знаниях? Пользоваться-то ему придется имеющимися серверами.
...
Рейтинг: 0 / 0
24.05.2006, 18:32
    #33749608
sekos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
ну я
Индекс по этому полю таблицы есть?

Да

VoDaСделать собственный "полнотекстовый поиск".
Разделить серийник на элементы и искать среди этих элементов. поиск тогда будет по прямому соответствию, т.е. используется индекс.

Дело в том что серийники абсолютно разные, разных видов и т.д. как таковой фикс.структуры у них нет.
...
Рейтинг: 0 / 0
24.05.2006, 18:41
    #33749631
VoDA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
sekosДело в том что серийники абсолютно разные, разных видов и т.д. как таковой фикс.структуры у них нет.По условиям задачи поиск минимум по 2-м символам.
Берем UZ53310SK20
и превращаем в набор:
UZ
Z5
53
33
31
10
0S
SK
K2
20
Это - поиск по 2-м символам.

Аналогично по 3-м и более:
UZ5
Z53
533
и т.п.

Дальше строится индекс по этому полю. и ищется по ПОЛНОМУ совпадению, что быстрее LIKE "%something%"
минусы я описал выше.
...
Рейтинг: 0 / 0
24.05.2006, 18:48
    #33749650
sekos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
VoDA sekosДело в том что серийники абсолютно разные, разных видов и т.д. как таковой фикс.структуры у них нет.По условиям задачи поиск минимум по 2-м символам.
Берем UZ53310SK20
и превращаем в набор:
UZ
Z5
53
33
31
10
0S
SK
K2
20
Это - поиск по 2-м символам.

Аналогично по 3-м и более:
UZ5
Z53
533
и т.п.

Дальше строится индекс по этому полю. и ищется по ПОЛНОМУ совпадению, что быстрее LIKE "%something%"
минусы я описал выше.

Не совсем понял, получается 64 таблицы (длина 2..64) дублирующие данные много раз из основной таблицы?
Какие конкретно минусы?
...
Рейтинг: 0 / 0
24.05.2006, 19:03
    #33749684
Syleiman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
А быть может подключить систему полнотекстового поиска. Мы используем DTSearch
...
Рейтинг: 0 / 0
24.05.2006, 19:41
    #33749756
sekos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
Полнотекстовый не подходит
...
Рейтинг: 0 / 0
24.05.2006, 21:08
    #33749842
Rus000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
народ правильно предлагает насчет построения доп структуры - по другому никак. Либо выигрываешь в скорости и полный перебор с поиском подстроки, либо строй индекс и имей денормализованную схему со всеми вытекающими
...
Рейтинг: 0 / 0
24.05.2006, 21:10
    #33749845
Yo.!!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
чо-то не пойму, откуда у юзера кусок серийника ? это чо варезный сайт с порнухой ?
...
Рейтинг: 0 / 0
25.05.2006, 01:25
    #33750040
Sergei Obrastsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
sekosЕсть строки типа

ez548-sek1
UZ53310SK20

БД с серийниками некого оборудования. Серийники могут быть любыми. Данных порядка 70 млн. Пользователь вводит запросв и надо что бы ему вывелось всё оборудование серийники которых содержат данный запрос. Запрос минимум 2 символа.

Вот такая вот задача.
ну вот, скажем, решение для M-системы:

^table(idx)=серийник

^index(pos,smb,idx)=

pos - позиция символа в серийнике
smb - символ
idx - индекс, под которым записан серийник в массиве ^table

алгоритм поиска:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
       set smb=$extract(Query) ;берем первый символ
       for q= 1 : 1 : 65 -$length(Query) do  ;
       . set idx="" for  set idx=$order(^index(q,smb,idx)) quit:idx=""  do  ;
       .. set cnt= 0 
       .. for t= 2 : 1 :$length(Query) s smb2=$extract(Query,t) if $data(^index(q+t- 1 ,smb2,idx)) set cnt=cnt+ 1 
       .. if cnt'=($length(Query)- 1 ) quit
       .. write !,^table(idx)
последовательно перемещаем первый символ запроса по позициям 1-(65-длина запроса), выбирая все соответствующие этому индексы.
далее в цикле до конца запроса проверяем наличие этого индекса под следующим символом запроса в позиции следующей за проверяемой.
совпадение всех условий дает нам нужный индекс

несколько громоздко, зато достаточно эффективно
для 70 млн. записей по 64 байта все это удовольствие займет ~60Gb

С уважением. Сергей
...
Рейтинг: 0 / 0
25.05.2006, 04:12
    #33750070
Sergei Obrastsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
Sergei Obrastsovнесколько громоздко, зато достаточно эффективно
для 70 млн. записей по 64 байта все это удовольствие займет ~60Gb

прикинул на переменных длинах серийников (4-64), получается 11.5Gb
не так уж и страшно

С уважением. Сергей
...
Рейтинг: 0 / 0
25.05.2006, 09:05
    #33750216
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
ну яА толку в моих знаниях? Пользоваться-то ему придется имеющимися серверами.

Мусье известно о доменных индексах ?
Но предлагаемый вами индекс получится гмм ... большим
Скорее всего, больше самой таблицы, и не факт что по нему будет искать быстрее
...
Рейтинг: 0 / 0
25.05.2006, 10:33
    #33750477
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
sekosНе совсем понял, получается 64 таблицы (длина 2..64) дублирующие данные много раз из основной таблицы?
Какие конкретно минусы?
Одна таблица получается.
Такая:
ИД товара, Кусок серийника

Каждый серийник разбиваете на куски. Тут два варианта:
1. Бьете серийник на куски по 2-3-4-... букв во всех сочетаниях. ИМХО это бесмысленно
2. Бьете серийник на куски так - каждый кусок наччинается со сследующей буквы: 123456-23456-3456-456-56

Ищите по нему like '123%', будет быстро.

Единственный минус - объем этой таблицы будет раза в 2-3 больше объема серийников. Но это не страшно.

-- Tygra's --
...
Рейтинг: 0 / 0
25.05.2006, 10:46
    #33750532
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
Gluk (Kazan) ну яА толку в моих знаниях? Пользоваться-то ему придется имеющимися серверами.
Мусье известно о доменных индексах ?
Может быть под другим именем?

Gluk (Kazan)Но предлагаемый вами индекс получится гмм ... большим
Скорее всего, больше самой таблицы, и не факт что по нему будет искать быстрее
Увы, да, большой.
А что поиск быстрее - это факт. Проверено на нескольких приложениях.
...
Рейтинг: 0 / 0
25.05.2006, 10:58
    #33750586
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
ну я Gluk (Kazan) ну яА толку в моих знаниях? Пользоваться-то ему придется имеющимися серверами.
Мусье известно о доменных индексах ?
Может быть под другим именем?


Эта такая фича Oracle, которая позволяет писать свои индексы.
Например по отпечаткам пальцев или для картографии
Или для контекстного поиска
...
Рейтинг: 0 / 0
25.05.2006, 11:09
    #33750629
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
если он введет два символа то база ему выдасть пару другую тысяч серийников из 70 миллионов.
Оно ему надо?

нужно конкретизировать условие и уже в ограниченном наборе строк делать условие like
по моему так...
...
Рейтинг: 0 / 0
25.05.2006, 11:18
    #33750676
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
Gluk (Kazan)Мусье известно о доменных индексах ?

Эта такая фича Oracle, которая позволяет писать свои индексы.
Например по отпечаткам пальцев или для картографии
Или для контекстного поиска
Растут, однако!
...
Рейтинг: 0 / 0
25.05.2006, 12:05
    #33750889
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите выбрать бд для поиска текста в большой бд
Gluk (Kazan) ну я Gluk (Kazan) ну яА толку в моих знаниях? Пользоваться-то ему придется имеющимися серверами.
Мусье известно о доменных индексах ?
Может быть под другим именем?


Эта такая фича Oracle, которая позволяет писать свои индексы.
Например по отпечаткам пальцев или для картографии
Или для контекстного поиска

В DB2 это называется INDEX EXTENSION и известно с 5 версии... сейчас уже 9 версия...
...
Рейтинг: 0 / 0
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Помогите выбрать бд для поиска текста в большой бд / 25 сообщений из 44, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]