Показать сообщение отдельно
  #1 (permalink)  
Старый 02.02.2009, 21:36
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

MySQL:Поиск в большой таблице(~5млн)
Хочу сделать систему индексации-поиска по файлам локальной p2p сети(DC)
Ориентировочное количество файлов в базе - 5млн.На вырост планируется до 10млн.
Система аналогичная есть, но она использует сторонние програмные продукты и ставится только под окнами.
вот адрес системы http://dc-poisk.no-ip.org:17000/
Меня же интересует написание системы с нуля

Необходимо сделать возможность поиска по подстрокам внутри имен файлов.
При этом нужно приемлимое время поиска(не более 5 секунд)

Индекс FULLTEXT не подходит, в связи с его предназначенностью для естественныех языков(он не выдаст строку "Ochen_strashnoe_kino" в ответ на запрос "kino")
Извлечение по типу "LIKE '%kino%'", которое не рекомендуется даже для маленьких таблиц тут также неприемлимо.время запрос а растет пропорционально количеству строк в базе, до тех пор пока оно способно хранить индекс в памяти(~2.5сек на 500к строк).потом наверно будет расти по экспоненте.
была идея насчет разбития текстовых строк на блоки например по 8 символв, вынести в отдельную таблицу, и вести поиск уже по ней посредством "LIKE 'kino%' or LIKE 'ino%'..."
к сожалению скоростью это тоже не отличается.

Если у кого-нибудь есть идеи кроме описанных, как организовать эту базу прежде всего для эффективного поиска(даже путем увеличенного времени помещения данных)?
Работать предполагается в связке PHP-MySQL, но внешние решения также подойдут
буду рад любой помощи, и даже(тем более) отсылкам на статьи и мануалы(при условии прямой ссылки, и желательно на русском)
Аппаратные решения по типу дорастить оперативу до 32Gb и поставить базу на RAID0 из 4х SSD-накопителей не принимаются

PS вопрос не является жизнено важным, так как проект некомерчиский, и пишется для себя, по причине "потому что интересно"
Ответить с цитированием