Добрый день. Проектирую проект(сайт). Будет база, основная таблица будет содержать около 50 000 строк.
В каждой строке, будет столбец в котором будет от 5 до 100 слов (keywords) разделенные каким либо символом. При открытие каждой страницы, будет производиться морфологической поиск (по словам keywords) по данной таблицу, и формировать какие строки показать на ней. Технологию поиска планирую использовать shpinx.
Сейчас хочу использовать базу Msql, так же laravel. Страницы планирую кешировать на сутки, дабы не уронить сайт, постоянным поиском при формирование каждой страницы. Вроде кеширование должно спасти, но может стоит обратить внимание на какую либо другую базу, к тому же laravel предлагает: MySQL, PostgreSQL, SQLite и SQL Server из коробки. Я так понимая основная нагрузка на базу у меня будет из поиска, вроде spinx должен ее уменьшить своей индексацией.
Вообщем надеюсь получить совету, какую базу использовать при таком раскладе, может использовать другую технологию поиска, может кто имел опыт в подобных задачах. Спасибо за внимание.
В каждой строке, будет столбец в котором будет от 5 до 100 слов (keywords) разделенные каким либо символом.
Зачем? Захотелось лишних проблем?
Сейчас хочу использовать базу Msql, так же laravel.
Бери постгрес.
Страницы планирую кешировать на сутки, дабы не уронить сайт
Страницы нужно кэшировать тогда, когда бэкенду станет жарко. Ну и.. Кэшировать на сутки? За сутки инфа не меняется? Может, лучше на час и подогревать кэш?
P.S. Не используй конфиг базы из коробки. Хотя, для таких смешных данных, хватит и стандартного конфига.
в одной строке может быть в зоне поиска 100 слов, мне показалось что такое тяжело искать будет. Плюс возможно для формирования страницы, мне придется сделать не один запрос((
Разные скорей всего, ну дублироваться конечно будут, но как мне кажется не сильно, как проверить частоту повторения трудновато мне сделать, 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 подключить.
1) Забиваете на SQLite и SQL Server, первая не про то, вторая под windows.
2) как бы вы не спроектировали базу, и что бы вы не выбрали Mysql или Postgres, отличаться будет только запрос на индексацию для сфинкса, который в любом случае будет отдавать вам primary key нужного вам документа, а выборка по PK в любой базе элементарная операция. Кеширование не нужно, сфинкс ваши максимальные 5 000 000 слов даже не заметит.
на laravel вы видимо будете использовать ORM, поэтому для вас, что postrgers что mysql. Ну разве что mysql более коробочный.