Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите выбрать бд для поиска текста в большой бд
|
|||
|---|---|---|---|
|
#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?fid=35&msg=33752878&tid=1553574]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 254ms |
| total: | 365ms |

| 0 / 0 |
