Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
В данных момент есть поиск в бд LIKE "%something%". Тормозит на больших обьемах данных. Fulltext search и "something%" не предлагать плз. В данном случае всё написано на MySQL 4.0. Другие БД могут справиться с этой задачей лучше? Нужно искать именно n-ое кол-во букв в строке. Длина - 2..64 символа. Может есть варианты что-то кардинально изменить, улучшив скорость? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 16:52 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
"большие объемы" это сколько в строках/гигибайтах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 17:12 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
sekos Нужно искать именно n-ое кол-во букв в строке. Длина - 2..64 символа. это значит fullscan всей таблицы, на любой субд. т.е. переход ничего не даст. sekosМожет есть варианты что-то кардинально изменить, улучшив скорость? рассказывай, что за задача, и будем тебе рассказывать почему тебе ненада n-ое кол-во букв в произвольной строке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 17:16 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
Есть строки типа ez548-sek1 UZ53310SK20 БД с серийниками некого оборудования. Серийники могут быть любыми. Данных порядка 70 млн. Пользователь вводит запросв и надо что бы ему вывелось всё оборудование серийники которых содержат данный запрос. Запрос минимум 2 символа. Вот такая вот задача. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 17:46 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
sekosВ данных момент есть поиск в бд LIKE "%something%". Тормозит на больших обьемах данных. Fulltext search и "something%" не предлагать плз. В данном случае всё написано на MySQL 4.0. Другие БД могут справиться с этой задачей лучше? Нужно искать именно n-ое кол-во букв в строке. Длина - 2..64 символа. Может есть варианты что-то кардинально изменить, улучшив скорость? Индекс по этому полю таблицы есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 18:16 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
sekosЕсть строки типа ez548-sek1 UZ53310SK20 БД с серийниками некого оборудования. Серийники могут быть любыми. Данных порядка 70 млн. Пользователь вводит запросв и надо что бы ему вывелось всё оборудование серийники которых содержат данный запрос. Запрос минимум 2 символа. Вот такая вот задача.Сделать собственный "полнотекстовый поиск". Разделить серийник на элементы и искать среди этих элементов. поиск тогда будет по прямому соответствию, т.е. используется индекс. Но нужна денормализация БД - это вызовет сильный рост объемов данных + алгоритм актуализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 18:17 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
Привет, ну! Ты пишешь: нуня> Индекс по этому полю таблицы есть?Кхм, мсье знает ТАКОЙ вид индексов? -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 18:21 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
Если не критично использование именно SQL, то можно на каше строить индексы какие заблагорассудится. В двух словах - обычная схема - это два отображения 1) по иду получить строку таблицы 2) по значению (поле таблицы) получить ид строки Можно второй пункт написать любым образом, например при записи UZ53310SK20 делать отображение UZ53310SK20 -> id Z53310SK20 -> id 53310SK20 -> id и так далее. тогда все запросы вида %some% сводятся к виду some%. Скажем если пришло "найти содержащие Z5" то по индексу берем те которые начинаются на Z5 и вперед. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 18:24 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий Привет, ну! Ты пишешь: нуня> Индекс по этому полю таблицы есть?Кхм, мсье знает ТАКОЙ вид индексов? -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.3 А толку в моих знаниях? Пользоваться-то ему придется имеющимися серверами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 18:26 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
ну я Индекс по этому полю таблицы есть? Да VoDaСделать собственный "полнотекстовый поиск". Разделить серийник на элементы и искать среди этих элементов. поиск тогда будет по прямому соответствию, т.е. используется индекс. Дело в том что серийники абсолютно разные, разных видов и т.д. как таковой фикс.структуры у них нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 18:32 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
sekosДело в том что серийники абсолютно разные, разных видов и т.д. как таковой фикс.структуры у них нет.По условиям задачи поиск минимум по 2-м символам. Берем UZ53310SK20 и превращаем в набор: UZ Z5 53 33 31 10 0S SK K2 20 Это - поиск по 2-м символам. Аналогично по 3-м и более: UZ5 Z53 533 и т.п. Дальше строится индекс по этому полю. и ищется по ПОЛНОМУ совпадению, что быстрее LIKE "%something%" минусы я описал выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 18:41 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
VoDA sekosДело в том что серийники абсолютно разные, разных видов и т.д. как таковой фикс.структуры у них нет.По условиям задачи поиск минимум по 2-м символам. Берем UZ53310SK20 и превращаем в набор: UZ Z5 53 33 31 10 0S SK K2 20 Это - поиск по 2-м символам. Аналогично по 3-м и более: UZ5 Z53 533 и т.п. Дальше строится индекс по этому полю. и ищется по ПОЛНОМУ совпадению, что быстрее LIKE "%something%" минусы я описал выше. Не совсем понял, получается 64 таблицы (длина 2..64) дублирующие данные много раз из основной таблицы? Какие конкретно минусы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 18:48 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
А быть может подключить систему полнотекстового поиска. Мы используем DTSearch ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 19:03 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
Полнотекстовый не подходит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 19:41 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
народ правильно предлагает насчет построения доп структуры - по другому никак. Либо выигрываешь в скорости и полный перебор с поиском подстроки, либо строй индекс и имей денормализованную схему со всеми вытекающими ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 21:08 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
чо-то не пойму, откуда у юзера кусок серийника ? это чо варезный сайт с порнухой ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 21:10 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
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. далее в цикле до конца запроса проверяем наличие этого индекса под следующим символом запроса в позиции следующей за проверяемой. совпадение всех условий дает нам нужный индекс несколько громоздко, зато достаточно эффективно для 70 млн. записей по 64 байта все это удовольствие займет ~60Gb С уважением. Сергей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 01:25 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
Sergei Obrastsovнесколько громоздко, зато достаточно эффективно для 70 млн. записей по 64 байта все это удовольствие займет ~60Gb прикинул на переменных длинах серийников (4-64), получается 11.5Gb не так уж и страшно С уважением. Сергей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 04:12 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
ну яА толку в моих знаниях? Пользоваться-то ему придется имеющимися серверами. Мусье известно о доменных индексах ? Но предлагаемый вами индекс получится гмм ... большим Скорее всего, больше самой таблицы, и не факт что по нему будет искать быстрее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 09:05 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
sekosНе совсем понял, получается 64 таблицы (длина 2..64) дублирующие данные много раз из основной таблицы? Какие конкретно минусы? Одна таблица получается. Такая: ИД товара, Кусок серийника Каждый серийник разбиваете на куски. Тут два варианта: 1. Бьете серийник на куски по 2-3-4-... букв во всех сочетаниях. ИМХО это бесмысленно 2. Бьете серийник на куски так - каждый кусок наччинается со сследующей буквы: 123456-23456-3456-456-56 Ищите по нему like '123%', будет быстро. Единственный минус - объем этой таблицы будет раза в 2-3 больше объема серийников. Но это не страшно. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 10:33 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) ну яА толку в моих знаниях? Пользоваться-то ему придется имеющимися серверами. Мусье известно о доменных индексах ? Может быть под другим именем? Gluk (Kazan)Но предлагаемый вами индекс получится гмм ... большим Скорее всего, больше самой таблицы, и не факт что по нему будет искать быстрее Увы, да, большой. А что поиск быстрее - это факт. Проверено на нескольких приложениях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 10:46 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
ну я Gluk (Kazan) ну яА толку в моих знаниях? Пользоваться-то ему придется имеющимися серверами. Мусье известно о доменных индексах ? Может быть под другим именем? Эта такая фича Oracle, которая позволяет писать свои индексы. Например по отпечаткам пальцев или для картографии Или для контекстного поиска ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 10:58 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
если он введет два символа то база ему выдасть пару другую тысяч серийников из 70 миллионов. Оно ему надо? нужно конкретизировать условие и уже в ограниченном наборе строк делать условие like по моему так... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 11:09 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Мусье известно о доменных индексах ? Эта такая фича Oracle, которая позволяет писать свои индексы. Например по отпечаткам пальцев или для картографии Или для контекстного поиска Растут, однако! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 11:18 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) ну я Gluk (Kazan) ну яА толку в моих знаниях? Пользоваться-то ему придется имеющимися серверами. Мусье известно о доменных индексах ? Может быть под другим именем? Эта такая фича Oracle, которая позволяет писать свои индексы. Например по отпечаткам пальцев или для картографии Или для контекстного поиска В DB2 это называется INDEX EXTENSION и известно с 5 версии... сейчас уже 9 версия... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 12:05 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
Точно, растут. В 8 версии появилось если не раньше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 12:07 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
sekosНе совсем понял, получается 64 таблицы (длина 2..64) дублирующие данные много раз из основной таблицы? Какие конкретно минусы?Действительно не поняли. Нужна еще одна таблица-справочник для индекса,в которую гонятся все возможные поисковые варианты. + талбица связей из каких серийников получено данное поисковое выражение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 12:57 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
sekosВ данных момент есть поиск в бд LIKE "%something%". Тормозит на больших обьемах данных. Fulltext search и "something%" не предлагать плз. В данном случае всё написано на MySQL 4.0. Другие БД могут справиться с этой задачей лучше? Нужно искать именно n-ое кол-во букв в строке. Длина - 2..64 символа. Может есть варианты что-то кардинально изменить, улучшив скорость? Подумайте все-таки о Fulltext search. Если сработает, то это ИМХО самое простое решение, вообще ничего делать не нужно. Идея в том, чтобы заставить сервер думать что каждая буква это слово, например можно определить дополнительную таблицу с серийными номерами, но буквы разделены пробелами. Тогда найти LIKE "%something%" эквивалентно нахождению последовательности слов "s o m e t h i n g", что есть стандартная задача для полнотескстового поиска. Не знаю как это реализовано в МуСКЛ, но вроде должно быть быстрее чем LIKE "%something%". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 23:52 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
Или решение аналогичное тому, которое предлагал Sergei Obrastsov, но для СКЛ сервера (sybase ASA). Пример переделан из работающего более сложного путем выбрасывания лишнего, поэтому запрос по-видимому можно еще упростить/соптимизировать. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. Не знаю как МуСКЛ справится с таким запросом, у сайбейз АСА проблем не замечено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 01:04 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
c127 Не знаю как МуСКЛ справится с таким запросом, у сайбейз АСА проблем не замечено. как с размерами? и скорость, конечно, тоже интересует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 02:03 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
Sergei Obrastsov c127 Не знаю как МуСКЛ справится с таким запросом, у сайбейз АСА проблем не замечено. как с размерами? и скорость, конечно, тоже интересует С размерами все в порядке, не беспокоят никак. А скорость и самого интересует, но пока удовлетворительная. Ну а если серьезно, то я даже синтаксис не проверял, честно же написал, что выдрал кусок из более сложной задачи и слегка подправил. Там еще есть различные поля, в которых нужно искать, поиск на включение-исключение, группы пользователей и права доступа к ресурсам, по которым идет поиск, а поиск идет не по символам а по словам. Запрос в принципе такой же, есть еще пара соединений с представлениями. Так что цифры я назвать могу, но результат Вам ничего не скажет. Кстати о скорости. Вы не ответили, с какой скоростью создает индекс МуСКЛ и КЕШ в Вашем тесте? http://sql.ru/forum/actualthread.aspx?tid=293038&pg=11#2698636 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 10:17 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
c127Или решение аналогичное тому, которое предлагал Sergei Obrastsov, но для СКЛ сервера (sybase ASA). Пример переделан из работающего более сложного путем выбрасывания лишнего, поэтому запрос по-видимому можно еще упростить/соптимизировать. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. Не знаю как МуСКЛ справится с таким запросом, у сайбейз АСА проблем не замечено.group by - обычно тыжеловат. да и - having count(*) = (select count(*) from #w); ИМХО тоже дает нагрузку на систему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 12:14 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
наверное быстрее будет так: CREATE TABLE [dbo].[Connect] ( [Connect_ID] [int] IDENTITY (1, 1) NOT NULL , [ID] [int] NOT NULL , [text_id] [int] NOT NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[serial] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [Serial] [varchar] (80) COLLATE Cyrillic_General_CI_AS NOT NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[text_search] ( [Text_id] [int] IDENTITY (1, 1) NOT NULL , [Text_part] [varchar] (80) COLLATE Cyrillic_General_CI_AS NOT NULL ) ON [PRIMARY] GO CREATE INDEX [IX_Connect] ON [dbo].[Connect]([ID]) ON [PRIMARY] GO CREATE INDEX [IX_Connect_1] ON [dbo].[Connect]([text_id]) ON [PRIMARY] GO CREATE INDEX [IX_text_search] ON [dbo].[text_search]([Text_part]) ON [PRIMARY] GO создаем таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 12:17 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
[dbo].[serial] - таблица значений [dbo].[Connect] - показывает что их словаря какому серийнику соответствует [dbo].[text_search] - таблица- СЛОВАРЬ серийных комбинаций заполняем: insert into serial (serial) values ('texting') insert into serial (serial) values ('ez548-sek1') только для ez548-sek1 (лениво делать для других, принцип и так понятен) INSERT INTO text_search (Text_part) VALUES ('ez') INSERT INTO [Connect] (ID, text_id) VALUES (2,46) INSERT INTO text_search (Text_part) VALUES ('z5') INSERT INTO [Connect] (ID, text_id) VALUES (2,47) INSERT INTO text_search (Text_part) VALUES ('54') INSERT INTO [Connect] (ID, text_id) VALUES (2,48) INSERT INTO text_search (Text_part) VALUES ('48') INSERT INTO [Connect] (ID, text_id) VALUES (2,49) INSERT INTO text_search (Text_part) VALUES ('8-') INSERT INTO [Connect] (ID, text_id) VALUES (2,50) INSERT INTO text_search (Text_part) VALUES ('-s') INSERT INTO [Connect] (ID, text_id) VALUES (2,51) INSERT INTO text_search (Text_part) VALUES ('se') INSERT INTO [Connect] (ID, text_id) VALUES (2,52) INSERT INTO text_search (Text_part) VALUES ('ek') INSERT INTO [Connect] (ID, text_id) VALUES (2,53) INSERT INTO text_search (Text_part) VALUES ('k1') INSERT INTO [Connect] (ID, text_id) VALUES (2,54) INSERT INTO text_search (Text_part) VALUES ('ez5') INSERT INTO [Connect] (ID, text_id) VALUES (2,55) INSERT INTO text_search (Text_part) VALUES ('z54') INSERT INTO [Connect] (ID, text_id) VALUES (2,56) INSERT INTO text_search (Text_part) VALUES ('548') INSERT INTO [Connect] (ID, text_id) VALUES (2,57) INSERT INTO text_search (Text_part) VALUES ('48-') INSERT INTO [Connect] (ID, text_id) VALUES (2,58) INSERT INTO text_search (Text_part) VALUES ('8-s') INSERT INTO [Connect] (ID, text_id) VALUES (2,59) INSERT INTO text_search (Text_part) VALUES ('-se') INSERT INTO [Connect] (ID, text_id) VALUES (2,60) INSERT INTO text_search (Text_part) VALUES ('sek') INSERT INTO [Connect] (ID, text_id) VALUES (2,61) INSERT INTO text_search (Text_part) VALUES ('ek1') INSERT INTO [Connect] (ID, text_id) VALUES (2,62) INSERT INTO text_search (Text_part) VALUES ('ez54') INSERT INTO [Connect] (ID, text_id) VALUES (2,63) INSERT INTO text_search (Text_part) VALUES ('z548') INSERT INTO [Connect] (ID, text_id) VALUES (2,64) INSERT INTO text_search (Text_part) VALUES ('548-') INSERT INTO [Connect] (ID, text_id) VALUES (2,65) INSERT INTO text_search (Text_part) VALUES ('48-s') INSERT INTO [Connect] (ID, text_id) VALUES (2,66) INSERT INTO text_search (Text_part) VALUES ('8-se') INSERT INTO [Connect] (ID, text_id) VALUES (2,67) INSERT INTO text_search (Text_part) VALUES ('-sek') INSERT INTO [Connect] (ID, text_id) VALUES (2,68) INSERT INTO text_search (Text_part) VALUES ('sek1') INSERT INTO [Connect] (ID, text_id) VALUES (2,69) INSERT INTO text_search (Text_part) VALUES ('ez548') INSERT INTO [Connect] (ID, text_id) VALUES (2,70) INSERT INTO text_search (Text_part) VALUES ('z548-') INSERT INTO [Connect] (ID, text_id) VALUES (2,71) INSERT INTO text_search (Text_part) VALUES ('548-s') INSERT INTO [Connect] (ID, text_id) VALUES (2,72) INSERT INTO text_search (Text_part) VALUES ('48-se') INSERT INTO [Connect] (ID, text_id) VALUES (2,73) INSERT INTO text_search (Text_part) VALUES ('8-sek') INSERT INTO [Connect] (ID, text_id) VALUES (2,74) INSERT INTO text_search (Text_part) VALUES ('-sek1') INSERT INTO [Connect] (ID, text_id) VALUES (2,75) INSERT INTO text_search (Text_part) VALUES ('ez548-') INSERT INTO [Connect] (ID, text_id) VALUES (2,76) INSERT INTO text_search (Text_part) VALUES ('z548-s') INSERT INTO [Connect] (ID, text_id) VALUES (2,77) INSERT INTO text_search (Text_part) VALUES ('548-se') INSERT INTO [Connect] (ID, text_id) VALUES (2,78) INSERT INTO text_search (Text_part) VALUES ('48-sek') INSERT INTO [Connect] (ID, text_id) VALUES (2,79) INSERT INTO text_search (Text_part) VALUES ('8-sek1') INSERT INTO [Connect] (ID, text_id) VALUES (2,80) INSERT INTO text_search (Text_part) VALUES ('ez548-s') INSERT INTO [Connect] (ID, text_id) VALUES (2,81) INSERT INTO text_search (Text_part) VALUES ('z548-se') INSERT INTO [Connect] (ID, text_id) VALUES (2,82) INSERT INTO text_search (Text_part) VALUES ('548-sek') INSERT INTO [Connect] (ID, text_id) VALUES (2,83) INSERT INTO text_search (Text_part) VALUES ('48-sek1') INSERT INTO [Connect] (ID, text_id) VALUES (2,84) INSERT INTO text_search (Text_part) VALUES ('ez548-se') INSERT INTO [Connect] (ID, text_id) VALUES (2,85) INSERT INTO text_search (Text_part) VALUES ('z548-sek') INSERT INTO [Connect] (ID, text_id) VALUES (2,86) INSERT INTO text_search (Text_part) VALUES ('548-sek1') INSERT INTO [Connect] (ID, text_id) VALUES (2,87) INSERT INTO text_search (Text_part) VALUES ('ez548-sek') INSERT INTO [Connect] (ID, text_id) VALUES (2,88) INSERT INTO text_search (Text_part) VALUES ('z548-sek1') INSERT INTO [Connect] (ID, text_id) VALUES (2,89) INSERT INTO text_search (Text_part) VALUES ('ez548-sek1') INSERT INTO [Connect] (ID, text_id) VALUES (2,90) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 12:21 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
поиск: select s.id from serial s join connect c on s.id = c.id join text_search t on t.text_id = c.text_id where text_part = 'sek1' = - самое главное для чего вся возня и была. т.е. не идет сканов и сравнений по like. просто прямая выборка по индексу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 12:22 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
проблемы с размером text_search быть не должно, если делать её уникальным словарем данных. Хотя объем будет больше чем у исходных данных. Ну так его мы и меняем на скорость. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 12:25 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
VoDA sekosНе совсем понял, получается 64 таблицы (длина 2..64) дублирующие данные много раз из основной таблицы? Какие конкретно минусы?Действительно не поняли. Нужна еще одна таблица-справочник для индекса,в которую гонятся все возможные поисковые варианты. + талбица связей из каких серийников получено данное поисковое выражение. если вы внимательно прочитаете условие, то заметите фразу "Fulltext search и "something%" не предлагать плз". То, что вы предлагаете, и есть "something%". Попробуйте прикинуть количество строк в вашей таблице, если искомая строка начинается не с первой позиции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 21:44 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
VoDAgroup by - обычно тыжеловат. да и - having count(*) = (select count(*) from #w); ИМХО тоже дает нагрузку на систему. Так все дает нагрузку на систему. Я когда-то сравнивал на эквивалентных запросах count(*) в подзапросе с group by, последний оказался в 2 раза быстрее, с тех пор стараюсь использовать его. Если есть идеи как этот запрос можно упростить/соптимизировать, то будет очень интересно обсудить. Кстати если бы запросы были вида like "something%", то проблем бы не было, сервер использовал бы индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2006, 06:12 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
Выбегаллоесли вы внимательно прочитаете условие, то заметите фразу "Fulltext search и "something%" не предлагать плз". То, что вы предлагаете, и есть "something%". Попробуйте прикинуть количество строк в вашей таблице, если искомая строка начинается не с первой позиции. Читаем внимательно: sekosВ данных момент есть поиск в бд LIKE "%something%". Тормозит на больших обьемах данных. Fulltext search и "something%" не предлагать плз. В данном случае всё написано на MySQL 4.0. Другие БД могут справиться с этой задачей лучше? Нужно искать именно n-ое кол-во букв в строке. Длина - 2..64 символа. Может есть варианты что-то кардинально изменить, улучшив скорость? Мое предложение это НЕ использует Fulltext search и НЕ использует выражения "something%" . PS предложения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 16:18 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
Сколько потребуется insert-ов для 64-байтного идентификатора ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2006, 00:56 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
ВыбегаллоСколько потребуется insert-ов для 64-байтного идентификатора ?Отвечаю: много, но основной вопрос не как съэкономить место, а Может есть варианты что-то кардинально изменить, улучшив скорость? . Если есть вариант лучше - предложите! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2006, 16:10 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
VoDA ВыбегаллоСколько потребуется insert-ов для 64-байтного идентификатора ?Отвечаю: много, но основной вопрос не как съэкономить место, а Может есть варианты что-то кардинально изменить, улучшив скорость? . Если есть вариант лучше - предложите! Hint: 64! -- число о восьмидесяти девяти знаках. Так будем место экономить, или так сойдёт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2006, 05:17 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
DocAl Hint: 64! -- число о восьмидесяти девяти знаках. Так будем место экономить, или так сойдёт? Извините, что встреваю, но прочитав условие я не понял, причем тут 64! ??? У меня получается 2016 "кусочков" в случае если длина серийника 64. Это конечно дофига, учитывая, что 70млн серийников. То есть в худшем случае имеем 150 миллиардов частей серийников длиной от 2х до 64 Но: 1. Не все серийники имеют длину в 64, я так надеюсь. И для скажем 20ти значного серийника получаем уже 190 "кусочков", что уже терпимо. 2. Можно ограничить длину поиска - в задаче конечно задано 64 верхняя граница, но это окнечно нонсенс. Имхо человек обычно ищет 5-10 символов, реже - 10-15. Так что скажем ограничение в 20 видится мне вполне разумным, а так мы получаем при длине серийника 64 символа всего (или "всего"?) 1026 "кусочков", то есть сократили почти в два раза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2006, 10:27 |
|
||
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#18+
Кстати, я вот прикинул. Дано: дополнительная табличка: Код: plaintext Где source_id - FK на родительскую табличку с серийниками Для серийника длиной 64 символа - создаём 2016 строк в таблице parts, общий размер данных - 53 КБ. Для серийника длиной 20 символов - создаём 190 строк в в таблице parts, общий размер данных - 2 КБ. Для серийника длиной 10 символов - создаём 45 строк в в таблице parts, общий размер данных - 390 Б. И плюс размер индекса. Ну а не зная среднего размера серийника ничего сказать нельзя. Если все серийники по 64 символа - жопа получится. 70млн на 53КБ ~= 4 ТБ, 140 миллиардов строк. Но если же в основном они по 20 символов - всего-то ~ 140 ГБ, 14 миллиардов строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2006, 11:02 |
|
||
|
|

start [/forum/topic.php?all=1&fid=35&tid=1553574]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 374ms |

| 0 / 0 |
