Вкратце, я качаю сайты с интернета, чтобы искать по html коду. То есть в итоге, могу найти все сайты с заполненым description или подгружающие определенный js файл. Мне надо сделать на этих данных поиск, который выводил бы первые 1000 результатов "внезапно" и сразу в несколько потоков. Я уже попробовал поиск по триграммам в 1 таблице постгрес, всё плохо, скорость ужасная.
Сейчас я хочу сделать поиск по триграммам разделенным на файлы, хочу посоветоваться. Допустим есть файлы (название по сути триграмма, данные в файле).
ааа.txt:1,2,3,4,12;
ббб.txt:2,3,4,5,13;
ввв.txt:3,4,5,6,14;
ддд:1,3,5,7,15
Отмечу, очень часто номера действительно будут идти последовательно для популярных триграмм. Но не всегда.
Мне получить первую тысячу номеров, которые отвечают условию: есть (ааа и ббб) нет (ввв).То есть запрос должен вернуть только номера 1, 2, 12, 13. На сегодня у меня около 200 гб полусжатых html кодов уникальных страниц и миллионов 15 сайтов. Ну и куча ссылок в очереди. Какие у меня вопросы.
1. Есть три варианта сохранения триграмм (количество, чего там): 3511808 штук - почти весь ascii диапазон; 681472 штук - всё кроме ру букв; 238328 штук - всё, кроме ру букв и верхнего енгл регистра. С одной стороны хочется искать ру символы (анкор листы и ссылочное), но скорее всего работать будет всё это только под енгл и изначально ориентировано на поиск кода. К тому же, парсится весь интернет, а исключение я сделаю только для ру букв. Какой вариант выбрали бы Вы?
2. Я работал и с 60 миллионов файлов, меня не пугает разница в 600 тысяч и 200 тысяч. Какие минусы, кроме более активного юзанья диска есть у большого числа файлов?
3. Фишка файлов, по моему мнению, что я получу колоночную БД в том виде как я её понимаю. То есть у меня будет:
ааа.txt:1:4\n12;
ббб.txt:2:5\n13;
ввв.txt:3:6\n14;
ддд:1:7\n15
Так как речь идет о миллионах записей, то экономия места будет приличная. Выборку мне номеров надо будет писать самостоятельно, то есть алгоритма ещё нет.
Не слишком ли сложно я задумал? Как можно сделать намного проще? Или как бы сделали Вы?
4. Точно ли делать на файлах? Может многие нормальные БД спокойно переварят 600 тысяч таблиц? Какую БД посоветуете?
зы
Sphinx установить не предлагайте. Первое, я хочу сам написать алгоритм, я программист на пхп и паскале или где? Второе, Всё таки он заточен под поиск по словам, а мне надо чтобы вырванные из контекста теги искало. Например, <h1 style="color:blue;">This is a Blue Heading</h1>