Добрый день. Проектирую проект(сайт). Будет база, основная таблица будет содержать около 50 000 строк.
В каждой строке, будет столбец в котором будет от 5 до 100 слов (keywords) разделенные каким либо символом. При открытие каждой страницы, будет производиться морфологической поиск (по словам keywords) по данной таблицу, и формировать какие строки показать на ней. Технологию поиска планирую использовать shpinx.
Сейчас хочу использовать базу Msql, так же laravel. Страницы планирую кешировать на сутки, дабы не уронить сайт, постоянным поиском при формирование каждой страницы. Вроде кеширование должно спасти, но может стоит обратить внимание на какую либо другую базу, к тому же laravel предлагает: MySQL, PostgreSQL, SQLite и SQL Server из коробки. Я так понимая основная нагрузка на базу у меня будет из поиска, вроде spinx должен ее уменьшить своей индексацией.
Вообщем надеюсь получить совету, какую базу использовать при таком раскладе, может использовать другую технологию поиска, может кто имел опыт в подобных задачах. Спасибо за внимание.
Разные скорей всего, ну дублироваться конечно будут, но как мне кажется не сильно, как проверить частоту повторения трудновато мне сделать, keywords сейчас просто в текстовом файле по строчкам, там их около 6000 миллионов, но они не все будут использоваться их еще с объектами не сводил. Я думал что бы разделить keywords от основной таблице, но тогда их связывать надо будет, а как читал, это всегда увеличивает нагрузку.
livemirsi: используйте разные таблицы, поиск по ключу, и вам тут даже не нужны будут технологии, о которых вы говорите.
Если все слова будут разными, то еще проще, оставляйте две таблицы,
lines и keywords,
и двумя запросами побеждайте вашу задачу.
1 запрос - "select id from keywords, where title ='скука'"
перед вторым запросом у вас уже есть ид слова, и если нужны дополнительные сведения, то
2 запрос - select * from lines where id=123;
Там поиск нужен морфологический, то есть слова "стул" должен находить и "стулья" и "стульев", хотя вы натолкнули меня на мысль, как будет проще sphix искать, в 800 000 (возможно чуть больше) строках по одному keywords или же в 50 000 строк но с большим количеством слов.
Извините, немного не понимаю, ну вот будет потребность найти keywords "table", а в таблице указан "tables", обычными средствами баз данных такого поиска же не добиться, или я ошибаюсь?
Первым запросом ищете слово
"select lines_id from keywords where title ='toble' limit 1"
получаете lines_id, а в нем можете хранить слово оригинал, например table, и при необходимости добивать второй запрос.
Наверно это моя ошибка, забыл упомнить, что пользователи имеют возможность тоже начинать поиск, а тут как раз и будет проблемка, не можно конечно, найти библиотеку, и найти на php все возможные варианты искомого слова (а слово может быть и не одно заданно в поиске) и искать в базе, но мне кажется как то проще spinx подключить.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.