Хранить всю текстовую информацию в одной таблице БД

Spear

почемучка
Хранить всю текстовую информацию в одной таблице БД

Добрый день,
я сейчас делаю движок сайту, и возник такой вопрос -
нужно сделать посик по всему сайту, по новостям, статьям, описанию файлов и прочей инфе, которая лежит в БД.
Если делать поиск отдельно по разделам - то ничего сложного (select from news where..).
А вот если мне нужно сделать поиск сразу по всем рзаделам, с возможностью разить результаты постранично? Не нашел никаких реальных способов.

Поэтому появилась такая идея - может хранить ВСЮ текстовую инфу, которая должна быть задействована при поиске,
в одной таблице БД, указывая помимо текста идентификатор модуля\раздела, для которого этот текст.
Сама проблема в том, что я не знаю насколько это будет "напряжно" для сервера, т.к. хранить нужно будет:
новости
обзоры
статьи
описания файлов
описания фалов (другой тп файлов, Не другая категория.. вообщем нужно :))
ещё кое-какая инфа.

Соотвественно структура таблицы текстов будет такая:
id (auto increment)(key) / text (longtext) / module (varchar 50, index)

Ну а уже в таблице новостей буду добавлчть поле, в котором указывается ID текста для этой новости в таблице текстов.

проблемы вот в чем:
1. Может все-таки есть какой-то способ организовать посик по нескольким таблицам, так чтобы ещё и запрос не очень увесистый получился?

2. Насколько вообще допустим вариант с хранением всех текстов в 1 таблице? Учитывая что размер у неё будет довольно-таки крупный (в день по 10 записей на 5-10кб каждая точно будет + несколько мелких описания файлов и прочего).

Благодарю за внимание
 

sage

Новичок
Чем вот это
>Если делать поиск отдельно по разделам - то ничего сложного (select from news where..).
отличается от
>А вот если мне нужно сделать поиск сразу по всем рзаделам, с возможностью разить результаты постранично?
 

dimants

Новичок
лучше сделай запрос типа join, и перечисли все нужные тебе таблицы, мне кажется это наиболее реальный вариант
а в одной таблице хранить всю инфу... - это ж потом с ума сойдешь ее разбирать:)
 

kruglov

Новичок
у меня поисковый робот обходит сайт по ссылкам, чистит теги и пишет результат в отдельную таблицу типа (uri, title, text), где мы и ищем.
 

Кром

Новичок
>а в одной таблице хранить всю инфу... - это ж потом с ума сойдешь ее разбирать

Не, на самом деле вполне нормальный вариант. Никакой инфы хранить там не нужно. Только индексированные блоки текста, т.е. индексы самих статей, которые будут лежать в других таблицах.

>пишет результат в отдельную таблицу типа (uri, title, text), где мы и ищем.

К такой таблице не помешает добавить id разделов, чтобы можно было искать по новостям или по статьям.
 

Spear

почемучка
Полазил по зарубежным крупным порталам,
и заметил такую интересность - почти все они хранят абсолютно всю инфу контента в одной таблице.

По крайней мере такое создателся впечатление.
вот, например, http://www.gamespot.com
я посомтрел - любая статья, любая новость, лбой файл и так далее имеют последовательный порядковый номер,
и, скажем, подставив в строке браузера вместо номера новости номер любой статьи или номер файла (номер имеется ввиду его ID из адресной строки) получаем в разделе новостей текст из какой-то статьи или описалово файла.

У меня к вам вопрос: что это вообще такое? То есть как ОНО работает? есть одна огромная таблица, куда все постится? Просто очень интересно, ведь если такие крупные порталы используют подобный подход, быть может и самому что-то подобное попробовать. главное - понять принцип.
 

zarus

Хитрожопый макак
А почему бы просто не использовать Google Search Bar, как это сделано на php.net?
 

ONK

Пассивист PHPСluba
Spear, хранение текстовых данных сайта в одной таблице вполне разумное решение. Осталось продумать механизм "идентификации сущностей" идентификация по имени модуля явно никуда не годится. Один модуль может работать с несколькими "текстовыми сущностями".
 

Spear

почемучка
Давайте вместе подумаем,
т.к. идея очень интересная, да и удобная (например, одним запросом в бд вывести последние новости, статьи, добаления в базу фалов и прочего - все ведь в одной таблице)
 

whirlwind

TDD infected, paranoid
>я посомтрел - любая статья, любая новость, лбой файл и так далее имеют последовательный порядковый номер,

А это вовсе не означает, что все данные хранятся в одной таблице. Это как реестр объектов - есть сиквенс ID и интерсиквенс ID. Первый - глобальный нумератор, который по каким то признакам объединяет разнотипные объекты, а второй - внутренний нумератор, использующийся для идентификации объектов среди множества ему подобных. Пример - биллинговые системы. Номер транзакции один, а типов документов может быть множество. Помимо нумерации, глобальная последовательность позволяет делать выборки данных принадлежащих различным типам документов на основании общих реквизитов (дата, сумма, основани, etc...).

По топику. Вариант господина kruglov ИМХО наименее затратный, т.к. этих роботов уже писано переписано.
 

Spear

почемучка
whirlwind
вариант поскового роблота я уже даже не рассматриваю.
Мне теперь нужно все-таки понять как спроектировать базу для хранения всего в одной таблице
 

antono

Новичок
Мое мнение - в одной таблице все. Если админпанель сделана для сайта полностью, то никакой путаницы не будет.
 

Spear

почемучка
antono
ну это уже понятно.
Нужно же теперь придумать нормальную реализацию.
У меня,например, минимум 10 разделов (разоичные новости, статьи, файлы (к ним-описание))
Как это все аккуратно связать и сделать красиво да так. чтобы с первого раза, т.к. делаю крпный сайт и потом после его запуска изменять структуру БД в корне не получится. (точнее, конечно, поулчится, но многим это непонравится)
 

whirlwind

TDD infected, paranoid
>Мне теперь нужно все-таки понять как спроектировать базу для хранения всего в одной таблице

Что то я не совсем понимаю. Т.е. вы вообще без индексирования хотите обойтись? Хотите сканировать таблицу с блобами реалтайм?
 

Spear

почемучка
ну да, наверное.
Может быть я чего-то не понимаю, но лишь потому что так объяснили.
Буду рад если просветите ;)
 

whirlwind

TDD infected, paranoid
Боюсь что единственный отработанный на сегодняшний день алгоритм поиска удовлетворяющий требованию большинства проектов - это поиск по предварительно построенным индексам. Выбрать можно:

1. Модель индексов
2. Механизм индексирования

На все остальное вы скорее всего потратите время в пустую
 

Spear

почемучка
whirlwind
а можно где-то про это конкретнее прочитать? т.к. сейчас для меня это просто два словосочеания :(

пс
а вообще уходим от темы. Я все вот думаю как БД правильно спроектировать.
 

whirlwind

TDD infected, paranoid
>а можно где-то про это конкретнее прочитать? т.к. сейчас для меня это просто два словосочеания

К сожалению хорошими ссылками не поделюсь - не специалист. Вводную можно почитать хотя бы здесь http://company.yandex.ru/articles/article10.html .
Но насчет блобов реалтайм вам точно скажу - не вариант. Была у меня лет пять тому попытка повесить все объекты на единую ось в БД и она до сих пор фунциклирует http://prolib.ru/cgi-bin/seek/? но от поиска пришлось отказаться, т.к. даже при том небольшом кол-ве статей быстродействие ниже плинтуса.
 

Spear

почемучка
а вообще,
например в таблице будет 100 000 записей.
Насколько долгим будет запрос, скажем
select title from OBJECTS_TABLE where date = '2006-02-19'
?
или нормально, по этому повооду можно не волноваться?
 
Сверху