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

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

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

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


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

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

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

ez548-sek1
UZ53310SK20

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

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

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

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

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

ez548-sek1
UZ53310SK20

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

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

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

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

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

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

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

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

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

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

Да

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

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

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

Дальше строится индекс по этому полю. и ищется по ПОЛНОМУ совпадению, что быстрее LIKE "%something%"
минусы я описал выше.
...
Рейтинг: 0 / 0
Помогите выбрать бд для поиска текста в большой бд
    #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
Помогите выбрать бд для поиска текста в большой бд
    #33749684
Syleiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А быть может подключить систему полнотекстового поиска. Мы используем DTSearch
...
Рейтинг: 0 / 0
Помогите выбрать бд для поиска текста в большой бд
    #33749756
sekos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Полнотекстовый не подходит
...
Рейтинг: 0 / 0
Помогите выбрать бд для поиска текста в большой бд
    #33749842
Rus000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
народ правильно предлагает насчет построения доп структуры - по другому никак. Либо выигрываешь в скорости и полный перебор с поиском подстроки, либо строй индекс и имей денормализованную схему со всеми вытекающими
...
Рейтинг: 0 / 0
Помогите выбрать бд для поиска текста в большой бд
    #33749845
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чо-то не пойму, откуда у юзера кусок серийника ? это чо варезный сайт с порнухой ?
...
Рейтинг: 0 / 0
Помогите выбрать бд для поиска текста в большой бд
    #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
Помогите выбрать бд для поиска текста в большой бд
    #33750070
Sergei Obrastsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergei Obrastsovнесколько громоздко, зато достаточно эффективно
для 70 млн. записей по 64 байта все это удовольствие займет ~60Gb

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

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

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

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

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

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

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

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


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

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

Эта такая фича Oracle, которая позволяет писать свои индексы.
Например по отпечаткам пальцев или для картографии
Или для контекстного поиска
Растут, однако!
...
Рейтинг: 0 / 0
Помогите выбрать бд для поиска текста в большой бд
    #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]